我正在研究 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)?