一、前言
在使用阿里云数据库RDS(Relational Database Service)(简称RDS)前,请先评估RDS实例所需要配置的规格,评估参考标准有:CPU、内存、连接数、IOPS、存储空间等资源指标。本文根据实际测试结果和结合用户场景模拟,提供了相对通用的评估方法,您可以参考本文的内容,对RDS实例规格的选择进行相对准确的规划评估,并以此为依据来组建您的业务系统。
二、注意事项
- 由于不同用户在数据结构、查询复杂度、数据量大小、性能以及数据变化等方面的需求是不同的,所以本文的评估不一定适用于所有的用户,建议您在条件允许的情况下,通过实际的数据和使用场景按照测试出适合自己的RDS实例规格容量规划。
- Redis 可能因为存在大key 进而影响实例流量、QPS等性能指标,因此Redis 大key
场景不在本文讨论范围内,同时建议业务上尽量避免存在大key。 - Redis 不同产品实例类型单节点目前的理论压测QPS上限存在一定差异,因此在做Redis
应用水位容量需要考虑到所选用的Redis产品实例类型。 - 云Redis集群版会存在部分命令受限的情况,因此在使用云Redis集群版前,请确认业务中是否有使用集群受限命令,具体请参考《集群实例的命令限制》
三、Redis 产品系列类型选择
- 目前云数据库Redis版单副本实例已下线,单副本实例在HA场景下会丢失数据,不承诺数据可靠性保障,因此建议生产业务环境使用双副本实例类型,在性能指标上单副本与双副本并无差异,因此本文主要以Redis双副本实例为例,如您明确了解单副本实例特性,需要在不要求数据持久化的场景中使用,可以提交工单开通。
- 区分使用Redis标准版、Redis集群版、Redis 读写分离版本很重要两个参考指标为Key 数量 以及读写QPS量,当Key数量过多,主从版实例已无法满足存储需要key需要,建议使用Redis集群版,当读QPS请求压力比较大时,建议选择Redis读写分离版本,当读QPS压力的只读节点不够满足于现有业务压力或业务权重占比以写为主时,建议使用Redis集群版。
- 在读QPS请求压力较大场景,虽然使用Redis集群版一样可以通过扩展节点提升读QPS能力,当时由于集群版Redis会在部分命令受限的情况,可能会导致业务存在一定不兼容的情况,建议您结合实际业务请求进行综合分析,判断需要使用Redis实例产品系列类型。
四、Redis 实例规格选择
- 企业版Redis实例由于采用了多线程模型,性能约为同规格社区版实例的3倍,在高QPS场景下,性价比优于社区版实例。
- 混合存储实例采用内存加磁盘的存储模式,能够在业务高峰期后对冷热数据进行弹性分离,既保障了热数据的内存访问速度,又提供了远超社区Redis的存储容量,实现了性能与成本的平衡。
- 在存在多个热点Key的场景下,如果最大节点的读写分离版本依然无法满足读QPS要求,可以考虑使用Redis集群版甚至Redis读写分离集群版本并通过对热点key进行命名调整,将热点key分布在不同分片上以达到分散热点key访问进而提高整个读QPS请求处理能力。
五、Redis 产品规格容量评估
在使用阿里云Redis产品前,建议提前进行Redis规格选择与容量规划,通常需要考虑的维度有QPS、带宽、内存、连接数等,低于实际需求的Redis规格可能会出现请求RT波动导致业务请求超时,高于实际需求的Redis规格会存在资源浪费与成本问题,如何结合业务需求选择评估最合适的实例规格尤为重要,本文根据实际测试结果和用户使用场景模拟,提供了相对通用的评估方法。您可以参考本文中的内容,对Redis的规格容量进行初始规划。Redis容量前期规划主要分为内存容量评估规划、QPS容量评估规划、连接数容量评估规划。
5.1 内存资源容量规划:
由于云Redis对内存、连接数、流量等资源与规格进行强绑定,因此一旦某一类资源例如内存,在用量确认的情况下所需的Redis规格一般也会相应确认下来。
注:Redis不同数据类型在不同数据量情况下可能使用不同的数据结构进行存储,因此准确的评估方式会比较复杂, 本文进行了一定的抽象,假设在key 数不同的情况下,单个key 的平均大小恒定,因此本文会考虑到一定冗余空间, 依据适用于大部分业务场景。
假设:
业务预估每秒处理的读请求峰值为Q
业务预估每秒处理的写请求峰值为W
业务预估总保有key 的数量为N
业务预估key平均大小为X (单位:KB)
业务预估最大并发连接数为Z
业务预估总连接数为Y
预估Redis规格的内存大小(单位GB) = W * N / 0.8 (内存 容量水位,考虑到Rehash、部分大key等场景建议此值为0.8) / 1024 / 102