3阶段提交协议

Abd*_*man 5 distributed-transactions

我正在维基百科上阅读3阶段提交协议(http://en.wikipedia.org/wiki/Three-phase_commit_protocol),这是一个让我想到3PC失败的场景:

假设有两个参与者A和B以及一个协调员C:

1)C向A发送预先提交消息,在向B发送预先提交消息之前,A和C同时发生故障.2)事务现在重新启动,B最终中止,因为没有来自A的回复.3)A提交事务,因为它已经获得了预先提交消息.

这也不是3PC应该解决的2PC中的原始问题吗?3PC如何解决问题?我错过了什么 谢谢.

xva*_*tar 3

更新:

参与者在收到协调者发来的 doCommit 消息之前是否不会提交?

参与者收到preCommit消息后,会先等待,如果超时,则继续提交。

如果协调器在发送预提交消息后失败,并且至少一个参与者具有预提交消息,则系统中的其余部分可以继续进行提交,因为他们已经知道系统上的状态。

是的,一旦新的协调者发现自己是已经收到 preCommit 消息的参与者,它就会向其他参与者重新发送 preCommit 消息。