简介
Redis(Remote Dictionary Server)是一种开源的内存型数据存储,通常被用作数据库缓存系统。 它广泛用于医疗卫生系统、物联网和金融服务等实时应用行业。 Redis具有高度可扩展性,可用于实时分析、缓存、发布/订阅应用程序和会话管理。
Redis是一种Key-Value的No SQL数据库,性能是Mysql的10-100倍;支持多种数据类型(String、Hash、List、set、zset...),支持通过CLI、API、GUI等方式读写。与SQL数据存储在磁盘不同,Redis数据在内存中。倚天ECS采用DDR5内存,可获得比DDR4高50%带宽,实现更高性能的读写性能。同时在超高并发下,物理核+大Cache设计比传统的Hyper thread的共享ALU和cache,可获得更好的性能。
生产环境中,一般采用R系列(内存:CPU=8),在本文中,我们在阿里云 ECS G8y 实例(基于 Armv9 的倚天 710 处理器)和G7 实例(x86)上做了Redis的吞吐量测试对比,以展示倚天 710 的性能优势。
架构和环境
我们使用 memtier_benchmark作为负载生成器和性能基准测试工具。 它是 Redis Labs 为 Redis 构建的开源高吞吐量基准测试工具。 memtier_benchmark 部署在单独的 ECS 实例上。
对于Redis服务器,我们在4xlarge实例部署了16个Redis进程,并组成Redis集群模式,测试拓扑如下。16个Redis进程通过绑核方式使其调度多个CPU上,充分发挥每个Core能力,部署架构如下
图1. Redis部署架构-基准测试拓扑
两种被测ECS实例类型配置如下。基准测试客户端使用了一个单独的G8y.16xlarge实例。
Processor |
ECS type |
Yitian 710 |
G8y.4xlarge |
x86 CPU |
G7.4xlarge |
表1.1 测试ECS实例规格
Redis软件版本和测试参数。
Component name |
Version |
Redis |
5.0.12 |
GCC version |
10.2.1 20200825 (Alibaba 10.2.1-3 2.32) |
Memtier benchmarking tool |
1.3.0 |
Operating System |
Alibaba Cloud Linux 3.2104 LTS |
表1.2 Redis软件版本
Test config parameter |
Value |
Number of Memtier clients |
2 |
Number of threads |
32 |
Number of consecutive tests runs |
3 |
Data size |
random |
Data size pattern |
S |
Protocol |
Redis |
Key pattern |
G:G |
Reading and writing ratio |
1:1 |
Test time |
60 |
Cluster-mode |
Yes |
Pipeline |
1 |
表1.3 Redis测试参数
性能优化和测试结果
测试脚本
memtier_benchmark -s $redis_server_ip -p 7001 --random-data
--data-size-pattern=S --key-minimum=200 --key-maximum=100000
--key-pattern=G:G --cluster-mode --clients=2 --threads=32
--ratio=1:1 --test-time=60
Redis-server运行在4xlarge实例上,16个进程组成一个集群,redis proxy 端口为7001,压测端使用16xlarge实例进行压测,memtier_benchmark创建2clients 32threads对redis 集群发送请求,相当于64个并发请求,每条请求会通过7001端口所在redis进程均衡到集群上。
通过在倚天上启用Booster加速,包括XPS (Transmit Packet Steering)以及中断调优手段, Yitian 710 与同规格的 x86 的 ECS 实例相比,Redis 数据库的吞吐量性能优势高达 35% 。下表中显示的结果是 5 次连续测试运行的汇总结果。
Redis性能优化方案通过ECS Booster一键开启。在实例创建阶段,选择倚天实例G8y,选择Alinux操作系统,勾选加速选项“redis加速”即可。
图2. ECS Booster一键加速功能开启
采用Booster加速,可以大幅度提升性能Redis 在 G8y 和 G7 实例上的性能数据如下:
调优措施 |
G7.4xlarge (Requests/sec) |
G8y.4xlarge (Requests/sec) |
Perf benifit gain (%) |
基础 |
2252137 |
2307270 |
2% |
Booster开启redis加速 |
2252137 (无加速开关) |
3046344 |
35% |
表2. (G8y vs. G7) Redis 吞吐量性能数据
优化前后的性能测试表格如下:
图3. (G8y vs. G7) Redis吞吐量性能优势
平台选择决策
为了帮助用户决策,我们还测试了Redis6在最新主流场景的性能,在多款ECS产品中对比性能见图(8vcpu,其他参数与前文相同)
图4. Redis ECS多代实例性能横向对比
另外,第八代ECS支持eRDMA,有效减少内存拷贝,降低网络时延,提升吞吐量,能帮助Redis大幅度提升处理性能;下图为阿里某客户业务性能。
图5,R8y.xlarge,4c32g规格下Redis qps性能数据
- 注意事项:
- Redis:4、5、6、7版本在倚天上均可直接运行,优化后性能都具备性能优势。(其他OS请联系服务支持优化)
- Booster加速:默认对Alinux3环境加速,默认安装redis6(可自行更换版本)
- 实例推荐:鉴于Redis消耗内存容量大,建议使用R系列内存型实例;
- 不适用场景:vcpu资源部分闲置场景。比如x86场景下,2HT只使用1个进程,导致1HT闲置,如更换为ARM服务器性能不具备优势(只发挥50%物理核能力)
总结
Redis是数据库加速方案最流行开源软件。适合电商、网站、博客等应对突发、大流量访问,需要数千台的部署。与同规格的基于 x86 的 ECS 实例相比,Redis部署在基于 Yitian 710 的 ECS 上可获得超过30%吞吐量性能优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
好啦!小弹的分享到此为止。我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8
【扫码填写上方调研问卷】
欢迎每位来到弹性计算的开发者们来反馈问题哦~