三阶段提交

时间:2012-06-26 14:25:45

标签: distribution distributed distributed-transactions

我理解三阶段提交是为了解决“两阶段提交”的问题,当在第二阶段协调器和队列同时失败时,无法知道协调器是否已决定提交消息

显然,三阶段提交旨在通过添加额外阶段来解决此问题。但是,如果协调员和队列失败,你是否在第三阶段面临完全相同的问题?

1 个答案:

答案 0 :(得分:10)

在3PC中,可以通过查询剩余的活动队列来找出失败的协调员决策。如果任何活动队列处于预提交状态 - 这意味着他们都同意提交(否则协调器将不会发送预提交)。我们需要提交其余的同类群组,因为失败者可能已经提交了。

如果没有一个队列处于预先提交状态 - 我们可以假设协调员没有向任何队列发送'提交',因此没有发生任何副作用,我们可以中止。

以下是一个很好的解释: http://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/