参考大佬文章:后台开发必备知识——容灾

1.容灾:

容灾就是对灾难(disater)的容忍能力,即当灾难袭来时,能保证服务正常运行而采取的措施,以实现业务连续性为目标。

后台服务要保证业务连续性(服务不中断,或中断时间在允许范围内),系统需具备容灾能力。基于服务冗余实现的,大而全的容灾系统具有较大成本。

2.容灾层级划分:

1.数据级容灾:数据备份

2.应用级容灾:数据备份 + 服务多实例

hadoop容灾 双活 双活与容灾的本质_数据一致性

3.容灾评价指标:

灾难检测 →  容灾切换 → 数据一致性

hadoop容灾 双活 双活与容灾的本质_数据_02

4.容灾解决方案:

1. 双活:两个业务系统,不区分主从(负载均衡)

2. 灾备:区分主从,系统故障时,启用备用系统

常见的四层容灾设计:

hadoop容灾 双活 双活与容灾的本质_微服务_03



灾难检测:

通过心跳包实现,主从节点分别向控制层上报心跳,若控制层收不到某个节点的心跳,则认为其不可用,对主节点降级,并把流量切到从节点

容灾切换:

将流量从一个节点切换到其他节点,可以通过负载均衡实现

数据一致性:

主节点故障时,切换到其他节点也能保证业务不中断,不受影响。等到所有节点都写成功后再返回 → “同步写”

hadoop容灾 双活 双活与容灾的本质_hadoop容灾 双活_04


                                             (同步写:数据一致性时序图)但是这种方式有缺点:同步写可能会造成一定延迟,影响系统性能,增加请求响应时间。

所以采用改进方式,优化设计,变"同步"为"异步",详细步骤:

0. 增加注册中心组件,用于登记写事件

1. master在注册中心登记了写事件,slave可以在注册中心校验数据是否与master一致:

(1) 验证结果一致,无需处理

(2) 验证结果不一致,slave尝试从master复制未写的数据,失败则重试n次

(3) 若重试成功,数据同步完成

(4) 若重试失败,则通知注册中心回滚(做标记),同时通知客户端上次写事件失败,需重新发起请求

 

hadoop容灾 双活 双活与容灾的本质_hadoop容灾 双活_05


                                   (异步写:容灾一致性实现优化)

5.注册中心的登记同样是同步动作,为何能降低性能? 

1. 注册写事件涉及到的数据内容通常远小于业务数据。
2. 在多节点时,写事件的注册比各节点的数据同步要快很多。