更新时间:2024-05-30 GMT+08:00

性能测试方法

本章介绍GeminiDB Redis性能测试的方法,具体包括测试环境,测试工具,测试指标,测试模型,以及测试步骤。

测试环境

  • 区域:中国-香港
  • 可用区:可用区1
  • 弹性云服务器(Elastic Cloud Server,简称ECS):规格选择c6.4xlarge.2,16U32GB,操作系统镜像使用CentOS 7.5 64位版本。
  • 被测试实例的配置:每个实例均包含3个节点。
  • 被测试实例的规格:覆盖以下规格类型,详见表1
    表1 实例规格

    编号

    规格

    cluster1

    4U*3节点

    cluster2

    8U*3节点

测试工具

本次测试采用Redis Labs推出的多线程压测工具memtier_benchmark,具体使用方法请参见memtier_benchmark。下面就使用到的memtier_benchmark的部分功能进行简单介绍。
Usage: memtier_benchmark [options]

A memcache/redis NoSQL traffic generator and performance benchmarking tool.

Connection and General Options:
    -s, --server=ADDR                         Server address (default: localhost)
    -p, --port=PORT                           Server port (default: 6379)
    -a, --authenticate=PASSWORD               Authenticate to redis using PASSWORD
    -o, --out-file=FILE                       Name of output file (default: stdout)

Test Options:
    -n, --requests=NUMBER                     Number of total requests per client (default: 10000)
    -c, --clients=NUMBER                      Number of clients per thread (default: 50)
    -t, --threads=NUMBER                      Number of threads (default: 4)
        --ratio=RATIO                         Set:Get ratio (default: 1:10)
        --pipeline=NUMBER                     Number of concurrent pipelined requests (default: 1)
        --distinct-client-seed                Use a different random seed for each client
        --randomize                           Random seed based on timestamp (default is constant value)

Object Options:
    -d --data-size=SIZE                       Object data size (default: 32)
    -R --random-data                          Indicate that data should be randomized

Key Options:
    --key-prefix=PREFIX                       Prefix for keys (default: memtier-)
    --key-minimum=NUMBER                      Key ID minimum value (default: 0)
    --key-maximum=NUMBER                      Key ID maximum value (default: 10000000)

测试指标

表2 测试指标

指标缩写

指标描述

QPS

每秒执行的读写操作数,单位为次/秒。

Avg Latency

读写操作的平均时延,单位为毫秒(ms)。

P99 Latency

  • 读写操作的P99时延。
  • 99%的操作可以在这个时延内执行完成,即只有1%的操作时延会超过这个值。
  • 单位为毫秒(ms)。

测试模型

  • workload模型
    表3 workload模型

    workload模型编号

    测试模型

    100% Write

    100%写操作(string set)。

    100% Read

    100%读操作(string get),采用均匀随机访问模型,按照严苛场景测试读性能。

    50% Read+50% Write

    50%读操作(string get)+ 50%写操作(string set)。

  • 数据模型
    表4 数据模型

    数据模型编号

    数据模型

    value length

    随机生成value,长度为100字节。

测试场景

表5 测试场景

测试场景

测试场景描述

总数据量小于内存

数据可以全部缓存进内存。

总数据量大于内存

部分数据可以缓存进内存,部分数据需要访问DFV存储池。

测试步骤

以4U*3节点数据库实例为例:

1.首先进行总数据量小于内存大小场景下的写入,读取,以及同时写入和读取操作,并记录各操作的QPS、Avg Latency、P99 Latency。各个workload模型的性能指标的方法如下所示:

  • 测试模型:100% Write模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入60,000,000次长度为100字节的数据,其中数据为各client采用不同seed在[1, 60,000,000]范围内随机生成。基于key的给定范围,本次写入总数据大小小于数据库集群的内存容量。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./output_filename
  • 测试模型:100% Read模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发均匀随机读取60,000,000次数据,读取key范围在[1, 60,000,000]内。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=0:1 --out-file=./output_filename
  • 测试模型:50% Read+50% Write模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入和读取60,000,000次的数据,写入和读取key范围在[1, 60,000,000]内,同时写入和读取操作比例为1:1。基于key的给定范围,本次写入和读取总数据大小小于数据库集群的内存容量。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=1:1 --out-file=./output_filename

2. 在数据库中增加超过数据库集群内存容量的数据:使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入20,000,000次长度为100字节的数据,其中数据为各client采用不同seed在[60,000,001, 780,000,000]范围内随机生成,同时通过设置pipeline参数,增加数据写入效率。基于key的给定范围以及总共写入次数,本次写入总数据大小大于数据库集群的内存容量。

./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 20000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=60000001 --pipeline=100 --key-prefix= --ratio=1:0 --out-file=./output_filename

3. 数据库存储数据量大于数据库集群内存容量条件下,进行写入、读取、同时写入和读取操作,并记录各操作的QPS、Avg Latency、P99 Latency。各个workload模型的性能指标的方法如下所示:

  • 100% Write模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入500,000次长度为100字节的数据,其数据为各client随机生成,key范围在[1, 780,000,000]内。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./output_filename
  • 100% Read模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发均匀随机读取500,000次数据,key范围在[1, 780,000,000]内。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=0:1 --out-file=./output_filename
  • 50% Read+50% Write模型

    使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入和读取500,000次的数据,其数据为各client随机生成,key范围在[1, 780,000,000]内。

    ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=1:1 --out-file=./output_filename