本文介绍Tair(企业版)持久内存型性能测试的测试环境、测试工具、测试方法与测试结果。
产品概述
Tair持久内存型,基于持久内存技术,为您提供大容量、兼容Redis的内存数据库产品。单实例成本对比Redis开源版最高可降低30%,且数据持久化不依赖传统磁盘,保证每个操作持久化的同时提供近乎Redis开源版的吞吐和延时,极大提升业务数据可靠性。更多信息请参见持久内存型。
测试环境
测试环境信息 | 说明 |
地域和可用区 | 所有测试均在华北3(张家口)地域的可用区A中完成。 |
实例架构 | 标准版(双副本)架构,详情请参见标准架构。 |
部署压测工具的机器 | |
持久内存型实例规格 | 本次测试以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 | 实例的IP地址。 |
port | 实例的服务端口。 |
password | 根据选取账号的不同,密码的填写格式有一定区别:
说明 如果忘记密码,请参见修改或重置密码。 |
recordcount | 数据装载阶段准备的数据量。 |
operationcount | 执行操作的数据量。 |
command_group | 测试的数据结构,本案例中,依次测试下述数据结构:
|
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 |