两阶段提交(2PC)

两阶段提交先由协调者询问所有参与者能否提交(准备阶段),全部同意后再统一提交;任一阶段失败或协调者宕机都可能造成资源长期锁定。

阶段一协调者询问,参与者锁定资源并回复是否可以提交
阶段二全部同意则提交,否则回滚
主要问题阻塞式协议:参与者可能在不确定状态下等待

阶段与故障点

阶段与故障点
阶段一:协调者 → 参与者:能否提交?
        参与者锁定资源,回复 Yes/No
阶段二:全部 Yes → 提交;否则 → 回滚

故障点:参与者回复 Yes 后协调者宕机
        → 参与者保持锁定,等待恢复决策
2PC 的阻塞窗口与协调者单点风险是它在跨服务场景被谨慎使用的原因。

易错点

  • 协调者宕机后参与者长期持锁,影响面扩散
  • 把 2PC 用于跨组织调用,协调者不可控且超时语义不一致

数据来源与参考

  • Bernstein, Hadzilacos & Goodman《Concurrency Control and Recovery in Database Systems》(1987)
  • 《数据密集型应用系统设计》(Kleppmann)第 9 章
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