本文介绍云原生内存数据库Tair持久内存型性能测试的测试环境、测试工具、测试方法与测试结果。

产品概述

Tair持久内存型,基于持久内存技术,为您提供大容量、兼容Redis的内存数据库产品。单实例成本对比云数据库Redis社区版最高可降低30%,且数据持久化不依赖传统磁盘,保证每个操作持久化的同时提供近乎Redis社区版的吞吐和延时,极大提升业务数据可靠性。更多信息请参见持久内存型

测试环境

测试环境信息 说明
地域和可用区 所有测试均在华北3(张家口)地域的可用区A中完成。
Redis实例架构 标准版(双副本)架构,详情请参见标准架构
部署压测工具的机器 云服务器ECS实例,规格为ecs.g6e.8xlarge,详情请参见实例规格族
持久内存型实例规格 本次测试以tair.scm.standard.32m.128d规格为例,规格详情请参见持久内存型实例规格

测试工具

采用开源社区的YCSB压测工具进行压测。YCSB是一款Java编写的支持多种数据库的性能测试工具,具体安装和使用方法请参见YCSB

由于开源版本仅支持测试Hash结构的数据,下载YCSB工具后,需要将YCSB/redis/src/main/java/site/ycsb/db/RedisClient.java文件替换为RedisClient.java文件,用于测试String结构的数据。

工作负载

测试的总数据量8 GB,数据分布方法为zipfian,具体测试场景如下:

  • Load:100%的写操作。
  • Workload C:100%的读操作。
  • Workload A:50%的更新操作与50%的读操作。

关于Workload的详细介绍,请参见Core Workloads

说明 由于应用场景不同,Set、Zset中的复杂命令无法进行通用测试,您可以根据您的业务场景自行测试。

测试命令

#加载数据
workload=a
./bin/ycsb load redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p  "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads}  -p "redis.password=***:*****"

#运行Workload C
workload=c
./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p  "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=***:*****"

#运行Workload A
workload=a
./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p  "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=***:*****" 
表 1. 参数说明
参数 说明
server_ip Tair实例的IP地址。
port Tair实例的服务端口。
password

根据选取账号的不同,密码的填写格式有一定区别:

  • 使用默认账号(以实例ID命名的账号):直接填写密码即可。例如实例默认账号为r-bp1zxszhcgatnx****,自定义密码为Password21,密码验证命令为AUTH Password21
  • 使用新创建的账号:密码格式为user:password。例如自定义账号为testaccount,密码为Rp829dlwa,密码验证命令为AUTH testaccount:Rp829dlwa
说明 如果忘记密码,请参见 修改或重置密码
recordcount 数据装载阶段准备的数据量。
operationcount 执行操作的数据量。
command_group 测试的数据结构,本案例中,依次测试下述数据结构:
  • String
  • Hash
  • List
  • Set
  • Zset
fieldcount 字段或元素个数,本案例中,String数据结构配置为1,其他数据结构配置为10。
fieldlength 值长度,根据测试需求配置。
threads YCSB线程数,根据实例规格配置。

测试结果

测试指标 说明
QPS 每秒处理的读写操作数,单位为次/秒。
INSERT Average Latency 写操作平均延迟,单位为微秒(us)。
INSERT 99th Percentile Latency 处理速度最快的99%写操作中,最长的延迟时间,单位为微秒。例如该指标的值为500微秒,表示99%的请求可以在500微秒内被处理。
READ AverageLatency 读操作平均延迟,单位为微秒。
READ 99thPercentileLatency 处理速度最快的99%读操作中,最长的延迟时间,单位为微秒。
UPDATE AverageLatency 更新操作平均延迟,单位为微秒。
UPDATE 99thPercentileLatency 处理速度最快的99%更新操作中,最长延迟时间,单位为微秒。

Load场景测试结果

