1. 測試目的
測試Cassandra集群讀寫TPS的極值,確定Cassandra讀寫性能。
2. 測試環境
2.1 硬件信息
CPU | 8核 Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz |
RAM | 16G |
2.2 軟件信息
JDK | 1.8u151 |
Cassandra | 3.11.1 |
cassandra-driver-core | 3.3.2 |
OS | CentOS Linux release 7.3.1611 |
2.3 集群信息
集群名稱 | IP | 類型 |
JCPT Test Cluster | 10.112.68.184 | 節點1 |
10.112.68.185 | 節點2 | |
10.112.68.186 | 節點3(種子節點) | |
10.112.68.189 | 節點4 | |
10.112.68.191 | 節點5 | |
10.112.68.192 | 節點6(種子節點) |
2.4 主要配置信息
集群配置為單數據中心,測試時,數據庫keyspace的,采取SimpleStrategy策略
副本因子:3
分區器:Murmur3Partitioner
整個過程中通用設置如下
A.線程池設置:
setCoreConnectionsPerHost(HostDistance.LOCAL, 2)
setMaxConnectionsPerHost(HostDistance.LOCAL, 4)
B.每次連接最大請求數量采取默認設置:本地端--1024;遠程端--256
C.本地線程池門限采用默認設置:32
3. 測試過程
先測試單個客戶端的讀寫性能,再測試多個客戶端的TPS,測試出服務器讀寫操作的TPS瓶頸。
3.1 單客戶端測試讀寫性能及結果
在單個客戶端對集群中的單表進行數據讀寫操作,測試讀寫性能。
具體過程:
100個並發向同一張表處理100W數據;
200個並發向同一張表處理100W數據;
500個並發向同一張表處理100W數據;
1000個並發向同一張表處理100W數據;
1500個並發向同一張表處理100W數據;
(腳本測試所在機器:10.112.68.186)
測試結果:
l 表一 單數據庫100W數據性吞吐量性能測試
100 | 200 | 500 | 1000 | 1500 | |
insert | 5472 | 5574 | 23429 | 30781 | 35024 |
select | 18985 | 20323 | 35795 | 39088 | 38927 |
update | 5766 | 5824 | 27805 | 34301 | 35867 |
delete | 5446 | 5328 | 26581 | 34934 | 34635 |
l 表二 單數據100W數據時間耗時時測試
100 | 200 | 500 | 1000 | 1500 | |
insert | 182.734 | 179.406 | 42.683 | 32.488 | 28.566 |
select | 52.672 | 49.206 | 27.937 | 25.583 | 25.702 |
update | 173.439 | 171.717 | 25.779 | 29.154 | 27.895 |
delete | 183.608 | 187.671 | 37.621 | 28.625 | 28.887 |
為了直觀上看各項性能變化,將上述表格使用折線圖表示,如圖1、圖2所示:
圖1 100W性能測試—TPS
圖2 100W性能測試—耗時(S)
3.2 多客戶端測試讀寫性能及結果
在多個客戶端分別對集群中的同一張表進行數據讀寫操作,測試讀寫性能。
過程:
I. 2個客戶端進行分別處理100W數據,將各個客戶端TPS值相加,計算集群TPS;
II. 3個客戶端進行分別處理100W數據, 將各個客戶端TPS值相加,計算集群TPS;
III.依次增加客戶端數量,計算TPS達到瓶頸之后,停止增加;
IV. 線程數量為500。
結果:

圖3 多客戶端性能測試—吞吐量(TPS)
集群達到瓶頸之后開始拋出如下錯誤信息:
Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write)
Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write)
Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write)
... ...
4 測試結論
( 1 ) 從單客戶端測試數據得出在並發大於500后個並發范圍內,各項操作TPS提升幅度較大,並發數量為1500時TPS趨於穩定,測試線程數大於1500之后會出現響應超時錯誤。
( 2 ) 當增加客戶端數量,集群 TPS線性增加,集群讀寫TPS可以達到6萬,之后趨於穩定,其中超過6個客戶端同時進行百萬級讀數據操作時達到瓶頸,寫操作在超過7個客戶端后同時進行百萬級寫數據操作時性能達到瓶頸,此時寫和修改操作TPS高於讀的TPS。可知:大量數據操作時寫的性能優於讀。
附件:
測試代碼
cassandra-test.rar