Redis架构与介质选择指引 ——民科

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 内容简要:一、Redis集群架构二、Redis存储介质三、从社区到企业版

内容简要:

一、Redis集群架构

二、Redis存储介质

三、从社区到企业版

 

 

一、Redis集群架构

image.png

如上图所示,Redis集群架构分为两大类:标准版与集群版。

标准版是最原始的Redis单进程模式,标准版细分为双副本、单副本、读写分离三个类别。

集群版分为代理模式与直连模式。业务从标准版迁移到集群版时的可能存在Redis命令不兼容,代理模式可以通过Proxy帮业务解决这方面问题。直连模式中,Redis Client通过Redis Cluster模式直连Redis DB节点,做到减少网络时延,提升一定的性能。这两种连接模式下分别支持了双副本跟单副本两种数据形态。

 

(一)标准版

image.png

如上图所示,标准版的拓扑结构是业务在ECS直接通过SLB连接到后端的Redis节点。这里Redis节点会有两种情况,第一种情况是左图的一组一备,进程B是一个热备,主备之间数据直接进行同步。第二种情况是右图的冷备,只有在主节点挂掉以后,冷备会被拉起,这个时候数据是空的。

●      使用场景:

1.    Redis协议兼容性要求较的业务;

2.    单个Redis性能压可控的场景;

3.  Redis命令相对简单,排序和计算之类的命令较少的场景。

 

标准版细分为:双副本、单副本和读写分离三种形态,下面逐一介绍。

 

1.标准版- 双副本

image.png

标准版-双副本模式采用主从(Master-Replica)模式搭建。主节点提供日常服务访问,备节点提供HA高可用,当主节点发生故障,系统会自动在30秒内切换至备节点,保证业务平稳运行。

 

●      特点:

1.    可靠性:采用双机主从(Master-Replica)架构,主从节点位于不同物理机。主节点对外提供访问,用户可通过Redis命令行和通用客户端进行数据的增删改查操作。当主节点出现故障,自研的HA系统会自动进行主从切换,保证业务平稳运行。

2.    数据可靠:默认开启数据持久化功能,数据全部落盘。支持数据备份功能,用户可以针对备份集回滚实例或者克隆实例,有效地解决数据误操作等问题。同时,在支持容灾的可用区(例如杭州可用区H+I)创建的实例,还具备同城容灾的能力。

两个副本之间的数据实时异步同步,切换主备时可能存在延迟情况。当主节点宕机的时候,可能存在一部分数据没有同步到B进程(即备节点)上,此时如果进行主备切换,B进程相对于A进程有同步延迟,可能存在部分数据丢失。

此外,在双副本中可以做数据的克隆,即备份机,备份到另一个地方做数据持久化。当业务需要做数据回滚时,可以从备份机上进行恢复。

 

2.标准版单副本

image.png

标准版-单副本采用单个数据库节点部署架构,没有可实时同步数据的备用节点,不提供数据持久化和备份策略,使用于数据可靠性要求不高的纯缓存业务场景使用。

 

●      特点:

1.    纯缓存类业务使用,单副本只有一个在线数据节点,性价比高;

2.    阿里云自研HA高可用系统,异常30秒自动切换。

单副本在使用时需要注意,当高可用节点A宕机后,需要先B节点进行缓存的预热,避免切换后发现B节点无数据可用。

 

3.读写分离

image.png

针对读多写少的业务场景,云数据库Redis推出了读写分离版的产品形态,提供高可用、高性能、灵活的读写分离服务,满足热点数据集中及高并发读取的业务需求,最大化地节约运维成本。

ECS实例通过Proxy节点,可以将读写请求分发到主节点数据分片,并将部分读请求分发到其他只读节点。

 

●      使用场景:

1.    读取请求QPS压力较大:适合读多写少型业务;

2.    Redis协议兼容要求较高的业务。

 

●      建议与使用须知:

1.    非特殊需求不建议使用,QPS压力大的业务建议使用集群版;

2.    当一个只读节点发生故障时,请求会转发到其他节点;如果所有只读节点均不可用,请求会全部转发到主节点,导致主节点压力过大;

3.    只读节点发生异常时,高可用系统会暂停异常节点服务进行重搭恢复,但不承诺只读节点的恢复时间指标;

4.    只读节点数据旧于主节点且落后时间可能很长。

 

