说明
本文为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)集群部署
开源Redis集群部署
测试工具
测试工具 | 版本 | 下载地址 |
---|---|---|
memtier_benchmark | 1.3.0 | https://github.com/RedisLabs/memtier_benchmark |
测试流程
测试环境准备
- 登录华为云:www.huaweicloud.com。
- 创建GaussDB(for Redis)集群
购买GaussDB(for Redis)实例参考https://support.huaweicloud.com/qs-nosql/nosql_02_0071.html
- 创建开源Redis集群
- 购买测试客户端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。
测试结果
性能测试
通过分析上表的数据,通过GaussDB(for Redis)的测试结果和开源Redis集群测试结果的比值,得到下表的对比数据。
大数据量写测试
进行一组数据量超过内存的写测试,开源Redis集群在耗尽内存后会报错:server xxxxxxxxx:xxxx handle error response: -OOM command not allowed when used memory > 'maxmemory’
相比之下,GaussDB(for Redis)没有任何的影响,业务正常进行,以下为GaussDB(for Redis)在数据量超过内存时的性能结果:
数据压缩测试
GaussDB(for Redis)提供数据压缩服务,数据存储成本更低。预置一定数据量,查看GaussDB(for Redis)和原生Redis集群实际占用的存储空间。以下为预置的数据量和实际占用的存储空间:
结果分析
上述测试表明了GaussDB(for Redis)的各方面优势如下:
-
性能优势
分析性能测试结果,在相同测试条件下,GaussDB(for Redis)的QPS较开源Redis集群提高了11%~19%,平均延迟和P99比Redis集群降低了70%以上,p9999比Redis集群降低了15%以上。 -
抗写优势
在数据量大于内存的写测试中,原生Redis集群因内存限制而OOM,GaussDB(for Redis)依然可以提供不俗的性能服务。实际上,GaussDB(for Redis)可用的存储空间是底层SSD大小决定的,相比原生Redis集群抗写优势显著。 -
数据存储成本更低
GaussDB(for Redis)提供了高效的数据压缩服务,数据压缩测试结果显示,GaussDB(for Redis)占用的存储空间只有开源Redis集群的十分之一,相当于数据存储成本降低了10倍。