发布于: Oct 10, 2022

1. 前言
从2020年10月开始,基于 Amazon Graviton2 的缓存实例逐步推出,客户可以在使用 Amazon ElastiCache for Redis 上使用这些实例。
Graviton2 处理器由 Amazon Web Services 使用 64 位 ARM Neoverse 内核定制,对第一代 Amazon Graviton 处理器进行了多种性能优化。这包括 7 倍的性能、4 倍的计算核心数量、每个内核 2 倍的私有内存、5 倍的内存速度和每个核心 2 倍的浮点性能。此外,Graviton2 处理器还具有全天候运行的全加密 DDR4 内存功能,且每核加密性能提高 50%。这些性能提升使得装备了Graviton2 的实例成为缓存工作负载的上佳之选。

本文将向您展示 Graviton2 R6g 缓存实例(测试实例类型 cache.r6g,后续简称 r6g 或 R6g)对R5缓存实例(cache.r5,后续简称 r5 或 R5)的性能增强以及迁移到Graviton2 R6g 缓存实例的方法流程。

通过测试我们可以清楚地看到,无论是何种工作负载和并发条件,R6g实例比之同等资源配置的 R5 实例性能均有显著的提升,而且每小时单价却有下降,在这双重因素的叠加之下,选择新一代的 r6g 实例,具有更好的性能和性价比。
 

2.1 环境信息

测试客户端(新加坡区域,AZ3

实例类型  vCPU  内存(GiB) 
m5.8xlarge  32  128

表格:测试客户端配置

测试服务端(新加坡区域,主用在 AZ3

Redis 版本  实例类型  vCPU 
6.0.5      r6g.2xlarge 
6.0.5      r5.2xlarge 

表格:测试服务端配置

ElastiCache for Redis 选择默认参数,开启了集群模式(Cluster),数据用3个分片(每个分片12从,合计9个节点,为了系统的高可用和管理需要,默认参数会设置25%的内存作为预留内存,所以读者在自己做性能测试时要留意别把内存耗光导致结果失真,这也是我们没有选择最低配置的实例做测试的原因之一)。

部署完毕后的集群地址:

类型 集群configuration endpoint入口地址
R5.2xlarge r5-2xlarge-elasticache-for-redis-cluster-endpoint:6379
R6g.2xlarge r6g-2xlarge-elasticache-for-redis-cluster-endpoint:6379

我们把测试客户端和集群的主节点人工强行放到了同一个AZ以获取更直接的对比效果,同时选用的 ElastiCache for Redis 集群实例(3*3的 2xlarge 构建的集群)和测试客户端(8xlarge 的 EC2)均支持 10G 的带宽模式,读者在自己做测试时也要避免因网络带宽不足导致的测试结果失真。

可能很多读者会问,为什么测试的时候只选择这一个机型?细心的读者可能会发现,亚马逊云的机型是有一定规律的,例如 4xlarge 的配置刚好是 2xlarge 的两倍,而 8xlarge 的又刚好是 4xlarge 的两倍(以此类推,具体机型定义请参看 这里),所以此处我们用 r5.2xlarge 和 r6g.2xlarge 做个具有代表性的对比测试,就不用其他机型一一对比了。

 

此处我们使用两个不同的压测工具做针对性测试,一个是 Redis 自带的简单易用的 redis-benchmark,一个是 Redis Labs 开源提供的在更高并发的场景使用的 memtier_benchmark

2.2.1 redis-benchmark

redis-benchmark 默认含在 redis 的分发里面,直接安装 redis 即可获得,在 Amazon Linux 2 操作系统上使用如下命令即可(这个安装在客户端上,后续迁移的时候也会用到这个客户端源)。

amazon-linux-extras install redis4.0 -y

 
其命令的常用参数选项如下:

 

选项 描述 默认值
-h 服务器地址 127.0.0.1
-p 服务器端口 6379
-s 服务器 Socker,会覆盖 -h 和 -p  
-a 连接密码  
-c 并发连接数 50
-n 总请求数 100000
-d GET/SET 字节数大小(Byte) 3
-k 是否保持连接(1保持,0重连) 1
-r Key 和 value 使用随机值  
-P 是否使用管道(默认1等于没有使用) 1
-e 显示服务端错误  
-q 静默模式,只显示结果  
–csv 按 csv 格式输出  
-l 循环测试,永不退出  
-t 仅运行以逗号分隔的测试命令列表  
-I 空闲模式,建立连接后啥都不干  

表格:redis-benchmark 的常用参数

2.2.2 memtier_benchmark

memtier_benchmark 需要使用 github 上的源码进行编译才能使用,在 Amazon Linux 2 操作系统上可以使用如下方式:

yum install gcc git autoconf automake gcc-c++openssl-devel libevent-devel -y

 

mkdir /opt/memtier_benchmark

cd /opt/memtier_benchmark

 

git clone https://github.com/RedisLabs/memtier_benchmark.git

 

cd memtier_benchmark

autoreconf -ivf

 

./configure

make && make install

其命令的常用参数选项如下:

选项 描述 默认值
-s 服务器地址 localhost
-p 服务器端口 6379
-S 服务器Socker  
-P 连接协议 redis
-a 连接方式和密码  
-x 总迭代次数  
-n 总请求数 10000
-d 测试使用的对象数据大小 32
-R 随机化的测试数据  
-c 每个线程的测试客户端数 50
–treads 并发线程  
–ratio 读写比例(SET/GET)  
–test-time 测试时长(秒)  
–select-db 选择测试使用DB  
–data-size-range 数据大小随机(min-max)  
–data-size-pattern S均匀分布,R随机分布  
–key-minimum 测试键最小id 0
–key-maximum 测试键最大id 10000000
–key-pattern SET和GET的分布,G正态分布(高斯分布),R均匀随机,S连续访问,P并行 R:R
–key-stddev 正态分布标准差 1/6
–key-median=300 正态分布均值  
-D 调试模式  
-o 结果输出

表格:memtier_benchmark 的常用参数

相关文章