在2PC中,如果协调员要求3个参与者提交,而第二个参与者失败而没有对协调员做出响应,会发生什么。
客户端到达时询问第二个节点的值,第二个节点刚刚启动但是没有设置提交所以它返回一个旧值...这是2PC的错误吗?
答案 0 :(得分:1)
如果协调员要求他们提交,那么这意味着所有参与者已经回答他们准备好提交。准备意味着参与者保证能够提交。没有失败。如果节点在流星撞击中消失,则从HA / DR数据恢复节点,恢复的模式恢复事务并继续提交。
2PC的参与者是持久的,持久的协调员,能够进行备份和恢复。理论上,当其中一个参与者无法恢复时,每个参与者和协调者都会在最后一次协调交易之前及时恢复。在实践中,所有协调员都支持在参与者丢失并且将手动强制交易到一个或另一个州的情况下执行案例,请参阅Resolve Transactions Manually或Resolving indoubt transactions manually。
答案 1 :(得分:0)
2PC的缺失部分-2PR(已读取2个阶段)
如果某些提交消息在某些参与者上丢失或由于某种原因而没有生效,则即使重新启动后,资源仍处于准备状态(不确定),因为准备状态必须先保存在非易失性存储中,然后协调器才能发送提交消息。
任何试图读取任何不确定资源的人,都必须参考协调器以确定该资源的确切状态。确定后,您可以选择正确的价值版本。
对于您的情况,第二个节点返回新值(在协调器的帮助下,发现新值确实已提交,而旧值已过时)。
----------编辑--------------
某些实现在准备阶段使用互斥锁,这意味着一旦准备好,其他任何人就不能读取或写入准备好的资源。因此,在参与者提交之前,任何人都必须尝试阅读,必须等待。