如何设计异地多活架构
1、理论基础
1.1、FLP 定理
定义
异步通信场景中,即使只允许一个节点失败,也没有任何确定性算法能够保证非失败进程达到一致性。
三大限定条件
确定性协议:给定一个输入,一定会产生相同输出
异步网络通信:异步通信没有统一时钟、不能时间同步、 不能使用超时、不能探测失败、消息可任意延迟、消息可乱序
所有存活节点:所有存活的结点必须最终达到一致性
不可能三角
Safety:系统中非故障节点达成了一致和合法的共识,又称为 Agreement
Liveness:系统中非故障节点在有限的时间内能够达成共识,又称为 Termination
Fault Tolerance:协议必须在节点故障的时候同样有效
1.2、CAP 定理
定义
分布式数据存储系统不可能同时满足一致性、可用性和分区容忍性
不可能三角
一致性:每次读取操作都会读取到最新写入的数据,或者返回错误
可用性:每次请求都会得到非错请求,但不保证返回最新的数据
分区容忍性:系统在发生分区的时候继续提供服务
三大限定条件
分布式,可能发生网络分区
通过复制来实现数据共享的存储系统
同时满足 CAP
1.3、BASE 理论
定义
BASE 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性(Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性
本质
CAP 的 AP 方案落地具体技巧
1.4、BASE/CAP/FLP 落地的原则
2、架构分析方法
FMEA 方法
Failure:假设系统某些组件或者模块出现故障
Mode:故障发生的方式、可能性
Effect:故障的影响
Analysis:分析系统的可能反应,以及如何应对
分析维度
业务功能:FMEA 分析涉及的功能点,用户角度划分的业务相关的功能点
故障模式:系统可能出现什么样的故障
故障影响:当发生故障模式中描述的故障时,业务功能具体会受到什么影响
严重程度:故障对业务的影响程度
故障原因:导致故障现象发生的原因,不同原因可能导致相同现象
故障概率:综合严重程度和故障概率来一起判断某个故障的最终等级
已有措施:针对具体的故障原因,系统现在是否提供了某些应对措施
规避措施:为了降低故障发生概率或者故障影响采取的一些措施
解决措施:解决措施指为了能够解决问题而做的一些事情
后续规划:系统的后续改进规划
3、业务定制型方案
3.1、指导原则
CAP 原理
3.2、三大原则
只保证核心业务
只能做到最终一致性
只能保证绝大部分用户
3.3、设计步骤
业务分级:将业务按某个维度进行优先级排序,优先保证 TOP3 业务异地多活
常见的分组维度:访问量、核心场景、收入来源
数据分类:分析 TOP3 中的每个业务的关键数据特点,将数据分类
数据修改量
一致性
唯一性
可丢失性
可恢复性
数据同步:针对不同的数据分类设计不同的数据同步方式
不局限于存储系统同步
异常处理:针对极端异常的情况,考虑如何处理,可以是技术手段或非技术手段
业务兼容
事后补偿
人工修正
3.4、技巧
消息队列同步:适合全局唯一的数据,因为可以覆盖,具有幂等性
库存拆分
事务合并
实时改异步
适当容忍
评论