本文介绍Tair(企业版)磁盘(SSD)型性能测试的测试环境、测试工具、测试方法与测试结果。
测试环境
测试环境信息 | 说明 |
地域和可用区域 | 所有测试均在华东1(杭州)地域的可用区J中完成。 |
Redis实例架构 | 标准版(双副本)架构,详情请参见标准架构。 |
部署压测工具的机器 | |
磁盘(SSD)型实例规格 |
|
测试主要针对下述两种场景进行:
内存大于数据场景:绝大部分数据可以在内存中访问到,此场景下内存与数据的比例约为7:1。
数据大于内存场景:只有部分数据缓存在内存,部分访问请求需要读取硬盘中的数据,根据负载不同,需要访问磁盘的比例也不一样,此场景下内存与数据的比例约为1:4。
测试工具
采用开源社区的YCSB压测工具进行压测。YCSB是一款Java编写的支持多种数据库的性能测试工具,具体安装和使用方法请参见YCSB。
本测试中,对YCSB的相关内容做了一定的修改,使其支持导入long类型的recordcount参数、支持测试Redis的String相关命令,修改后的完整源代码请参见YCSB源码。
测试命令
下述脚本以数据大于内存场景为例。
#! /bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=640000000
fieldcount=1
fieldlength=100
threads=64
load_sleep_time=600
run_sleep_time=60
echo "##################################### $command_group ############################################"
#Load
./bin/ycsb load redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${recordcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads}
sleep ${load_sleep_time}
#Uniform-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}
#Zipfian-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}
#Uniform-50%Read-50%Update
./bin/ycsb run redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}表 1. 参数说明
参数 | 说明 |
ip | Tair实例的IP地址。 |
port | Tair实例的服务端口。 |
timeout | 测试命令的超时时间,单位为ms。 |
command_group | 测试类型,配置为String。 |
recordcount | 数据加载阶段准备的数据量。 |
run_operationcount | Run阶段操作的数据量。本测试中:
|
fieldcount | 字段个数,配置为1。 |
fieldlength | 值长度,配置为100。 |
threads | YCSB线程数,根据实例规格配置。 |
测试结果
测试指标 | 说明 |
QPS | 每秒处理的读写操作数,单位为次/秒。 |
Average Latency | 读或写操作的平均延迟,单位为微秒(us)。 |
99th Percentile Latency | 处理速度最快的99%的操作中,最长的延迟时间,单位为微秒。例如该指标的值为500微秒,表示99%的请求可以在500微秒内被处理。 |
内存大于数据场景
实例规格 | YCSB配置 | 工作负载 | QPS(次/秒) | Average Latency(微秒) | 99th Percentile Latency(微秒) |
tair.localssd.c1m8.xlarge | recordcount=20000000 run_operationcount=20000000 threads=64 fieldlength=100 | Load | 41960 | 1522 | 5523 |
Uniform-Read | 110867 | 574 | 2515 | ||
Zipfian-Read | 116309 | 547 | 2429 | ||
Uniform-50%Read-50%Update | 53116 | READ:1094 | READ:4025 | ||
UPDATE:1310 | UPDATE:4655 | ||||
tair.localssd.c1m8.2xlarge | recordcount=40000000 run_operationcount=40000000 threads=128 fieldlength=100 | Load | 64378 | 1985 | 6091 |
Uniform-Read | 205584 | 620 | 2279 | ||
Zipfian-Read | 211290 | 603 | 2217 | ||
Uniform-50%Read-50%Update | 80796 | READ:1406 | READ:4631 | ||
UPDATE:1756 | UPDATE:5495 | ||||
tair.localssd.c1m8.with.proxy.xlarge(3分片) | recordcount=60000000 run_operationcount=60000000 threads=192 fieldlength=100 | Load | 110169 | 1737 | 11279 |
Uniform-Read | 233028 | 820 | 4675 | ||
Zipfian-Read | 235489 | 811 | 4655 | ||
Uniform-50%Read-50%Update | 122866 | READ:1480 | READ:10311 | ||
UPDATE:1635 | UPDATE:10735 | ||||
tair.localssd.c1m8.with.proxy.2xlarge(3分片) | recordcount=120000000 run_operationcount=120000000 threads=384 fieldlength=100 | Load | 180502 | 2122 | 10727 |
Uniform-Read | 429252 | 891 | 3293 | ||
Zipfian-Read | 438533 | 872 | 3365 | ||
Uniform-50%Read-50%Update | 231044 | READ:1541 | READ:8663 | ||
UPDATE:1772 | UPDATE:9151 |

数据大于内存场景
实例规格 | YCSB配置 | 工作负载 | QPS(次/秒) | Average Latency(微秒) | 99th Percentile Latency(微秒) |
tair.localssd.c1m8.xlarge | recordcount=640000000 run_operationcount=640000000 threads=64 fieldlength=100 | Load | 32596 | 1961 | 8135 |
Uniform-Read | 50227 | 1272 | 3753 | ||
Zipfian-Read | 71804 | 889 | 2947 | ||
Uniform-50%Read-50%Update | 27063 | READ:2306 | READ:8199 | ||
UPDATE:2416 | UPDATE:8535 | ||||
tair.localssd.c1m8.2xlarge | recordcount=1280000000 run_operationcount=1280000000 threads=128 fieldlength=100 | Load | 50608 | 2526 | 9071 |
Uniform-Read | 78931 | 1619 | 4371 | ||
Zipfian-Read | 113338 | 1127 | 3347 | ||
Uniform-50%Read-50%Update | 47564 | READ:2598 | READ:8471 | ||
UPDATE:2778 | UPDATE:8959 | ||||
tair.localssd.c1m8.with.proxy.xlarge(3分片) | recordcount=1920000000 run_operationcount=1920000000 threads=192 fieldlength=100 | Load | 88483 | 2167 | 16383 |
Uniform-Read | 119177 | 1609 | 8775 | ||
Zipfian-Read | 156079 | 1228 | 7663 | ||
Uniform-50%Read-50%Update | 70402 | READ:2670 | READ:19295 | ||
UPDATE:2777 | UPDATE:19535 | ||||
tair.localssd.c1m8.with.proxy.2xlarge(3分片) | recordcount=3840000000 run_operationcount=3840000000 threads=384 fieldlength=100 | Load | 147757 | 2596 | 16559 |
Uniform-Read | 217186 | 1766 | 7087 | ||
Zipfian-Read | 282698 | 1356 | 6131 | ||
Uniform-50%Read-50%Update | 135495 | READ:2766 | READ:18591 | ||
UPDATE:2895 | UPDATE:18815 |
