三阶段提交(3PC)

在 2PC 的准备与提交之间增加预提交阶段,参与者可在超时后自行推断结果,降低阻塞概率;其正确性依赖同步网络与无分区假设,实际使用有限。

三阶段提交是什么

三阶段提交在二阶段提交的准备与提交之间增加一个预提交阶段,把流程变成询问、预提交与提交三步。它的改进在于参与者不必无限等待:进入预提交之后如果迟迟收不到最终提交消息,参与者可以按规则推断结果并自行决定。但它换来的非阻塞性依赖更强的假设,即同步网络且不发生网络分区,因此工程中实际使用有限。

为什么现实中少见

分布式系统的现实条件恰恰是分区与延迟不可避免,一旦分区出现,三阶段提交的推断规则可能让不同参与者做出不一致的选择。同时它比二阶段提交多一轮通信,正常路径下延迟更高。因此它更多用来理解二阶段提交的阻塞来源与共识算法的演进逻辑,而不是作为生产系统的默认替换方案。

基本信息

三个阶段询问、预提交、提交,比二阶段提交多一轮通信
主要改进参与者不再无限阻塞,超时后可按规则推断结果
关键假设同步网络、不发生分区、时钟偏差可控
主要局限分区场景下仍可能不一致,正常路径延迟更高
学习价值理解阻塞来源与共识算法演进,不适合作为默认替代

与二阶段提交对比

维度二阶段提交三阶段提交
阶段数准备与提交询问、预提交与提交
阻塞风险参与者可能长期等待超时可推断,阻塞降低
假设前提无特殊网络假设同步网络、无分区
通信开销较少多一轮,延迟更高
工程采用广泛有限

典型使用场景

  • 理解分布式事务的阻塞来源与失败场景分析
  • 学习共识算法演进过程中的过渡概念
  • 评估既有事务方案在网络分区下的行为边界
  • 架构评审中说明为何选择最终一致而非两阶段强一致
理解三阶段提交的价值在于认识二阶段提交的阻塞来源,而不是在生产中直接替换二阶段提交。
在存在网络分区的环境里按三阶段提交的假设设计,结果仍会不一致,而额外一轮通信让延迟更高,风险与收益都不划算。

易错点

  • 在存在网络分区的环境中按三阶段提交假设设计,结果仍不一致
  • 把三阶段提交当作二阶段提交的默认替代,忽略其同步网络前提
  • 认为超时推断一定安全,忽略不同参与者可能做出不同判断
  • 只关注协议阶段数,忽略协调者故障这一真正的阻塞来源
  • 在长事务上使用两阶段类协议,持有锁的时间随事务规模放大

数据来源与参考

  • Skeen & Stonebraker 三阶段提交相关论文(1983)
  • 《数据密集型应用系统设计》(Kleppmann)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