![]() |
1
2
只需重新定义术语(我们也要去掉1,因为我们只研究一个paxos迭代): 1)propose(n)==propose(n),来自当前身份的提议者的消息n 2)acceptPrepare(n,v)==ack(n,v),发送给提议者的消息n.v为空,如果该节点尚未接受任何值,o.w.v等于它已接受的值。 3)createDelect(n,v)==接受!(x,v),要求节点接受具有标识x的提议者的该值。如果节点已收到准备(n)消息,则节点将拒绝该消息,其中n>x 一旦达到准备的法定人数(n)——也就是说,大多数人已经确认了消息——那么具有标识n的提议者发出一个接受命令!(n,v)。如果准备(n+x),x>0,是由一个身份为n+x的提议者发出的,并且被大多数人确认,在确认(n,v)消息和接受之间!(n,v),那么大多数人承诺不接受时间戳为<n+x,x>0(也就是节点将拒绝接受)的建议值!(n,v) 一旦大多数人接受,就做出选择!(n,v)他们没有承诺要忽略的信息。 因此,当server2重新联机并发送accept时!(5,s2),它将被忽略,因为5<7。 |
![]() |
2
0
为了与公认的答案形成对比,算法本身并不真正需要 终止 在任何非常明确的意义上。更合理的做法是,单独讨论每个节点,终止它在算法中的参与,该算法是实现定义的。然后,也许您可以说,当所有参与的节点都退出时,算法本身已经终止,如果这是一个有用的事情需要知道的话。
该算法有效地
会聚的
一旦大多数承兑人发送
然而,曾经
一
节点知道算法已经收敛(通过接收
每个节点一旦知道算法收敛到的值,就可以终止它在算法中的参与,尽管根据您的实现约束,它可能更愿意继续参与更长的时间。 您必须稍微考虑一下故障容忍度,以说服自己在决定时终止可以保持活跃性:如果所有知道决定了什么值的节点在共享之前都会死亡,那么是否仍有可能取得进展?幸运的是,答案是肯定的:只要大多数节点仍然存在,如果其中任何一个节点知道确定的值,那么它就可以与其他节点共享该值,如果不知道,那么大多数参与节点只需要选择更高的投票号并运行另一轮。 在公认的答案中要注意的一点是:
首先,协议中没有关于
承诺忽视
其次,一旦获得多数,就可以有效地做出选择。
发送
|
![]() |
Julian C · dask按聚合正确使用 7 年前 |
![]() |
eagle A · 分布式Tensorflow重新加载模型失败 7 年前 |
![]() |
user3740387 · 从golang中的tcp连接读取 9 年前 |
![]() |
HypeXR · 如何利用AWS每分钟执行一次方法(多个进程/实例) 10 年前 |