在 2PC 中,如果提交失败会发生什么?

In 2PC what happens in case of failure to commit?

在 2PC 中,如果协调器要求 3 个参与者提交,而第二个参与者失败且没有对协调器做出响应,会发生什么情况。

一个客户端到达向第二个节点询问值,第二个节点刚刚出现但没有设法提交所以它returns一个旧值...这是2PC的错误吗?

如果协调员要求他们提交,则意味着所有参与者都已经回答他们准备提交。准备就绪意味着参与者保证能够提交。没有失败。如果节点在流星撞击中消失,则节点从 HA/DR 数据恢复,恢复模式恢复事务并继续提交。

2PC 的参与者是持久的、持久的协调器,能够进行备份和恢复。理论上在其中一个参与者无法恢复的情况下,那么每个参与者,以及协调者,都被及时恢复到最后一次协调交易之前。在实践中,所有协调器都支持在参与者丢失时强制执行的情况,并且事务将被手动强制进入一种或另一种状态,请参见Resolve Transactions Manually or Resolving indoubt transactions manually

2PC - 2PR(2 Phases Read)缺失部分

如果某些参与者的任何提交消息丢失或由于某种原因未生效,资源将保持准备状态(不确定),即使在重新启动,因为在协调器可以发送提交消息之前,准备好的状态必须保存在非易失性存储中。

任何人试图读取任何不确定资源,必须参考协调器以确定该资源的确切状态。一旦确定,您就可以选择合适的版本值。

对于您的情况,第二个节点 returns 新值(在协调器的帮助下找出新值确实已提交,旧值已过时)。

------------编辑------------

一些实现在准备阶段使用排他锁,这意味着一旦准备好,其他人就无法读取或写入准备好的资源。因此,在参与者提交之前,任何人尝试阅读,都必须 等待