表 2. String数据结构
Value长度(字节) QPS(次/秒) INSERT Average Latency(微秒) INSERT 99th Percentile Latency(微秒)
128字节 134,478 473 687
256字节 126,139 504 828
1024字节 99,775 638 1,051
2048字节 77,130 826 1,157
4096字节 60,646 1,050 1,534
表 3. Hash数据结构
Key中的Field数量 Value长度(字节) QPS(次/秒) INSERT Average Latency(微秒) INSERT 99th Percentile Latency(微秒)
10 128 47,353 1,348 1,885
256 46,716 1,366 2,181
1,024 27,759 2,297 2,873
2,048 16,605 3,833 4,923
表 4. List数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) INSERT Average Latency(微秒) INSERT 99th Percentile Latency(微秒)
10 128 64,950 979 1,310
256 47,157 1,348 1,752
1,024 26,719 2,386 3,457
2,048 16,714 3,811 4,751
4,096 10,129 6,279 7,891
表 5. Set数据结构
Key中的Member数量 Value长度(字节) QPS(次/秒) INSERT Average Latency(微秒) INSERT 99th Percentile Latency(微秒)
10 128 63,670 1,001 1,514
256 44,707 1,427 2,129
1,024 25,375 2,513 3,239
2,048 14,318 4,451 5,619
4,096 8,378 7,608 9,095
表 6. Sorted Set数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) INSERT Average Latency(微秒) INSERT 99th Percentile Latency(微秒)
10 128 40,292 1,585 2,469
256 34,168 1,869 2,569
1,024 21,347 2,989 3,905
2,048 12,868 4,956 6,255
4,096 7,864 8,101 9,599

Workload C场景测试结果

表 7. String数据结构
Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒)
128字节 170,699 362 546
256字节 163,829 380 565
1024字节 161,491 386 569
2048字节 130,189 487 729
4096字节 115,433 548 808
表 8. Hash数据结构
Key中的Field数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒)
10 128 96,111 662 874
256 86,892 733 915
1,024 61,608 1,030 1,293
2,048 37,334 1,696 2,331
4,096 25,943 2,429 3,319
表 9. List数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒)
10 128 105,296 604 889
256 97,047 655 890
1,024 66,384 955 1,192
2,048 35,796 1,769 2,461
4,096 26,314 2,392 3,271
表 10. Set数据结构
Key中的Member数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒)
10 128 97,825 651 896
256 80,954 787 970
1024 59,924 1060 1313
2048 33,356 1900 2637
4096 23,605 2677 3723
表 11. Sorted Set数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒)
10 128 58,380 1,093 1,341
256 56,287 1,133 1,390
1,024 47,468 1,338 1,688
2,048 30,073 2,096 2,783
4,096 21,850 2,880 3,765

Workload A场景测试结果

表 12. String数据结构
Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒) UPDATE AverageLatency(微秒) UPDATE 99thPercentileLatency(微秒)
128 141,120 451 616 450 618
256 137,551 463 617 461 618
1,024 124,165 516 724 508 725
2,048 92,652 695 881 678 871
4,096 78,994 819 1,042 791 1,024
表 13. Hash数据结构
Key中的Field数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒) UPDATE AverageLatency(微秒) UPDATE 99thPercentileLatency(微秒)
10 128 99,495 646 831 633 820
256 88,235 731 985 712 966
1,024 72,013 892 1,159 863 2,049
2,048 45,790 1,379 1,898 1,354 2,821
4,096 32,912 1,891 2,931 1,915 7,887
表 14. List数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒) UPDATE AverageLatency(微秒) UPDATE 99thPercentileLatency(微秒)
10 128 71,696 591 775 1,185 1,383
256 66,294 638 800 1,281 1,456
1,024 53,402 791 1,006 1,581 1,865
2,048 36,519 1,221 1,581 2,232 2,831
4,096 28,390 1,618 2,113 2,803 3,777
表 15. Set数据结构
Key中的Member数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒) UPDATE AverageLatency(微秒) UPDATE 99thPercentileLatency(微秒)
10 128 66,346 640 792 1,282 1,445
256 60,010 707 993 1,415 1,957
1,024 45,359 933 1,128 1,858 2,073
2,048 29,027 1,529 2,021 2,820 4,507
4,096 21,440 2,144 2,773 3,726 5,095
表 16. Sorted Set数据结构
Key中的Element数量 Value长度(字节) QPS(次/秒) READ AverageLatency(微秒) READ 99thPercentileLatency(微秒) UPDATE AverageLatency(微秒) UPDATE 99thPercentileLatency(微秒)
10 128 49,695 861 1,050 1,707 1,912
256 48,036 891 1,084 1,763 1,970
1,024 39,795 1,081 1,386 2,107 2,563
2,048 28,415 1,597 1,981 2,855 3,589
4,096 21,317 2,247 2,821 3,665 4,787