异地多活设计4大技巧

极客时间:《从 0 开始学架构》:异地多活设计4大技巧

技巧 1:保证核心业务的异地多活

“异地多活”是为了保证业务的高可用,优先实现核心业务的异地多活架构

技巧 2:保证核心数据最终一致性

异地多活本质上是通过异地的数据冗余,来保证在极端异常的情况下业务也能够正常提供给用户,因此数据同步是异地多活架构设计的核心。
数据冗余是要将数据从 A 地同步到 B 地,从业务的角度来看是越快越好,最好和本地机房一样的速度最好。因此一个矛盾的地方:业务上要求数据快速同步,但物理很难做到数据的快速同步。有以下几种方法可参考:

  • 尽量减少异地多活机房的距离,搭建高速网络
  • 尽量减少数据同步,只同步核心业务相关的数据
  • 保证最终一致性,不保证实时一致性
    最终一致性指的是BASE理论中,业务不依赖数据同步的实时性,只要数据最终能一致即可。

技巧 3:采用多种手段同步数据

数据同步是异地多活架构设计的核心。采用如下几种方式同步数据:

  • 消息队列方式
    将数据通过消息队列同步到其他业务中心
  • 二次读取方式
    某些情况下可能出现消息队列同步也延迟了,用户在 A 中心注册,然后访问 B 中心的业务,此时 B 中心本地拿不到用户的账号数据。为了解决这个问题,B 中心在读取本地数据失败时,可以根据路由规则,再去 A 中心访问一次(这就是所谓的二次读取,第一次读取本地,本地失败后第二次读取对端),这样就能够解决异常情况下同步延迟的问题。
  • 存储系统同步方式
    通过数据库的同步机制将数据复制到其他业务中心
  • 回源读取方式
    对于登录的 session 数据,由于数据量很大,我们可以不同步数据;但当用户在 A 中心登录后,然后又在 B 中心登录,B 中心拿到用户上传的 session id 后,根据路由判断 session 属于 A 中心,直接去 A 中心请求 session 数据即可;反之亦然,A 中心也可以到 B 中心去获取 session 数据。
  • 重新生成数据方式

技巧 4:只保证绝大部分用户的异地多活

异地多活也无法保证 100% 的业务可用,这是由物理规律决定的,光速和网络的传播速度、硬盘的读写速度、极端异常情况的不可控等,都是无法 100% 解决的。
虽然我们无法做到 100% 可用性,但并不意味着我们什么都不能做,为了让用户心里更好受一些,我们可以采取一些措施进行安抚或者补偿,例如:

  • 挂公告
    说明现在有问题和基本的问题原因,如果不明确原因或者不方便说出原因,可以发布“技术哥哥正在紧急处理”这类比较轻松和有趣的公告。
  • 事后对用户进行补偿
  • 补充体验

核心思想

异地多活设计的理念可以总结为一句话:采用多种手段,保证绝大部分用户的核心业务异地多活!

posted @ 2022-01-16 17:49  牛犁heart  阅读(180)  评论(0编辑  收藏  举报