持久内存型性能白皮书

本文介绍Tair(企业版)持久内存型性能测试的测试环境、测试工具、测试方法与测试结果。

产品概述

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

测试环境

测试环境信息

说明

地域和可用区

所有测试均在华北3(张家口)地域的可用区A中完成。

实例架构

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

部署压测工具的机器

云服务器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

实例的IP地址。

port

实例的服务端口。

password

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

  • 使用默认账号:直接填写密码即可。例如实例默认账号为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