在Paxos中提交失败

时间:2018-10-11 02:36:13

标签: distributed-computing distributed distributed-system consensus paxos

我是分布式系统和共识算法的新手。我理解它是如何工作的,但是我对一些极端的情况感到困惑:当接受者收到某个实例的接受,但从未听说最终的共识或决定是什么时,接受者会做出什么反应。例如,提议者在提交过程中或发送所有ACCEPT之后立即启动或失败。在这种情况下会发生什么?

谢谢。

2 个答案:

答案 0 :(得分:3)

此问题分为两部分:接受者对新提案有何反应?如果接受者从未学习过结果,他们将如何反应?

在普通的Paxos中,接受者实际上并不需要知道结果。实际上,完全不同的接受者在其内存中具有不同的值是完全合理的,而不知道它们所具有的值是否是承诺值。

paxos的真正重点是处理第一个问题。并且看到接受者从未真正知道它是否具有承诺的值,因此必须假定它可以具有承诺,但是如果没有则可以替换其值>具有承诺的价值。怎么知道当接收到消息时,提议者总是比较轮号,如果该数字是旧的,则接受者向提议者发信号,它必须首先“追赶”( Nack )。否则,它相信提议者知道自己在做什么。


现在要谈一谈真实系统。一些真正的paxos系统可以摆脱接受者而不必关心承诺的价值是什么:Paxos只是在那里选择价值。但是许多实际系统都使用Paxos&Friends来制作数据的冗余副本以进行保管。

某些paxos系统将继续进行paxosing,直到所有接受者都拥有数据为止。 (请注意,在没有其他提议者干扰的情况下,额外的paxos回合将在各处复制承诺的值。)其他系统则对其他提议者的干预持谨慎态度,并将使用另一条 Committed 消息来告知接受者(和其他接受者) 学习者)的承诺价值是什么。

但是如果提议者崩溃了怎么办?随后的提议者可以提出建议 no-op 。如果后续提议者准备(阶段1A)并且可以与先前提议者成功将 Accepts 发送给(阶段2A)的任何接受者进行通信,那么它将知道先验者提议者正在尝试这样做(通过1B阶段的响应: PrepareAck )。否则,将提交无害的 no-op 值。

答案 1 :(得分:2)

  

当接受者收到某个实例的ACCEPT,但从未听说最终的共识或决定是什么时,[接受者]将如何反应。

发送该值的节点通常通过对对其ACCEPT消息的肯定响应进行计数,直到其获得多数,来学习其固定值。如果丢弃了消息,则可以重新发送它们,直到获得足够的消息来确定多数结果为止。发送重复的消息时,接收者无需执行任何操作即可准确地遵循算法。

  

例如,提议者在提交过程中或发送所有ACCEPT之后立即引导或失败。在这种情况下会发生什么?

实际上这是一个有趣的案例。一个值可能会被大多数人接受,因此固定不变,但是没有人知道,因为所有计划的消息都未能到达。

对PREPARE消息的响应包含有关已经接受的值的信息。因此,任何节点都可以发出PREPARE消息并了解值是否已固定。那实际上是Paxos的天才。一旦值被大多数人接受,则该值是否固定,因为在所有消息丢失和崩溃情况下,运行该算法的任何节点都必须选择相同的值。

通常the source会为连续的回合发送具有连续值的ACCEPT消息。如果领导者崩溃,则任何节点都可以超时并通过发送PREPARE消息来尝试领导。发出试图引导的PREPARE消息的多个节点会互相中断,从而产生实时锁定。然而,一旦确定了什么价值,他们就永远不会不同意。他们只有通过竞争获得固定的价值,直到获得足够的信息来赢得赢家。

再次,当新的领导者接管崩溃的领导者时,接受者节点无需执行任何操作,而是遵循算法。该算法的不变性意味着没有任何领导者会就固定值与任何先前的领导者产生矛盾。新领导者与老领导者合作,接受者可以简单地相信这种情况。最终,足够多的消息将传递给所有节点以学习结果。