Redis全球分布式缓存(又称全球多活)是基于云数据库Redis自研的多活数据库系统,可轻松支持异地多个站点同时对外提供服务的业务场景,助力企业快速复制阿里巴巴异地多活架构。

背景信息

随着业务的快速发展,在业务分布较广时,如果还采用跨地域远距离访问的架构,将导致访问的延迟大,影响用户体验。借助阿里云的Redis全球分布式缓存功能,可帮助您解决业务因跨地域访问导致延迟大的问题,分布式缓存功能具有如下优势:

  • 可直接创建或指定需要同步的子实例,无需通过业务自身的冗余设计来实现,极大降低业务设计的复杂度,让您专注于上层业务的开发。
  • 可提供跨域复制(Geo-replication)能力,快速实现数据异地灾备和多活。

该功能可应用于跨地域数据同步场景及多媒体、游戏、电商等行业的全球化业务部署等场景。

应用场景

应用场景 说明
异地多活 异地多活是指分布在异地的多个站点同时对外提供服务的业务场景,是高可用架构设计的一种,所有站点可同时对外提供服务,可实现应用就近访问等场景。
数据灾备 借助子实例间数据双向同步的特性,可实现同城灾备、两地三中心灾备及三地灾备等多种数据灾备场景。
负载分摊 在某些场景下(例如大型促销),预测可能会有超大QPS请求和访问流量,可其分摊至多个子实例,突破单个实例的负载限制。
数据同步 实现同一个分布式实例下的子实例双向数据同步,可应用于数据分析或测试等场景。

费用说明

创建分布式实例不产生费用,仅会对分布式实例中的子实例收费(与普通Redis实例收费标准一致),详情请参见收费项与价格

支持的产品系列

企业版性能增强型

Redis全球分布式缓存架构

全球多活架构

Redis全球分布式缓存是所有分布式子实例(简称子实例)及链路的逻辑集合,所有子实例通过同步通道保持实时数据同步,各组件介绍如下:

子实例
构成分布式实例的子实例,即独立的云数据库 Redis实例,是构成多活实例的基本服务单元。所有子实例均可读写,并且相互之间保持实时双向数据同步。分布式实例可提供跨域复制(Geo-replication)能力,您可以在不同的地域创建子实例,实现跨地域容灾和多活的需求。
说明 子实例需为企业版(性能增强型)。
同步通道
负责分布式子实例之间实时数据同步的链路,为单向链路,子实例的双向复制由两个对向的同步通道构成。
说明 Redis全球分布式缓存在原生Redis AOF日志的基础上增加了server-id、opid等信息,同步通道通过获取Binlog实现数据同步。
通道管理器
管理同步通道生命周期,负责子实例上的主备切换、备份重搭等异常事件的处理。

产品优势

优势 说明
同步可靠性高
  • 支持断点续传,可容忍天级别的同步中断,避免了原生Redis架构在跨机房或地域进行增量同步的局限性。
  • 自动完成分布式子实例的主备切换、备份重搭等异常事件的处理。
同步性能高
  • 高吞吐
    • 标准架构下,同步通道单向可达5万TPS。
    • 集群或读写分离架构下,可随Redis数据分片或节点的数量线性扩展。
  • 低延迟
    • 同一洲内的地域间同步,约百毫秒至秒级,平均时延约1.2秒。
    • 跨洲地域间同步,约1~5秒,由链路吞吐和链路的往返时延RTT(Round-trip time)决定。
同步正确性高
  • Binlog按产生的顺序同步到对端。
  • 支持回环控制,避免Binlog循环同步。
  • 支持抗重放(exactly once),确保被同步的Binlog仅会被执行1次。

全球分布式缓存与DTS双向同步对比

下图以单个方向的数据同步为例,对比架构的区别和时延产生的位置:

图 1. 单个同步方向的架构对比
单个方向架构与时延对比

全球分布式缓存整体表现优于DTS双向同步方案,详细对比如下表所示。

对比项 全球分布式缓存 DTS双向同步方案
费用 创建分布式实例不产生费用,仅会对分布式实例中的子实例收费(与普通Redis实例收费标准一致),详情请参见收费项与价格 您需要为数据同步链路付费。更多信息,请参见DTS产品定价
时延 延迟稳定,波动较小。

上图中T2阶段的Replicator具备独立资源,源端的写入量较大的情况下,也能快速获取到待同步的数据(T1+T2的时延基本稳定在400毫秒)。

延迟受写入量影响波动较大。

上图T1阶段拉取Binlog容易产生堆积,且T2阶段无SLA保障,如果源端的写入量较大,T1的时延将从10毫秒增至400毫秒~数秒,从而影响拉取效率并影响整个链路。

同步目标数 最多可支持三个实例间的相互数据同步。 可支持更多的实例间数据同步(一对多数据同步),因为拉取到的Binlog可被多个目标实例同时消费。
适用场景 适合写入量大,对平均时延要求高的客户,例如跨地域多活或单元化业务。
说明 由于跨地域同步会受运营商网络时延的影响,对于即时性业务建议在业务层设置为多端写入。
适合写入量不大,就近读取型业务,例如缓存更新。