三阶段提交是对二阶段的改进

2PC

正常流程如下
image.png
两个阶段
1、执行事务通知通知协调者。
2、协调者通知参与者提交。

问题:
单点故障时,整体体系将阻塞。
协调者发起了提交命令,如果参与者未收到,数据将不一致

3PC

正常流程如下
image.png

强化点

  1. 执行提交前,各自检测是否能提交,避免无意义的全体回滚。
  2. 加入超时机制,不同场景下超时,选择最为合理的处理。
    1. 第一阶段和第二阶段参与者向协调者发送请求超时,直接中断整个流程
    2. 第三阶段,参与者超时未收到协调者指令, 直接做提交处理。(因为一二阶段都已经完成,选择提交比选择回滚,正确概率更高)

对比

相对来说
3PC,因为引入了超时机制、预判断, 相对可用性更高。
2PC,强阻塞,相对可用性更高。