面试题答案
一键面试两阶段提交(2PC)模式工作原理
- 准备阶段(投票阶段):
- 协调者向所有参与者发送
Prepare
消息。 - 参与者收到消息后,执行事务操作,将undo和redo信息记录到事务日志中,但不提交事务。
- 参与者向协调者反馈
Yes
(事务可以执行)或者No
(事务无法执行)的响应。
- 协调者向所有参与者发送
- 提交阶段(执行阶段):
- 所有参与者都返回
Yes
:协调者发送Commit
消息给所有参与者。参与者收到Commit
消息后,正式提交事务,释放事务相关资源。 - 有参与者返回
No
或者等待超时:协调者发送Abort
消息给所有参与者。参与者收到Abort
消息后,回滚事务,释放事务相关资源。
- 所有参与者都返回
优点
- 简单易实现:2PC模式逻辑相对清晰,在实现分布式事务时,对于开发人员来说比较容易理解和编码实现。
- 数据一致性保证:通过两个阶段的严格流程,确保了在所有参与者都准备好的情况下才进行提交,从而保证了分布式系统中数据的强一致性。
缺点
- 单点故障:协调者是整个2PC的核心节点,如果协调者出现故障,整个分布式事务将无法继续进行。比如协调者在准备阶段后崩溃,参与者会一直等待协调者的后续指令,造成资源阻塞。
- 同步阻塞:在整个2PC过程中,从准备阶段开始到提交阶段完成,参与者都处于阻塞状态,等待协调者的指令,期间无法处理其他事务,这会降低系统的并发处理能力。
- 性能问题:由于需要多次网络交互(准备阶段和提交阶段各一次),在网络状况不佳时,会导致事务处理的延迟增加,影响系统性能。同时,协调者需要等待所有参与者的响应,若参与者众多,等待时间会显著延长。
- 脑裂问题:在网络分区情况下,可能会导致部分参与者收到
Commit
消息,而部分参与者收到Abort
消息,造成数据不一致。