性能白皮书

更新时间:2021-12-28 01:54:38

前言

本文主要指导用户如何测试云Cassandra,以及给出一些我们基准测试的结果。随着内核&云环境不断优化,基准测试结果可能不能代表最优的性能,会不时更新。如果你需要评估业务需要多大规模的Cassandra实例,可以依照本文提供的测试方法做一些基本测试。当然最好的方式还是模拟业务在实例上实际跑一下,这比任何外部测试工具都准确。

测试工具

使用业内标准测试工具YCSB 0.15.0(当前最新release版本)https://github.com/brianfrankcooper/YCSB/tree/0.15.0/cassandra

测试环境

测试直接购买云Cassandra进行测试。

网络:VPC内网,客户端与服务器同地域同可用区实例规模:1DC,3节点实例容量:单节点400G SSD云盘(容量会适当影响性能)压测客户端: ecs.c6.2xlarge(816G)实例规格:当前云Cassandra支持的所有规格

测试负载说明

因为不同业务负载不同(每行字段数,每行数据量等),能达到的吞吐&延迟效果也不同。本文使用YCSB默认的workloada进行测试。用户可以自行调整YCSB参数达到最匹配业务的效果。大部分Cassandra相关测试参数也是默认,详见文档:https://github.com/brianfrankcooper/YCSB/tree/0.15.0/cassandra

主要参数

  • 每行10字段 (默认)

  • 每行1k (默认)

  • 读 : 写 = 95 : 5

  • 读写一致性级别:ONE(默认)

  • 2副本 (因为是云盘,所以使用2副本)

  • 压测线程:根据规格动态调节,具体见测试结果

  • 数据量(recordcount):也就是导入多少行数据,根据规格动态调节,具体见测试结果

  • 压测操作次数(operationcount):压测操作次数和数据量一致

需要注意的是调整一致性级别会影响性能,用户可以根据实际业务情况自行调整。

测试步骤

1. 创建测试表

# cn-shanghai-g 替换成你购买的实例具体的 数据中心ID(DC Name), 在控制台可以找到
create keyspace ycsb WITH replication = {'class': 'NetworkTopologyStrategy', 'cn-shanghai-g': 2};
create table ycsb.usertable (y_id varchar primary key, field0 varchar, field1 varchar, field2 varchar, field3 varchar, field4 varchar, field5 varchar, field6 varchar, field7 varchar, field8 varchar, field9 varchar);
                        

2. 安装测试工具

wget https://github.com/brianfrankcooper/YCSB/releases/download/0.15.0/ycsb-cassandra-binding-0.15.0.tar.gz
tar -zxf ycsb-cassandra-binding-0.15.0.tar.gz
                        

3. 编辑workloads/workloada

加入下面3

hosts=cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com #数据库连接点,控制台可查到
cassandra.username=cassandra #此账号需要有权限读写ycsb keyspace
cassandra.password=123456 #密码忘记可以控制台修改
                        

4. 数据准备阶段(纯写入测试)

nohup ./bin/ycsb load cassandra2-cql -threads $THREAD_COUNT -P workloads/workloada -s > $LOG_FILE 2>&1 &
                        

此测试结果可以观测写入吞吐上限。要想测试最大吞吐,得不断增大$THREAD_COUNT看吞吐是否有增加,同时压测客户端的规格也不能太小。

5. 压测阶段(读写混合测试)

nohup ./bin/ycsb run cassandra2-cql -threads $THREAD_COUNT -P workloads/workloada -s > $LOG_FILE 2>&1 &
                        

此测试结果可以观测读写混合性能情况。

测试结果

测试结果仅供参考,不同负载情况下延迟吞吐效果也不同。用户可以根据上文所述方法,尝试用不同参数,不同的压力,更大数据量(更长时间)去得到更符合业务情况的测试结果。注意客户端规格也会影响测试结果,不要用共享型。

测试结果解释

  • Load:数据准备阶段(纯写入测试)。

  • Run:压测阶段(读写混合测试)。

  • OPS:每秒操作次数,也就是整个阶段的吞吐。

  • WAVG:写平均延迟,单位:微秒。

  • RAVG:读平均延迟,单位:微秒。

  • RP999:99.9%分位读延迟,单位:微秒。

  • 线程:100/100,表示数据准备阶段YCSB测试线程/压测阶段YCSB测试线程。

压测阶段分两组,一组满负载,一组正常负载。

CPU 80% 负载

规格

线程

数据量(万行)

Load OPS

Load WAVG

Run OPS

Run WAVG

Run RAVG

Run RP95

Run RP99

Run RP999

规格

线程

数据量(万行)

Load OPS

Load WAVG

Run OPS

Run WAVG

Run RAVG

Run RP95

Run RP99

Run RP999

48G

100/100

1600

32277

3071

29745

2846

3363

7795

23039

43999

CPU 60% 负载

规格

线程

数据量(万行)

Load OPS

Load WAVG

Run OPS

Run WAVG

Run RAVG

Run RP95

Run RP99

Run RP999

规格

线程

数据量(万行)

Load OPS

Load WAVG

Run OPS

Run WAVG

Run RAVG

Run RP95

Run RP99

Run RP999

48G

100/16

1600

32063

3093

16721

514

974

1879

3047

28063

说明

本文只列了SSD云盘结果。因为高效云盘也拥有不错的IOPS,在数据规模&实例规格较小的情况下,差距不明显(磁盘不是瓶颈),不具备参考价值。用户可以根据实际业务情况,模拟相对真实的负载,实际测试一下。业务侧实际能达到的效果还应结合业务应用实现,比如Java实现的应用可能客户端侧本身GC就会影响延迟。

  • 本页导读 (1)
  • 前言
  • 测试工具
  • 测试环境
  • 测试负载说明
  • 测试步骤
  • 1. 创建测试表
  • 2. 安装测试工具
  • 3. 编辑workloads/workloada
  • 4. 数据准备阶段(纯写入测试)
  • 5. 压测阶段(读写混合测试)
  • 测试结果
  • 测试结果解释
  • CPU 80% 负载
  • CPU 60% 负载