MSHA本质上就是通过自上而下的全域流量隔离来解决数据同步的延时无法突破物理限制的问题,但多活容灾不是银弹,也有其对应适用的场景,且不同的场景做多活容灾的成本也不一样。本文介绍MSHA的应用场景和设计原则。

应用场景

以下应用场景是将业务按数据维度分成三种类型。

  • 读多写少型业务
    • 业务应用场景:典型的业务场景就是资讯、导购类的服务,例如商品浏览、新闻资讯等。
    • 数据特点:典型的数据特点就是读多写少,以浏览为主,核心业务场景是只读,单元里部署的都是只读业务。
    • 多活接入成本:接入成本低,只需要您在请求里标记上分流的标识即可。
  • 流水单据型业务
    • 业务应用场景:典型的业务场景就是电商交易、账单流水类服务,例如订单、通话记录等。
    • 数据特点:典型的数据特点就是数据可以按照一定的维度进行分片且可以接受最终一致。
    • 多活接入成本:接入成本略高,需要梳理业务,理出单元内的部署的核心的业务及其数据,对于单元依赖且无法拆分的业务采用读写分离,然后按照多活接入规范重点对服务层及数据层进行相应改造即可。
  • 状态依赖型业务
    • 业务应用场景:典型的业务场景就是银行账务,例如A、B在某银行均有账户,A、B 数据分片位于不同的数据中心,A和B之间会有转账行为。
    • 数据特点:典型的数据特点就是数据有状态依赖且无法最终一致,数据还存在跨数据中心的交互。
    • 多活接入成本:接入成本高。

MSHA设计原则

根据以上应用场景分析,可以确定MSHA一些设计原则:
  • 选取分区维度:选择一个数据维度来做数据切片,进而实现业务可以分开部署在不同的数据中心。
  • 确定改造范围:选择与以上选取的数据维度相关的业务范围来做多活。
  • 单元封闭:尽量让调用发生在本单元,避免跨数据中心的调用。因为一方面为了用户体验,本地调用RT更短;另一方面为了稳定性,防止一个数据中心出了问题,其它数据中心受影响。
  • 无法接受最终一致的数据要进行单点写:对于一些实时性要求极高,无法接受最终一致的数据只能进行单点写。