3PC(三阶段提交协议)

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

3PC(三阶段提交协议)

三阶段提交协议(3PC)是一种在分布式系统中用以达成所有节点一致性决策的协议,它是两阶段提交协议(2PC)的改进版。它减少了参与者之间的等待时间,并且在某些情况下能够减少阻塞的可能性。以下是3PC的基本工作过程:

第一阶段:准备阶段(CanCommit阶段)

在这个阶段,协调者向所有参与者询问是否可以进行事务提交操作,并等待参与者的响应。

1. 协调者向所有参与者发送CanCommit请求。
2. 参与者如果同意进行事务提交操作,则返回Yes响应,否则返回No响应。

第二阶段:预提交阶段(PreCommit阶段)

这个阶段开始于协调者收到所有参与者发送的Yes响应。

1. 协调者向所有参与者发送PreCommit请求,并进入Prepared状态。
2. 参与者收到PreCommit消息后,会执行事务操作,然后记录事务日志,但不提交。
3. 执行完毕后,参与者向协调者发送ack消息。

如果在这个阶段任意参与者或协调者出现故障,系统可以安全地回滚事务。

第三阶段:提交/中断阶段(DoCommit阶段)

在此阶段,如果所有参与者都准备就绪,则完成事务提交。如果任何参与者在第二阶段投了否决票,或者协调者在得到足够的响应前发生故障,则中止事务。

1. 一旦协调者从所有参与者那里得到ack消息,它将进入commit状态,并向所有参与者发送DoCommit请求。
2. 参与者收到DoCommit消息后,提交事务,释放在事务过程中占用的资源,并向协调者发送完成消息。
3. 协调者收到所有参与者的完成消息后,完成事务。

或者:

1. 如果参与者投了否决票,或者协调者宕机,将发送abort请求。
2. 参与者收到abort消息后,撤销在PreCommit阶段执行的事务操作,释放资源,并通知协调者。

优点:

  • 相比于2PC,3PC在协调者宕机的情况下,参与者不会无限期地等待,因此可以减少阻塞。

缺点:

  • 实现起来比2PC更为复杂。

  • 仍然无法完美解决分布式系统中的所有问题,例如网络分区问题。

总结来说,3PC主要通过引入一个额外的阶段来减少分布式提交过程中的不确定性,从而提高系统的可靠性和效率,但并不是没有缺陷的。对于需要更高一致性保证的分布式系统而言,可能需要其它如Paxos或Raft等更为复杂的共识协议。

最后更新于