distributed-transactions - 三阶段提交协议(protocol)

标签 distributed-transactions

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

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

1)C 向 A 发送了 precommit 消息,在它向 B 发送 precommit 消息之前,A 和 C 同时失败。 2)事务现在重新启动,B 最终中止它,因为没有来自 A 的回复。 3)A 提交事务,因为它已经收到了 precommit 消息。

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

最佳答案

更新:

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

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

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

是的,一旦新的 coordinator 看到他们是已经收到 preCommit 消息的参与者,它就会重新向其他参与者发送 preCommit 消息。

关于distributed-transactions - 三阶段提交协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265565/

相关文章:

asp.net - 获取连接失败。连接可能未正确配置或您可能没有此连接的正确权限

java - AKKA 远程 actor 可以用于 p2p swarm 环境吗?

Java - 启发式异常

design-patterns - 工作单元/存储库模式同时更新多个源

java - 有没有java类似的supervisord

architecture - 您如何处理复合微服务请求中的验证?

SOA 和分布式事务

distributed-transactions - 三阶段提交如何避免阻塞?

sql-server - 查询链接服务器上的全局临时表

jakarta-ee - 在托管事务期间关闭远程 EJB 连接