2PC(两阶段提交协议)
2PC(两阶段提交协议)
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
两阶段提交协议(2PC)
两阶段提交协议(2PC)是一种在分布式系统中实现数据一致性的协议。它主要用于在多个节点间协调一个全局的事务,确保要么所有节点都提交事务,要么所有节点都不提交,从而保证系统的一致性。
第一阶段:准备阶段
在第一阶段,协调者(通常是事务的发起者)向所有参与者发送一个准备请求。每个参与者将执行事务操作,但不会提交,它们会将事务的结果保存在持久化存储中,并向协调者返回一个响应,表示它们已准备好提交或者无法提交。
1 | 协调者 -> 参与者: 准备请求 |
第二阶段:提交 / 回滚阶段
在第二阶段,协调者根据参与者的响应来决定是提交事务还是回滚事务。
- 提交: 如果所有参与者都报告说它们准备好了,协调者将发送一个提交请求给所有参与者。
- 回滚: 如果任何参与者报告说它们无法提交(或者协调者没有从某些参与者那里收到响应),协调者将发送一个回滚请求给所有参与者。
1 | 协调者 -> 参与者: 提交请求 或 回滚请求 |
优点与缺点
优点:
- 原子性: 2PC 保证了事务的原子性,要么所有的操作都被提交,要么都被回滚。
- 简单性: 协议流程简单,易于理解和实现。
缺点:
- 性能: 2PC 是一个阻塞协议,参与者在等待协调者的最终决定时必须保持锁定资源,这可能导致性能瓶颈。
- 单点故障: 如果协调者在第二阶段崩溃,参与者可能会无限期地锁定资源。
- 数据不一致: 在某些故障情况下,可能会导致数据不一致。
总结
两阶段提交协议是分布式系统中确保事务一致性的重要机制。尽管它有一些缺点,但它的设计简单和原子性保证使其在许多系统中得到了应用。在实现 2PC 时,需要考虑其对系统性能的影响,并采取措施来处理可能的单点故障问题。