概述
2PC,是Two-Phase-Commit的缩写,即二阶段提交,主要解决的问题是让基于分布式架构下的所有节点在进行事务处理过程中能够保证原子性和一致性。它的核心思想是“一票否决”。
执行过程
**确认阶段:**协调者收到请求之后将请求转发给每一个参与者,等待参与者反馈。
**提交阶段:**所有的参与者都返回yes,那么协调者就会给参与者发布指令执行这个请求,并协调者会客户端返回成功信号。2PC算法提交阶段图解如图所示。
**中止阶段:**如果有一个或者多个参与者返回no,或者如果协调者没有收到参与者的返回信号,也会认为这个参与者返回的是no,那么协调者就会认为这个请求不可执行,那么协调者就会要求所有的参与者删除这个请求的记录 。2PC中止阶段图解如图所示。
2PC算法的缺点
- 单点问题:协调者的角色在整个二阶段提交协议中处于核心地位,因此一旦协调者出现问题,那么整个二阶段提交流程将无法运转
- 同步阻塞:二阶段提交协议存在的最明显也是最大的一个问题就是同步阻塞,限制分布式系统的性能,所有参与事务操作的逻辑都处在堵塞状态。无法进行其他操作
- 容错性较低:任意一个节点失败都会导致整个事务的失败
Zookeeper中的原子广播
Zookeeper中的原子广播为了保证节点数据的一致性使用2PC算法并对其进行改进
原子广播的过程如同所示:
**2pc在zookeeper中的改进:**leader收到一半及以上的follower返回成功信号,那么leader就会命令follower执行成功的操作,没有收到半数以上的follower传来的成功信号leader就会命令follower删除刚才的记录。