据我了解,三阶段提交是为了解决“两阶段提交”的问题,因为在第二阶段协调员和队列同时失败,无法知道协调员是否已决定提交消息。
显然,三阶段提交旨在通过添加一个额外的阶段来解决这个问题。但是,如果协调员和队列失败,您在第三阶段不会面临完全相同的问题吗?
据我了解,三阶段提交是为了解决“两阶段提交”的问题,因为在第二阶段协调员和队列同时失败,无法知道协调员是否已决定提交消息。
显然,三阶段提交旨在通过添加一个额外的阶段来解决这个问题。但是,如果协调员和队列失败,您在第三阶段不会面临完全相同的问题吗?
在 3PC 中,可以通过查询剩余的活动群组来找出失败的协调器决策。如果任何活动群组处于预提交状态 - 这意味着他们所有人都同意提交(否则协调员不会发送预提交)。我们需要提交其余的队列,因为失败的队列可能已经提交。
如果没有任何群组处于预提交状态 - 我们可以假设协调员没有向任何群组发送“提交”,因此没有发生副作用并且我们可以中止。
这是很好的解释: http ://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/