面试题答案
一键面试1. 引入预提交阶段
- 2PC的问题:2PC中协调者一旦崩溃,参与者可能长时间处于阻塞状态,无法得知最终决策。例如在事务执行过程中,协调者发送准备消息后崩溃,参与者一直等待协调者的最终指令,却无结果。
- 3PC改进:3PC增加了预提交阶段。协调者在收到参与者的准备就绪回复后,先进入预提交阶段,向参与者发送预提交消息。此时即使协调者崩溃,参与者也知道事务已基本达成共识,不会长时间阻塞。比如参与者收到预提交消息后,若协调者崩溃,参与者可按照预提交的结果继续执行,等待新的协调者选举出来后,根据新协调者的指令完成事务。
2. 引入超时机制
- 2PC的问题:2PC中若协调者崩溃,参与者只能无限期等待,没有有效的自我恢复机制。
- 3PC改进:3PC在参与者和协调者都引入了超时机制。参与者在每个阶段若等待协调者指令超时,可自行做出决策。例如在预提交阶段,参与者等待协调者的提交或回滚指令超时后,可以自行决定提交或回滚事务,而不是一直阻塞。协调者也有超时机制,若在规定时间内未收到所有参与者的反馈,会采取相应措施,避免因等待部分参与者响应而无限期等待。
3. 降低协调者单点故障影响
- 2PC的问题:2PC中协调者是整个事务的核心,一旦协调者故障,整个事务处理流程可能陷入混乱。
- 3PC改进:3PC通过预提交阶段和超时机制,降低了协调者单点故障对事务处理的影响。即使协调者在某个阶段崩溃,参与者依据预提交状态和超时机制,能做出相对合理的决策,继续推进或终止事务,而不至于使整个系统长时间停顿等待协调者恢复。例如在提交阶段协调者崩溃,参与者因之前预提交状态和超时机制,可自行决定提交事务,减少因协调者故障导致的事务阻塞情况。