Cassandra读写性能测试
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