磁盘(SSD)型性能白皮书

更新时间:
复制 MD 格式

本文介绍Tair(企业版)磁盘(SSD)型性能测试的测试环境、测试工具、测试方法与测试结果。

测试环境

测试环境信息

说明

地域和可用区域

所有测试均在华东1(杭州)地域的可用区J中完成。

Redis实例架构

标准版(双副本)架构,详情请参见标准架构

部署压测工具的机器

云服务器ECS实例,规格为ecs.c9i.8xlarge,规格详情请参见实例规格族

磁盘(SSD)型实例规格

  • tair.localssd.c1m8.xlarge

  • tair.localssd.c1m8.2xlarge

  • tair.localssd.c1m8.with.proxy.xlarge(3分片)

  • tair.localssd.c1m8.with.proxy.2xlarge(3分片)

测试主要针对下述两种场景进行:

  • 内存大于数据场景:绝大部分数据可以在内存中访问到,此场景下内存与数据的比例约为7:1。

  • 数据大于内存场景:只有部分数据缓存在内存,部分访问请求需要读取硬盘中的数据,根据负载不同,需要访问磁盘的比例也不一样,此场景下内存与数据的比例约为1:4。

测试工具

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

本测试中,对YCSB的相关内容做了一定的修改,使其支持导入long类型的recordcount参数、支持测试RedisString相关命令,修改后的完整源代码请参见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阶段操作的数据量。本测试中:

  • 内存大于数据场景下,配置和recordcount参数相同的值。

  • 数据大于内存场景下,配置的值与recordcount 相同。

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

42275

1511

4987

Uniform-Read

104303

611

2163

Zipfian-Read

105217

605

2259

Uniform-50%Read-50%Update

52267

READ:1114

READ:4191

UPDATE:1329

UPDATE:4827

tair.localssd.c1m8.2xlarge

recordcount=40000000

run_operationcount=40000000

threads=128

fieldlength=100

Load

64104

1993

5951

Uniform-Read

174533

730

2049

Zipfian-Read

177612

718

2033

Uniform-50%Read-50%Update

75762

READ:1509

READ:4667

UPDATE:1864

UPDATE:5479

tair.localssd.c1m8.with.proxy.xlarge(3分片)

recordcount=60000000

run_operationcount=60000000

threads=192

fieldlength=100

Load

116107

1647

9983

Uniform-Read

225613

847

3687

Zipfian-Read

234014

816

3279

Uniform-50%Read-50%Update

138884

READ:1321

READ:8131

UPDATE:1435

UPDATE:8479

tair.localssd.c1m8.with.proxy.2xlarge(3分片)

recordcount=120000000

run_operationcount=120000000

threads=384

fieldlength=100

Load

170447

2246

11935

Uniform-Read

323136

1184

4005

Zipfian-Read

330023

1159

3951

Uniform-50%Read-50%Update

207350

READ:1759

READ:9031

UPDATE:1934

UPDATE:9439

image.png

数据大于内存场景

实例规格

YCSB配置

工作负载

QPS(次/秒)

Average Latency(微秒)

99th Percentile Latency(微秒)

tair.localssd.c1m8.xlarge

recordcount=640000000

run_operationcount=640000000

threads=64

fieldlength=100

Load

33198

1925

7699

Uniform-Read

48243

1324

3659

Zipfian-Read

66635

958

3003

Uniform-50%Read-50%Update

28779

READ:2169

READ:7531

UPDATE:2272

UPDATE:7851

tair.localssd.c1m8.2xlarge

recordcount=1280000000

run_operationcount=1280000000

threads=128

fieldlength=100

Load

48605

2631

8463

Uniform-Read

83687

1527

3889

Zipfian-Read

113742

1123

3351

Uniform-50%Read-50%Update

46606

READ:2652

READ:8815

UPDATE:2835

UPDATE:9367

tair.localssd.c1m8.with.proxy.xlarge(3分片)

recordcount=1920000000

run_operationcount=1920000000

threads=192

fieldlength=100

Load

89421

2144

15351

Uniform-Read

115967

1653

9311

Zipfian-Read

155686

1231

6359

Uniform-50%Read-50%Update

72890

READ:2585

READ:16479

UPDATE:2676

UPDATE:16719

tair.localssd.c1m8.with.proxy.2xlarge(3分片)

recordcount=3840000000

run_operationcount=3840000000

threads=384

fieldlength=100

Load

137521

2789

16591

Uniform-Read

185273

2070

8575

Zipfian-Read

238099

1610

6203

Uniform-50%Read-50%Update

128080

READ:2930

READ:15535

UPDATE:3060

UPDATE:15807

image.png

相关文档

磁盘型