在 2PC 中,如果协调员要求 3 个参与者提交,而第二个参与者失败且没有对协调员做出任何响应,会发生什么情况。
客户端到达向第二个节点询问值,第二个节点刚刚出现但未能提交,因此它返回一个旧值...这是 2PC 的错误吗?
最佳答案
2PC缺失部分 - 2PR(2 Phases Read)
如果任何提交消息由于某种原因在某些参与者处丢失或未生效,则资源将保持在准备状态(这是不确定),即使在重新启动后也是如此,因为准备状态在协调器发送提交消息之前,必须将其持久保存在非 volatile 存储中。
任何人尝试读取任何不确定资源,都必须引用协调器来确定该资源的确切状态。一旦确定,您就可以选择正确的值版本。
对于您的情况,第二个节点返回新值(在协调器的帮助下找出新值确实已提交,而旧值已过时)。
----------编辑--------------
一些实现在准备阶段使用独占锁,这意味着一旦准备好,其他人就无法读取或写入准备好的资源。因此,在参与者提交之前,任何尝试读取的人都必须等待。
关于distributed-computing - 在 2PC 中如果提交失败会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042776/