MST

星途 面试题库

面试题:分布式系统中3PC如何缓解单点故障问题

请阐述在分布式系统里,3PC(三阶段提交协议)相比于2PC(两阶段提交协议)在解决单点故障方面有哪些改进措施?
30.5万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

1. 引入预提交阶段

  • 2PC的问题:2PC中协调者一旦崩溃,参与者可能长时间处于阻塞状态,无法得知最终决策。例如在事务执行过程中,协调者发送准备消息后崩溃,参与者一直等待协调者的最终指令,却无结果。
  • 3PC改进:3PC增加了预提交阶段。协调者在收到参与者的准备就绪回复后,先进入预提交阶段,向参与者发送预提交消息。此时即使协调者崩溃,参与者也知道事务已基本达成共识,不会长时间阻塞。比如参与者收到预提交消息后,若协调者崩溃,参与者可按照预提交的结果继续执行,等待新的协调者选举出来后,根据新协调者的指令完成事务。

2. 引入超时机制

  • 2PC的问题:2PC中若协调者崩溃,参与者只能无限期等待,没有有效的自我恢复机制。
  • 3PC改进:3PC在参与者和协调者都引入了超时机制。参与者在每个阶段若等待协调者指令超时,可自行做出决策。例如在预提交阶段,参与者等待协调者的提交或回滚指令超时后,可以自行决定提交或回滚事务,而不是一直阻塞。协调者也有超时机制,若在规定时间内未收到所有参与者的反馈,会采取相应措施,避免因等待部分参与者响应而无限期等待。

3. 降低协调者单点故障影响

  • 2PC的问题:2PC中协调者是整个事务的核心,一旦协调者故障,整个事务处理流程可能陷入混乱。
  • 3PC改进:3PC通过预提交阶段和超时机制,降低了协调者单点故障对事务处理的影响。即使协调者在某个阶段崩溃,参与者依据预提交状态和超时机制,能做出相对合理的决策,继续推进或终止事务,而不至于使整个系统长时间停顿等待协调者恢复。例如在提交阶段协调者崩溃,参与者因之前预提交状态和超时机制,可自行决定提交事务,减少因协调者故障导致的事务阻塞情况。