GaussDB(for Redis)与原生Redis集群的性能对比

说明

本文为GaussDB(for Redis)和开源Redis集群在X86架构下性能测试对比报告,分析测试结果,GaussDB(for Redis)较开源Redis集群能提供更高的QPS,更低的访问延迟,以及更低的数据存储成本。

测试方案

测试环境

华为云北京四环境,具体部署方式参照2.4章节拓扑图。

服务端资源配置

名称 CPU 内存 存储 数据库类型 价格(包月)
GaussDB Redis 4vCPU 48G 120GB GaussDB(for Redis) ¥4,606.80
proxy redis 48G(主)+48G(备) 开源Redis集群 ¥4,874.88

客户端配置

测试执行机规格:

名称 CPU 内存 操作系统
ECS虚拟机(2台) 8vCPUs 16G CentOS 6.9 64bit

规格:通用计算增强型 | c6.2xlarge.2 | 8vCPUs | 16GB

实例部署拓扑图

GaussDB(for Redis)集群部署

image.png

开源Redis集群部署

image.png

测试工具

测试工具 版本 下载地址
memtier_benchmark 1.3.0 https://github.com/RedisLabs/memtier_benchmark

测试流程

测试环境准备

  1. 登录华为云:www.huaweicloud.com
  2. 创建GaussDB(for Redis)集群
    购买GaussDB(for Redis)实例参考https://support.huaweicloud.com/qs-nosql/nosql_02_0071.html
    image.png
  3. 创建开源Redis集群
  4. 购买测试客户端ECS,安装memtier_benchmark

测试样例

string类型纯写测试

执行以下命令,测试string类型纯写的性能,并为读测试预置数据。

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4  -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --ratio=1:0 --key-pattern=S:S --show-config

string类型纯读测试

执行以下命令,测试get的性能

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4  -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --ratio=0:1 --key-pattern=S:S --show-config

string类型读写1:1测试

执行以下命令,测试读写1:1的性能

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4  -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --ratio=1:1 --key-pattern=S:S --show-config

hash类型纯写测试

执行以下命令,测试hset的性能,并为下阶段读预置数据。

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4 -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --command='hset __key__ field __data__' --command-key-pattern=S --command-ratio=1 --show-config

hash类型纯读测试

执行以下命令,测试hget的性能。

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4 -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --command='hget __key__ field' --command-key-pattern=S --command-ratio=1 --show-config

hash类型读写1:1测试

执行以下命令,测试读写1:1的性能

./memtier_benchmark -s ${redis_ip} -a ${password} -p ${redis_port} -c 20 -t 4 -n 1500000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=1500000 --key-minimum=1 --command='hset __key__ field __data__' --command-key-pattern=S --command-ratio=1 --command='hget __key__ field' --command-key-pattern=S --command-ratio=1 --show-config

说明: ${password}为创建数据库时设置的密码,${redis_ip},${redis_port}表示数据库的连接地址和端口号,测试使用并发数80,data_size:1024。

测试结果

性能测试

image.png
通过分析上表的数据,通过GaussDB(for Redis)的测试结果和开源Redis集群测试结果的比值,得到下表的对比数据。
image.png

大数据量写测试

进行一组数据量超过内存的写测试,开源Redis集群在耗尽内存后会报错:server xxxxxxxxx:xxxx handle error response: -OOM command not allowed when used memory > 'maxmemory’
相比之下,GaussDB(for Redis)没有任何的影响,业务正常进行,以下为GaussDB(for Redis)在数据量超过内存时的性能结果:
image.png

数据压缩测试

GaussDB(for Redis)提供数据压缩服务,数据存储成本更低。预置一定数据量,查看GaussDB(for Redis)和原生Redis集群实际占用的存储空间。以下为预置的数据量和实际占用的存储空间:
image.png

结果分析

上述测试表明了GaussDB(for Redis)的各方面优势如下:

  1. 性能优势
    分析性能测试结果,在相同测试条件下,GaussDB(for Redis)的QPS较开源Redis集群提高了11%~19%,平均延迟和P99比Redis集群降低了70%以上,p9999比Redis集群降低了15%以上

  2. 抗写优势
    在数据量大于内存的写测试中,原生Redis集群因内存限制而OOM,GaussDB(for Redis)依然可以提供不俗的性能服务。实际上,GaussDB(for Redis)可用的存储空间是底层SSD大小决定的,相比原生Redis集群抗写优势显著。

  3. 数据存储成本更低
    GaussDB(for Redis)提供了高效的数据压缩服务,数据压缩测试结果显示,GaussDB(for Redis)占用的存储空间只有开源Redis集群的十分之一,相当于数据存储成本降低了10倍

(完)