(二)集群版

image.png

●      使用场景:

1.    数据量较大的场景;

2.  QPS压力较大的场景;

3.    吞吐密集型(网络带宽较大)应用场景。

 

1.集群版双副本

image.png

云数据库Redis版提供双副本集群版实例,可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。集群版支持代理和直连两种连接模式。

 

●      使用场景:

1.    数据量大:相比Redis标准版,集群版可以有效地扩展存储量,最大可达4098 GB,能有效的满足业务扩展的需求;

2.  QPS压力较大:标准版Redis无法支撑较大的QPS,需要采用多分片的部署方式来突破Redis单线程的性能瓶颈;

3.    吞吐密集型应用:相比Redis标准版,集群版的内网吞吐限制相对较低,可以更好地支持热点数据读取、大吞吐类业务;

4.    Redis协议兼容性不敏感的应用:集群版对Redis协议支持上相比标准版本有一定的限制。

image.png

●      特点:

代理模式因所有请求都需要通过代理服务器转发,代理模式在降低业务开发难度的同时也会小幅度影响Redis服务的响应速度,如果业务响应速度的要求非常高,可以选择直连模式,绕过代理服务器直连后端数据分片,从而降低网络开销和服务响应时间,直连模式适用于对响应要求较高的业务。

 

2.集群版命令限制

●      不支持命令

1.  SWAPDB

2.  CLIENT ID

3.  SORT (BYGET)

 

●      受限命令

在集群模式下如果需要执行受限制的命令,需要使用HashTag确保所要操作的Key在同个Hash Slot中,Hash Tag的详细用法参见Redis官方文档。

image.png

可以看到,许多受限命令为多Key命令,为什么多Key命令会受到限制?

因为集群版会根据数据的Key做一次性Hash,分散到不同的数据节点上,这些涉及到多Key命令,key经过Hash如果分布在不同的节点上,命令就不能在一个单数据节点里面完成,这些命令会直接返回错误。

如果要使用这些多Key命令,需要每一个Key准确Hash到同一个Slot上。RedisKey可以添加一个Hash Tag,相同的Tag会被Hash到同一个Slot上,在同一个Slot中,这些受限的命令就可以支持。

 

●      Lua脚本使用限制:

1.    所有Key都应该由KEYS数组来传递;

2.    所有Key必须在同一个Slot上;

3.    调用必须要带有Key

4.    不支持发布订阅消息;

5.    不支持UNPACK函数;

6.    其他详细限制参见Redis官方文档。

 

3.集群模式如何选型

●      选型时应注意以下两点:

1.    评估QPS和容量时定要为未来留有余量;

2.    不同架构间存在一定的兼容性问题,业务允许的情况下尽量使用不同架构命令支持集合的交集,以便后续架构切换。

image.png

如上图所示,简言之,如果业务qps低且容量低(小于32GB)选择标准版,否则选择集群版。

image.png

在选择标准版的情况下,根据数据可靠性与读写情况可再进行细分。

如果业务数据单纯作为缓存加速或数据可丢,可以选择单副本,减少一半的成本。如果要求数据在异常情况下不能全部丢失,对可靠性要求较高的情况下,此时要根据读写情况进行选择。

如果读写情况没有明显差异,可以选择双副本,如果读请求数量远大于写请求,可以选择读写分离。但是除去特殊情况,读写分离有诸多限制,大多数情况下不是一个很好的选择,我们还是建议考虑集群的模式。

image.png

如果用户原本使用标准版,随着业务的发展QPS容量上升,需要由标准版切换成集群版,根据命令兼容性可选择不同模式。

如果用户业务代码有太多需要修改,或者不想修改代码,对命令兼容性要求较高,可以选择代理模式,兼容性问题由阿里云提供的Proxy解决。如果业务对兼容性要求较低,或者新业务在开发时本就是按照集群版标准进行,则可选择直连模式。

模式选择完之后,可根据业务对数据可靠性的要求,进一步选择单副本或双副本。此处的单双副本使用注意事项,与标准版类似。

 二、Redis存储介质

image.png

购买Redis时还需选择存储介质,目前阿里云提供四种存储介质,分别为内存型、持久内存型、容量存储型和混合存储型。

内存型为我们常见的纯内存,混合存储型正逐步被持久内存型与容量存储型替代,下面重点介绍持久内存型与容量存储型。

 

