1. 2PC 的同步阻塞与协调者单点
2PC 的同步阻塞与协调者单点问题是如何产生的,如何缓解?
- 参与者 prepare 后阻塞等待
- 协调者单点故障的影响
- 缓解手段(超时、补偿、日志)
2PC 的同步阻塞源于其"prepare 后再等待协调者 commit"的机制:参与者执行 prepare 并锁定资源后,必须等待协调者的最终决定,期间资源被占用、无法释放,若协调者宕机或网络故障,参与者会长期处于阻塞状态(unknown 状态),无法自行决定提交或回滚。协调者单点则指协调者是唯一的决策者,一旦协调者故障,所有参与者都失去决策来源,整个事务卡死。缓解手段包括:引入超时机制(参与者超时后自行处理或回滚,但需谨慎,可能造成不一致);协调者高可用(协调者集群 + 主备切换,且需持久化事务日志以便恢复);参与者持久化自己的状态与日志,协调者恢复后根据日志继续推进;以及事务日志记录所有参与者的状态,用于故障后的对账与恢复。但 2PC 的阻塞与单点本质无法完全消除,这也是它难以用于大规模分布式系统的原因。
阻塞与单点是 2PC 的固有缺陷:阻塞来自"prepare 与 commit 之间的等待",单点来自"协调者唯一决策"。缓解只能靠超时、日志恢复与协调者高可用,无法根治,因此工程上常以 TCC/Saga 等替代。