我正在研究 Paxos,我对算法在这个人为的例子中应该如何表现感到困惑。我希望下图能解释这个场景。
几点:
- 每个代理都充当提议者/接受者/学习者
- 准备消息有形式
(instance, proposal_num)
- 提议消息有形式
(instance, proposal_num, proposal_val)
- Server1 和 Server2 都决定同时启动提案流程
- 在开始时,消息 M1、M2 和 M3 同时出现
这里似乎虽然协议是“正确的”,即只S2
选择了一个值,但 Server1 和 Server2 认为选择它是因为不同的提案编号。
Decide(...)
Paxos 算法是否仅在消息发送给学习者时才终止?我一定是误解了Paxos Made Simple,但我认为选择是在提议者达到他们的Propose(...)
消息的法定人数的那一刻做出的。
Decide(...)
如果仅在将消息发送给代理后才做出选择,那么 Server2 是否应该Decide(1, 5, S2)
在它恢复时终止其发送,因为它看到了较晚的消息Prepare(1, 7)
?