2PC(两阶段提交协议)

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

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

两阶段提交协议(2PC)

两阶段提交协议(2PC)是一种在分布式系统中实现数据一致性的协议。它主要用于在多个节点间协调一个全局的事务,确保要么所有节点都提交事务,要么所有节点都不提交,从而保证系统的一致性。

第一阶段:准备阶段

在第一阶段,协调者(通常是事务的发起者)向所有参与者发送一个准备请求。每个参与者将执行事务操作,但不会提交,它们会将事务的结果保存在持久化存储中,并向协调者返回一个响应,表示它们已准备好提交或者无法提交。

协调者 -> 参与者: 准备请求
参与者 -> 协调者: 准备好或无法提交

第二阶段:提交/回滚阶段

在第二阶段,协调者根据参与者的响应来决定是提交事务还是回滚事务。

  • 提交: 如果所有参与者都报告说它们准备好了,协调者将发送一个提交请求给所有参与者。

  • 回滚: 如果任何参与者报告说它们无法提交(或者协调者没有从某些参与者那里收到响应),协调者将发送一个回滚请求给所有参与者。

协调者 -> 参与者: 提交请求 或 回滚请求
参与者 -> 协调者: 完成提交 或 完成回滚

优点与缺点

优点:

  • 原子性: 2PC保证了事务的原子性,要么所有的操作都被提交,要么都被回滚。

  • 简单性: 协议流程简单,易于理解和实现。

缺点:

  • 性能: 2PC是一个阻塞协议,参与者在等待协调者的最终决定时必须保持锁定资源,这可能导致性能瓶颈。

  • 单点故障: 如果协调者在第二阶段崩溃,参与者可能会无限期地锁定资源。

  • 数据不一致: 在某些故障情况下,可能会导致数据不一致。

总结

两阶段提交协议是分布式系统中确保事务一致性的重要机制。尽管它有一些缺点,但它的设计简单和原子性保证使其在许多系统中得到了应用。在实现2PC时,需要考虑其对系统性能的影响,并采取措施来处理可能的单点故障问题。

最后更新于