• 异地多活设计4步走


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

    第 1 步:业务分级

    按照一定的标准将业务进行分级,挑选出核心的业务,只为核心业务设计异地多活,降低方案整体复杂度和实现成本。
    常见的分级标准有下面几种:

    • 访问量大的业务
    • 核心业务
    • 产生大量收入的业务

    第 2 步:数据分类

    挑选出核心业务后,需要对核心业务相关的数据进一步分析,目的在于识别所有的数据及数据特征,这些数据特征会影响后面的方案设计。
    常见的数据特征分析维度有:

    • 数据量
      数据量包括总的数据量和新增、修改、删除的量
    • 唯一性
      唯一性指数据是否要求多个异地机房产生的同类数据必须保证唯一
    • 实时性
      实时性指如果在 A 机房修改了数据,要求多长时间必须同步到 B 机房,实时性要求越高,对同步的要求越高,方案越复杂。
    • 可丢失性
      可丢失性指的是数据是否可以丢失。
    • 可恢复性
      可恢复性指数据丢失后,是否可以通过某种手段进行恢复,如果数据可以恢复,至少说明对业务的影响不会那么大,这样可以相应地降低异地多活架构设计的复杂度。

    第 3 步:数据同步.

    确定数据的特点后,我们可以根据不同的数据设计不同的同步方案。常见的数据同步方案有:

    • 存储系统同步
    • 消息队列同步
      采用独立消息队列进行数据同步,常见的消息队列有 Kafka、ActiveMQ、RocketMQ 等。
      消息队列同步适合无事务性或者无时序性要求的数据。
    • 重复生成
      数据不同步到异地机房,每个机房都可以生成数据,这个方案适合于可以重复生成的数据。例如,登录产生的 cookie、session 数据、缓存数据等

    第 4 步:异常处理

    异常(如同步延迟、数据丢失、数据不一致等)处理就是假设在出现这些问题时,系统将采取什么措施来应对。
    异常处理主要有以下几个目的:

    • 问题发生时,避免少量数据异常导致整体业务不可用
    • 问题恢复后,将异常的数据进行修正
    • 对用户进行安抚,弥补用户损失。

    常见的异常处理措施有这几类:

    1. 多通道同步
      多通道同步的含义是采取多种方式来进行数据同步,其中某条通道故障的情况下,系统可以通过其他方式来进行同步,这种方式可以应对同步通道处故障的情况。
      多通道同步设计的方案关键点有:
    • 一般情况下,采取两通道即可,采取更多通道理论上能够降低风险,但付出的成本也会增加很多。
    • 数据库同步通道和消息队列同步通道不能采用相同的网络连接,否则一旦网络故障,两个通道都同时故障;可以一个走公网连接,一个走内网连接。
    • 需要数据是可以重复覆盖的,即无论哪个通道先到哪个通道后到,最终结果是一样的。例如,新建账号数据就符合这个标准,而密码数据则不符合这个标准。
    1. 同步和访问结合
      访问指异地机房通过系统的接口来进行数据访问。
      同步和访问结合方案的设计关键点有:
    • 接口访问通道和数据库同步通道不能采用相同的网络连接,不能让数据库同步和接口访问都走同一条网络通道,可以采用接口访问走公网连接,数据库同步走内网连接这种方式。
    • 数据有路由规则,可以根据数据来推断应该访问哪个机房的接口来读取数据。例如,有 3 个机房 A、B、C,B 机房拿到一个不属于 B 机房的数据后,需要根据路由规则判断是访问 A 机房接口,还是访问 C 机房接口。
    • 由于有同步通道,优先读取本地数据,本地数据无法读取到再通过接口去访问,这样可以大大降低跨机房的异地接口访问数量,适合于实时性要求非常高的数据。
    1. 日志记录
      日志记录主要用于用户故障恢复后对数据进行恢复,其主要方式是每个关键操作前后都记录相关一条日志,然后将日志保存在一个独立的地方,当故障恢复后,拿出日志跟数据进行对比,对数据进行修复。
      常见的日志保存方式有:
    • 服务器上保存日志,数据库中保存数据,这种方式可以应对单台数据库服务器故障或者宕机的情况。
    • 本地独立系统保存日志,这种方式可以应对某业务服务器和数据库同时宕机的情况。
    • 日志异地保存,这种方式可以应对机房宕机的情况。
    1. 用户补偿
      无论采用什么样的异常处理措施,都只能最大限度地降低受到影响的范围和程度,无法完全做到没有任何影响。

    PS:业务分级讨论的时候,产品说 A 也很重要,因为影响用户使用;B 也很重要,因为影响公司收入;C 也很重要,因为会导致客户投诉……这种情况下我们该如何处理业务分级?
    答:
    业务分级我觉得得从如下方面来分析:
    1.部门或者公司当期的发力点,如果着重新用户的增长 我觉得顺序应该是ACB,如果着重现有客户满意度,我觉得顺序应该是CBA,如果看重看重收益,那B的优先级最高
    2.可通过预期货币价值分析,进行业务分级;大致维度如下:风险发生概率 风险损耗成本 技术改造陈本 技术改造时长(月) 改造后成本节省(月)

  • 相关阅读:
    eclipse整合spring+springMVC+Mybatis
    复杂系统分析与设计思路
    .NET数据挖掘与机器学习开源框架
    原来rollup这么简单之 rollup.watch篇
    面试官:说说你对css效率的理解
    两个实用的调试技巧
    Roma
    一个很实用的css技巧简析
    仅仅知道如何终止XHR请求,或许对你来说是不够的!
    再问你一遍,你真的了解try..catch(finally)吗???
  • 原文地址:https://www.cnblogs.com/whiteBear/p/15810814.html
Copyright © 2020-2023  润新知