3PC在这种情况下会做什么?

时间:2017-07-18 23:37:19

标签: distributed-transactions

我们正在使用3PC(三阶段承诺)进行分布式事务。有4个节点,A,B,C,D,其中A是协调员。

  1. A收到所有其他人的OK,并将准备提交消息发送给他们。
  2. 当C和D收到此消息并转移到准备状态时,B崩溃并且没有收到此消息(因此保持等待状态)。
  3. B上的超时并将中止发送给所有其他人,但只有D收到中止消息,而C在收到中止消息之前崩溃。
  4. 现在的问题是:康复后C会做些什么?根据{{​​3}},C将在失败转换后提交恢复,而不是像D那样中止。不会导致状态不一致吗?或者C有一些机制来检测处于中止状态的事务吗?

1 个答案:

答案 0 :(得分:0)

我认为关于B节点行为的问题有一个错误的假设吗?如果B在移动到准备状态之前崩溃,那么它将在重启后等待状态,并将被中止。

我希望C节点将被中止,因为协调员将命令它执行此操作。我认为这将类似于2PC。它由协调员定期检查丢失的节点是否再次可用。当C重新启动时,协调器可以看到它并推送节点以便回滚,因为将重新发送中止消息。