我目前正在探索原子提交协议(如2PC和3PC)的最坏情况,并且我无法找到为什么3PC可以保证原子性。也就是说,它如何保证如果群组A提交,群组B也提交?
以下是简化的3PC from the Wikipedia article:
现在让我们假设以下情况:
结果:
而且你有它:一个队列犯了,另一个犯了中止。 交易搞砸了。
那我在这里错过了什么?根据我的理解,如果超时(在预先提交状态下)的自动提交被无限等待协调器命令所取代,那么这种情况应该可以正常工作。
答案 0 :(得分:8)
您引用的文章似乎非常准确地涵盖了这种可能性:“此算法的主要缺点是,如果网络以任何方式进行分段,它无法恢复。”你注意到的情况,“A”只是离线,转换为“网络已被分割” - 即“A”现在在一个段中,而“B”和“协调员”在另一部分。
Kempster,Stirling和Thannish在paper中讨论了(以及其他地方)用于解决此问题的各种增强型3PC协议。