针对读多写少的业务场景,云数据库Redis推出了读写分离版的产品形态,提供高可用、高性能、灵活的读写分离服务,满足热点数据集中及高并发读取的业务需求,最大化地节约运维成本。
组件介绍
读写分离版主要由主备节点、只读节点、Proxy(代理)节点和高可用系统组成。
说明 云数据库Redis版读写分离实例可细分为非集群读写分离和集群读写分离,下图为非集群读写分离的架构图,集群读写分离即在此基础上包含多个数据分片。
组件 | 说明 |
---|---|
主节点 | 承担写请求的处理,同时和只读节点共同承担读请求的处理。 |
备节点 | 作为数据备份使用,不对外提供服务。 |
只读节点 | 承担读请求的处理。只读节点采取链式复制架构,扩展只读节点个数可使整体实例性能呈线性增长。同时,采用优化后的binlog执行数据同步,可最大程度地规避全量同步。 |
Proxy(代理)节点 | 客户端和Proxy节点建立连接后,Proxy节点会自动识别客户端发起的请求类型,按照权重负载均衡(暂不支持自定义权重),将请求转发到不同的数据节点中。例如将写请求转发给主节点,将读请求转发给主节点或只读节点。
说明
|
高可用系统 | 自动监控各节点的健康状态,异常时发起主备切换或重搭只读节点,并更新相应的路由及权重信息。 |
特点
- 高可用
- 通过自研的高可用系统自动监控所有数据节点的健康状态,为整个实例的可用性保驾护航。主节点不可用时自动选择新的主节点并重新搭建复制拓扑。某个只读节点异常时,高可用系统能够自动探知并重新启动新节点完成数据同步,下线异常节点。
- Proxy节点实时感知每个只读实例的服务状态。在某个只读实例异常期间,Proxy会自动降低该节点的服务权重,发现只读节点连续失败超过一定次数以后,会停止异常节点的服务权利,并具备继续监控后续重新启动节点服务的能力。
- 高性能
读写分离版采取链式复制架构,可以通过扩展只读实例个数使整体实例性能呈线性增长,同时基于源码层面对Redis复制流程的定制优化,可以最大程度地提升线性复制的系统稳定性,充分利用每一个只读节点的物理资源。
使用场景
- 读取请求QPS(Queries Per Second)压力较大
标准版Redis无法支撑较大的QPS,如果业务类型是读多写少类型,需要采用多个只读节点的部署方式来突破Redis单线程的性能瓶颈。Redis集群版提供1个、3个、5个只读节点的配置,相比标准版可以将QPS提升近5倍。说明 由于数据同步至只读节点存在一定延迟,且采用链式复制,只读节点数越多,靠近链路末端的只读节点数据延迟越大,因此选用此架构时,业务需要能接受一定程度的脏数据。如果对数据一致性要求较高,推荐选用 集群架构。
- 对Redis协议兼容性要求较高的业务
读写分离版完全兼容Redis协议命令,可将自建Redis数据库迁移至读写分离版,同时支持从Redis标准版(双副本)一键平滑升级至读写分离版。
说明 读写分离版存在一些命令限制,更多信息,请参见 读写分离实例的命令限制。
建议与使用须知
- 当一个只读节点发生故障时,请求会转发到其他节点;如果所有只读节点均不可用,请求会全部转发到主节点。只读节点异常可能导致主节点负载提高、响应时间变长,因此在读负载高的业务场景建议使用多个只读节点。
- 只读节点发生异常时,高可用系统会暂停异常节点的服务,重新挂载一个可用的只读节点。该过程涉及资源分配、实例创建数据同步以及服务加载,消耗的时间与业务负载及数据量有关。云数据库Redis版不承诺只读节点的恢复时间指标。
- 某些场景会触发只读节点的全量同步,例如在主节点触发高可用切换后。全量同步期间只读节点不提供服务并返回
-LOADING Redis is loading the dataset in memory\r\n
信息。 - 主节点依然遵从云数据库Redis版的服务等级协议。