3PC(三阶段提交协议)
3PC(三阶段提交协议)
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
3PC(三阶段提交协议)
三阶段提交协议(3PC)是一种在分布式系统中用以达成所有节点一致性决策的协议,它是两阶段提交协议(2PC)的改进版。它减少了参与者之间的等待时间,并且在某些情况下能够减少阻塞的可能性。以下是 3PC 的基本工作过程:
第一阶段:准备阶段(CanCommit 阶段)
在这个阶段,协调者向所有参与者询问是否可以进行事务提交操作,并等待参与者的响应。
1 | 1. 协调者向所有参与者发送 CanCommit 请求。 |
第二阶段:预提交阶段(PreCommit 阶段)
这个阶段开始于协调者收到所有参与者发送的 Yes 响应。
1 | 1. 协调者向所有参与者发送 PreCommit 请求,并进入 Prepared 状态。 |
如果在这个阶段任意参与者或协调者出现故障,系统可以安全地回滚事务。
第三阶段:提交 / 中断阶段(DoCommit 阶段)
在此阶段,如果所有参与者都准备就绪,则完成事务提交。如果任何参与者在第二阶段投了否决票,或者协调者在得到足够的响应前发生故障,则中止事务。
1 | 1. 一旦协调者从所有参与者那里得到 ack 消息,它将进入 commit 状态,并向所有参与者发送 DoCommit 请求。 |
或者:
1 | 1. 如果参与者投了否决票,或者协调者宕机,将发送 abort 请求。 |
优点:
- 相比于 2PC,3PC 在协调者宕机的情况下,参与者不会无限期地等待,因此可以减少阻塞。
缺点:
- 实现起来比 2PC 更为复杂。
- 仍然无法完美解决分布式系统中的所有问题,例如网络分区问题。
总结来说,3PC 主要通过引入一个额外的阶段来减少分布式提交过程中的不确定性,从而提高系统的可靠性和效率,但并不是没有缺陷的。对于需要更高一致性保证的分布式系统而言,可能需要其它如 Paxos 或 Raft 等更为复杂的共识协议。