写点什么

如何设计异地多活架构

作者:天天向上
  • 2021 年 12 月 22 日
  • 本文字数:1177 字

    阅读完需:约 4 分钟

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、技巧

  • 消息队列同步:适合全局唯一的数据,因为可以覆盖,具有幂等性

  • 库存拆分

  • 事务合并

  • 实时改异步

  • 适当容忍


用户头像

天天向上

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
如何设计异地多活架构