形式陈述
两阶段提交(2PC)协调一个分布式事务的原子决定。第一阶段,协调者发送 prepare,参与者在本地检查并把可恢复的 yes/预提交状态写入稳定日志后投票;若所有票为 yes,协调者记录并广播 commit,否则记录并广播 abort。第二阶段参与者按决定完成并确认。日志与恢复协议保证已作出的全局决定在崩溃后不反转。
直觉
先确认所有参与者都已准备好兑现承诺,再统一发出提交决定;任何一方还没准备好,就让全体回滚。
例子与边界
若某参与者投 yes 后协调者崩溃,它不能自行判断全局是否已 commit,只能保持锁和预提交状态等待恢复或向其他节点询问,因此 2PC 是阻塞协议。网络分区中原子性仍可通过等待维持,但可用性下降。2PC 协调的是 commit/abort,不能在异步崩溃模型中凭空获得非阻塞共识;3PC 也依赖更强时序假设。
推论与应用
2PC 用于数据库、消息系统和跨资源事务。实现需结合 write-ahead logging、幂等消息、超时与启发式恢复,并与并发控制共同保证隔离和持久性。
参考资料
- Philip A. Bernstein, Vassos Hadzilacos, and Nathan Goodman, Concurrency Control and Recovery in Database Systems, Addison-Wesley, 1987,Ch. 7, distributed commit protocols and recovery。
- Jim Gray and Andreas Reuter, Transaction Processing: Concepts and Techniques, Morgan Kaufmann, 1992,Chs. 13–15, two-phase commit and transaction recovery。