(一)持久内存型

image.png

Redis企业版持久内存型(简称持久内存型)基于Intel 傲腾数据中心级持久内存(AEP),为用户提供大容量、兼容Redis的内存数据库产品。单实例成本对比Redis社区版最高可降低30%,且数据持久化不依赖传统磁盘,保证每个操作持久化的同时提供近乎Redis社区版的吞吐和延时,极大提升业务数据可靠性。

 

●      特点:

1.    超高性价比:相同容量下对比阿里云Redis社区版本,价格降低30%左右;

2.    大规格优化:解决AOF的造成的性能开销,无需在性能和持久化之间取舍;

3.    掉电数据不丢失:每个写操作都同步持久化;

4.    高兼容性:兼容现有阿里云Redis数据库体系。

 

(二)容量存储型

Redis企业版容量存储型(简称容量存储型)基于云盘ESSD研发,兼容Redis核心数据结构与接口,可提供大容量、低成本、强持久化的数据库服务。容量存储型在降低成本和提升数据可靠性的同时,也解决了原生Redis固有的Fork命令而预留部分内存的问题。适用于兼容Redis、需要大容量且较高访问性能的温冷数据存储场景。

 

●      特点:

1.    兼容性:兼容大部分原生Redis命令;

2.    成本:最低为Redis社区版的15%

 

 

三、从社区到企业版

(一)阿里云集群能力

image.png

阿里云Redis与开源版Redis集群能力对比

 

(二)开源Redis集群实现

image.png

●      实现细节:

1.    通过Gossip使所有Redis节点彼此相互心跳探活,使用内部的二进制协议优化传输速度和带宽;

2.    节点Fail时通过集群中超过半数节点探活协商确定失败,如果集群较大则会拉长协商时间;

3.    节点间数据迁移是按照Key的粒度进行的,迁移过程中一个Slot的数据会分布在两个节点上。

 

●      优点:

使用Gossip协议无中心控制,无额外控制节点。

 

●      缺点:

1.    无中心控制,集群状态更新慢,故障HA慢;

2.    探活方式单一,受慢查询干扰,容易误切换;

3.    Key迁移,大Key迁移造成服务卡顿;

4.    迁移异常中断,无法自动恢复;

5.    迁移期间多Key命令失败;

6.    迁移依赖外部组件。

 

(三)阿里云Redis集群实现

image.png

●      实现细节:

1.    中心控制节点采用自研的多因子进行准确的探活;

2.    数据迁移采用Slot粒度Precopy的方式,迁移快速,异常可回滚。

●      优点:

1.    准确快速的探活,保障服务质量(SLA<15s)

2.    同时支持直连模式和代理模式;

3.    扩缩容业务无感知(大Key,多keyLua),不断连接;

4.    迁移流量在节点间直接传输,不需要外部组件中转。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
NoSQL 关系型数据库 MySQL
Redis高可用之主从复制架构(第一部分)
Redis高可用之主从复制架构(第一部分)
|
3月前
|
机器学习/深度学习 NoSQL Redis
Redis高可用之集群架构(第三部分)
Redis高可用之集群架构(第三部分)
|
6月前
|
缓存 运维 NoSQL
GitHub开源大厂缓存架构Redis优化的文档被警告,900页全是干货
掌握Redis对Java程序员来说很有必要了。实际上,很少有人真的掌握了Redis的全部技巧,有些甚至连面试题都很难应付。那么,如何全面系统地学习Redis呢?
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
3月前
|
存储 负载均衡 NoSQL
Redis 高可用篇:你管这叫主从架构数据同步原理?
Redis 高可用篇:你管这叫主从架构数据同步原理?
241 5
|
4月前
|
NoSQL Java 应用服务中间件
跟着腾讯T4学架构:微服务+MySQL+Nginx+Redis+容器化+虚拟机
深入理解Java虚拟机》 但要想真的深入理解虚拟机一问肯定远远不够的,但是本文中分三部分对JVM有深入的解析。
|
5月前
|
NoSQL 算法 Unix
解决主从架构的redis分布式锁主节点宕机锁丢失的问题
解决主从架构的redis分布式锁主节点宕机锁丢失的问题
|
14天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
56 0
|
22天前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
45 2
|
28天前
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
44 0

相关产品

  • 云数据库 Redis 版