知识卡片
2PC阻塞态脆弱
内容
两阶段提交把提交拆成表决和提交两阶段,但协调者WAIT态和参与者INIT/READY态都是等待对方消息的阻塞态;一旦某方崩溃,另一方可能长时间挂起,需要超时判断和参与者互询来缓解。
参考来源
- 位置:《大数据日知录:架构与算法》第2章《数据复制与一致性》"2.4.1 两阶段提交协议(Two-Phrase Commit,2PC)"一节(源文件:_epub-src/OEBPS/text00007.html)
- 结论依据:原文明确"在所有可能状态中,存在3个阻塞状态:协调者的WAIT状态、参与者的INIT状态和READY状态……如果一个协议包含阻塞态,则明显是一个很脆弱的系统,因为很可能因有进程陷入崩溃而导致处于阻塞态的对象进入长时间的等待",并说明"引入超时判断机制和参与者互询机制"来缓解(但未能完全解决)。
- 原始内容:从两者的有限状态机可以看出,在所有可能状态中,存在3个阻塞状态:协调者的WAIT状态、参与者的INIT状态和READY状态……如果一个协议包含阻塞态,则明显是一个很脆弱的系统,因为很可能因有进程陷入崩溃而导致处于阻塞态的对象进入长时间的等待,系统无法继续向后运行……可以引入两种手段:超时判断机制和参与者互询机制。