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