Overview
- 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议。
- 为解决分布式一致性问题,在长期的探索过程中,涌现了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法了。
2PC与3PC
- 分布式系统中,每个机器节点虽然都能明确知道自己在进行事务操作过程中的结果是失败or成功,但却无法直接获取到其他分布式节点的操作结果。
- 因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为“协调者(Coordinator)”的组件来统一调度所有分布式节点的执行逻辑。而被调度的分布式节点则被称为“参与者(Participant)”。
- 协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务真正进行提交。基于该思想,衍生出了二阶段提胶片和三阶段提交两种协议。
2PC
- 2PC,即Two-Phase Commit。是计算机网络尤其是数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性设计的一种算法。
- 简单来说,就是将一个事务的处理过程分为了投票和执行两个阶段。
协议说明
- 阶段一:提交事务请求:
- 事务询问:协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应;
- 执行事务:各参与者执行事务操作,并将Undo和Redo信息记入事务日志;
- 各参与者向协调者反馈事务询问的响应:
- 阶段二:执行事务提交:
协调者根据各参与者的反馈情况来决定最终是否可以进行事务提交操作。- 执行事务提交
- 发送提交请求:协调者向所有参与者节点发出Commit请求;
- 事务提交
- 反馈事务提交结果:参与者完成事务提交后,向协调者发送Ack
- 完成事务
- 中断事务
- 发送回滚请求:协调者向所有参与者节点发出Rollback请求;
- 事务回滚:参与者利用其在阶段一中记录的Undo信息来执行回滚操作;
- 反馈事务回滚结果
- 中断事务
- 执行事务提交
优缺点:
- 优点:原理简单,实现方便
- 缺点:同步阻塞,单点问题,脑裂,太过保守。
- 同步阻塞:2PC最大的问题,会极大地限制分布式系统的性能。因为在2PC执行过程中,所有该事务操作的逻辑都处于阻塞状态,也就是说,各个参与者在等待其他参与者响应的过程中将无法进行其他任何操作。
- 单点问题:一旦协调者出现问题,整个2PC都无法运转。更严重的是,如果协调者在phase2中出现问题的话,那么其他参与者将会一直处于锁定事务资源的状态中,而无法继续完成事务操作。
- 数据不一致:在phase2,如果协调者向所有的参与者发送Commit请求之后,发生了局部网络异常或是协调者在尚未发送完Commit请求之前自身发生崩溃,最终导致只有部分参与者收到了Commit请求,那么整个分布式系统就会出现数据不一致现象。
- 太过保守:当协调者无法获取参与者的响应信息时,协调者只能依靠其自身的超时机制来判断是否需要中断事务,这样的策略过于保守。换句话说,2PC提交协议没有涉及较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败。
3PC
协议说明
- Three-Phase Commit是2PC的改进版。
- 3PC是有CanCommit、PreCommit和DoCommit三个阶段组成的事务处理协议
时间: 2024-10-14 07:27:38