在Multi-Paxos算法中,从接受者的角度考虑此消息流:
接收:准备(N)
回复:承诺(N,null)
收到:接受!(N,V1)
回复:接受(N,V1)
收到:接受!(N + 1,V2)
回复:?
根据协议,接受者在这种情况下应该做出什么反应?它应该以Accepted(N + 1,V2)回复,还是应该忽略第二次接受!?
我相信这种情况可能发生在Multi-Paxos中,当第二个提议者上线并认为他是(并且始终是)领导者时,因此他发送他的接受而没有准备。或者,如果他的准备工作根本没有达到接受者。如果这种情况可能不会发生,你能解释一下原因吗?
答案 0 :(得分:6)
我不同意其他两个答案。
多Paxos 不说领导者是唯一的提议者; 这会导致系统出现单点故障。即使在网络分区期间,系统也可能无法进行。 Multi-Paxos是一种优化,允许单个节点( Leader )跳过一些准备阶段。认为领导者已经死亡的其他节点可能会尝试代表她继续实例,但仍必须使用完整的Basic-Paxos协议。
拒绝接受消息违反了Paxos算法。 接受者应该接受所有值,除非它承诺不接受它。(忽略是允许的但不建议;这只是因为允许丢弃的消息。)
还有一个优雅的解决方案。问题在于领导者的整数(问题中的N + 1)。
以下是一些假设:
通过这些假设,解决方案非常简单。领导者只是为它的初始接受阶段选择了一个非常低的圆形id。只要它低于所有节点的圆形ID,这个id(我称之为INITIAL_ROUND_ID)就可以是任何东西。根据您的id选择方案,-1,0或Integer.MIN_VALUE将起作用。
它有效,因为另一个节点(我称之为斯图尔特)必须通过完整的Paxos协议提出任何建议,并且他的圆形ID总是大于INITIAL_ROUND_ID 。有两种情况需要考虑:领导者的接受消息是否到达斯图尔特准备消息的任何节点。
当领导者的接受阶段没有到达任何节点时,Stewart将在任何Promise中都没有返回值,并且可以像普通的Basic-Paxos一样继续进行。
并且,当领导者的接受阶段已经到达一个节点时,Stewart将获得一个承诺中的值,用于继续算法,就像在Basic-Paxos中一样。
在任何一种情况下,由于Stewart的round id大于INITIAL_ROUND_ID,节点从Leader收到的任何慢速Accept消息都将导致Nack。
Acceptor或Stewart都没有特殊的逻辑。 Leader上的最小特殊逻辑(即选择一个非常低的INITIAL_ROUND_ID)。
注意,如果我们将OP的问题改为一个字符,那么OP的自我回答是正确的:Nack。
但就目前而言,他的回答打破了Paxos算法;它应该是接受!
答案 1 :(得分:0)
Multi-Paxos的正确性取决于领导者(即,提议者)在连续的Paxos实例之间没有变化的要求。从The Part-Time Parliament第3.1节(议会多议会议定书):
逻辑上,议会议定书[a.k.a. Multi-Paxos]使用了 完整的Synod协议的单独实例[a.k.a. Paxos]为每个法令号。然而, 一位总统[a.k.a.所有这些实例都选择了提议者/领导者,并且他执行了第一次 协议的两个步骤只需一次。
[增加了重点是我的。]
因此,Multi-Paxos假设您所描述的案例 - 当第二个提议者上线并认为他是(并且始终是)领导者时将永远不会发生。如果发生这种情况,则不应使用Multi-Paxos。关于第二种可能性 - 当第二个提议者的Prepare
没有到达接受者时 - 第二个提议者已发出Accept!
的事实意味着它先前发出了Prepare
受法定人数为Promised
。由于接受者已经承诺在第N
轮上提出第一个提议者,因此第二个提议者的Prepare
必须在轮次N
之前发出。因此,最终Accept!(N+1,V2)
的计数器必须小于 N
。
修改:还应注意,此版本的协议对Byzantine failure不健全:
[Paxon议会的议定书]不容忍任意的恶意失败,也不保证有限时间的反应。
- 兼职议会,第4.1节< /子>
答案 2 :(得分:0)
也许一个更简单的答案是观察到当准备(N + 1)命令被不包括有关受体的多数人接受时就是这种情况。
详细说明:一旦领导者知道某些多数人已经承诺(N + 1),它就会将Accept(N + 1,x)发送给所有接受者,即使一些其他大多数接受者以Accepted(N + 1)回复,也已达成共识。
这种情况不是那么罕见。
答案 3 :(得分:-2)
(回答我自己的问题。)
我目前的理解是我不应该接受N + 1中的值(即根本不回答或发送NACK),从而迫使领导者可能开始准备另一轮(如果多数未达到)已达成共识)。收到准备(N + 2)后,我将回答Promise(N + 2,V1),并照常继续。