【NOTE】高可用架构-异地多活设计技巧

# 什么是异地多活?

“异地”指的是不同的地理位置;“多活”指的是不同地理位置上的系统都能对外提供服务。

根据地理距离来划分,分为同城异区、跨城异地、跨国异地。硬件成本高,设计难度大,如果业务中断对用户影响不大,尽量避免异地多活。

异地会导致数据不一致,因为网络传输有延迟。所以对于强一致性要求的数据,例如银行存款、支付宝余额,一般只做同城异区架构。

# 3 种异地多活架构的特点

  • 同城异区:搭建高速网络连接机房,类似本地机房。设计上当作本地机房,无需额外考虑。
  • 跨城异地:难点在于数据不一致,要考虑业务是否合适。
  • 跨国异地:面向不同地区用户,或者提供只读业务,反而对架构设计要求不高。

# 跨城异地的技巧

1、保证核心业务的异地多活

2、保证核心数据最终一致性

3、使用多种同步手段

  • 消息队列:例如账号数据只会创建,没有删除和修改
  • 二次读取:用户在 A 中心注册,访问 B 中心业务没有数据。B 读取失败后,根据路由访问 A 中心
  • 回源读取:用户在 B 登录,发现数据属于 A 中心,之后用户直接访问 A 中心即可
  • 存储系统同步:Mysql 数据库自带。有延迟,但是例如密码,很少 10s 内多次修改密码
  • 重新生成:本中心没有,其他中心挂掉或者延迟,则本中心重新生成(例如 session)

核心是:没法面面俱到,分清主次,再做取舍。