我正在经历基本Paxos算法可以获得最终结果一致的各种场景。有一种情况我无法解释结果。
有两个提出的P1 P2,三个受体A1 A2 A3。 P1会提出值u,P2会提出值v。
1. P1(发送id n)完成准备步骤,从A1 A2 A3接收所有承诺,然后在A1 A2 A3中将所有商店n作为id。
2. P2(发送ID n + 1)然后A1 A2 A3将n + 1存储为id
3。 P2 down。
4. P1用(n,u)向A1 A2 A3发送接受请求,当然A1 A2 A3会拒绝该请求,遗憾的是P2已经停止了。
这样的提议者,我们接下来会做什么?另一轮新的Paxos?
答案 0 :(得分:1)
做一个新的paxos回合,这正是它的用途。
提议者在准备消息中发送它们的值,因此接受者将在下一个paxos轮中将P2的值发送给P1。
答案 1 :(得分:0)
几年前,当我研究这篇文章时,我回顾了课堂上的所有笔记和材料。对于Paxos正确的实现,它必须是容错的,并且永远不会在双方,提议者和接受者中终止。由于问题是关于提议者的容错性,我将关注它们:
这个问题的解决方案(但不是唯一一个)是复制提议者,每个提议者类型有几个实例,其中一个是在开始时选择的领导者/主人,并且是发送者提案。如果主服务器发生故障,可能在新选举中决定的另一个服务器,或者在初始化时使用优先级,则会成为新主服务器,并取代它。
在这种情况下,您可以有3个P2实例:P2-1,P2-2,P2-3,默认情况下P2-1是领导者,如果P2-1失败,则P2-2可以升级。 / p>
必须记住,接受者可以要求确认P2和P2-2仍然处于升级为新领导者的中间,因此在超时后设置重试可能是个好主意, P2-2有足够的时间做好准备。
答案 2 :(得分:0)
" Paxos简单"兰波特强>
" 很容易构建一个场景,其中两个提议者各自继续发布一系列数量不断增加的提案,其中没有一个被选中。提议者p完成提案号n1的阶段1。然后,另一个提议者q完成提案号n2的阶段1> N1。提议者p的阶段2接受对编号为n1的提议的请求被忽略,因为接受者都承诺不接受任何编号小于n2的新提议。因此,提议者p然后开始并完成阶段1以获得新的提议号n3> n2,导致第二阶段2接受提议者q的请求被忽略。等等。"
从描述步骤4: (A1,A2,A3)将回复来自P1的接受请求,将id + 1发送到P1,然后通知P1并增加id - > ID + 2。 P1发送到(A1,A2,A3)再次准备请求id + 2。为了避免P1和P2之间的实时锁定,更好的方法应该只有一个提议者(参考" Paxos Made Simple"的2.4章节)。