三阶段提交是对二阶段的改进
2PC
正常流程如下
两个阶段
1、执行事务通知通知协调者。
2、协调者通知参与者提交。
问题:
单点故障时,整体体系将阻塞。
协调者发起了提交命令,如果参与者未收到,数据将不一致
3PC
正常流程如下
强化点
- 执行提交前,各自检测是否能提交,避免无意义的全体回滚。
- 加入超时机制,不同场景下超时,选择最为合理的处理。
- 第一阶段和第二阶段参与者向协调者发送请求超时,直接中断整个流程
- 第三阶段,参与者超时未收到协调者指令, 直接做提交处理。(因为一二阶段都已经完成,选择提交比选择回滚,正确概率更高)
对比
相对来说
3PC,因为引入了超时机制、预判断, 相对可用性更高。
2PC,强阻塞,相对可用性更高。