高可用是指系统无中断的执行功能的能力,代表了系统的可用程度,是进行系统设计时必须要遵守的准则之一 。而高可用的实现方案,无外乎就是冗余,就存储的高可用而言,问题不在于如何进行数据备份,而在于如何规避数据不一致对业务造成的影响 。对于分布式系统而言,要保证分布式系统中的数据一致性就需要一种方案,可以保证数据在子系统中始终保持一致,避免业务出现问题 。这种实现方案就叫做分布式事务,要么一起成功,要么一起失败,必须是一个整体性的事务 。
1、理论基础1.1 CAPCAP,Consistency Availability Partition tolerance 的简写:
Consistency:一致性,对某个客户端来说,读操作能够返回最新的写操作结果 。 Availability:可用性,非故障节点在合理的时间内返回合理的响应 。 Partition tolerance:分区容错性,分布式系统中系统肯定部署在多台机器上,无法保证网络做到 100% 的可靠,所以网络分区一定存在,即 P 一定存在 。
在出现网络分区后,就出现了可用性和一致性的问题,我们必须要在这两者之间进行取舍,因此就有了两种架构:
- CP 架构
- AP 架构
BASE,Basically Available Soft State Eventual Consistency 的简写: BA:Basically Available 基本可用,分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用 。 S:Soft State 软状态,允许系统存在中间状态,而该中间状态不会影响系统整体可用性 。 E:Consistency 最终一致性,系统中的所有数据副本经过一定时间后,最终能够达到一致的状态 。
BASE 理论本质上是对 CAP 理论的延伸,是对 CAP 中 AP 方案的一个补充 。
2、分布式事务协议2.1 二阶段提交协议:2PC2.1.1 概述二阶段提交(Two-phase Commit),是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm) 。通常,二阶段提交也被称为是一种协议(Protocol) 。
在分布式系统中,每个节点虽然可以知晓自己的操作是成功或者失败,却无法知道其他节点的操作是成功或失败 。
当一个事务跨越多个节点时,为了保持事务的 ACID 特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等) 。
因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作 。
2.1.2 二阶段提交过程
- 投票阶段
文章插图
image.png
投票阶段执行流程:
- 协调者向所有参与者询问是否可以执行提交操作,并开始等待各参与者的响应 。
- 参与者执行事务操作,如果执行成功就返回 Yes 响应,如果执行失败就返回 No 响应 。
- 如果协调者接受参与者响应超时,也会认为执行事务操作失败 。
- 提交阶段
文章插图
image.png
提交阶段执行流程:
- 如果第一阶段汇总所有参与者都返回 Yes 响应,协调者向所有参与者发出提交请求,所有参与者提交事务 。
- 如果第一阶段中有一个或者多个参与者返回 No 响应,协调者向所有参与者发出回滚请求,所有参与者进行回滚操作 。
- 优点 尽量保证了数据的强一致,但不是 100% 一致
- 缺点 单点故障,由于协调者的重要性,一旦协调者发生故障,参与者会一直阻塞,尤其是在第二阶段,协调者发生故障,那么所有的参与者都处于锁定事务资源的状态中,而无法继续完成事务操作 。同步阻塞,由于所有节点在执行操作时都是同步阻塞的,当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态 。数据不一致,在第二阶段中,当协调者向参与者发送提交事务请求之后,发生了局部网络异常或者在发送提交事务请求过程中协调者发生了故障,这会导致只有一部分参与者接收到了提交事务请求 。
而在这部分参与者接到提交事务请求之后就会执行提交事务操作 。但是其他部分未接收到提交事务请求的参与者则无法提交事务 。从而导致分布式系统中的数据不一致 。
推荐阅读
- 22 「网络安全」安全设备篇——抗DDOS异常流量清洗系统
- 批量安装Windows系统
- 几十块钱的电力猫可以替代千元分布式路由器?
- 运维监控系统 - nagios
- 直通车推广的优势 直通车推广原理是什么
- 分布式架构的总结
- win10下安装国产操作系统deepin/UOS,双系统开机可自由切换
- Win10系统上安装macOS,不破坏Win10也不丢文件,双系统非虚拟机
- 系统小技巧:Windows 10新功能解决大问题
- 揭秘webpack插件工作流程和原理