Paxos 算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)中有一点我不明白。这是关于如何处理差距的,论文描述了两种方法:
领导者以及学习领导者知道的所有命令的任何其他服务器现在可以执行命令 1-135。但是,它不能执行它也知道的命令 138–140,因为尚未选择命令 136 和 137。领导者可以将客户端请求的接下来的两个命令作为命令 136 和 137。相反,我们通过提出作为命令 136 和 137 的特殊“no-op”命令来立即填补空白,使状态保持不变. (它通过执行共识算法实例 136 和 137 的阶段 2 来做到这一点。)一旦选择了这些无操作命令,就可以执行命令 138-140。
- 执行客户端请求的下两个命令
- 特殊的“no-op”命令
已经提到了第二个选项为什么使用 no-op 来填补 paxos events 之间的空白是合法的。
我的问题是关于第一个问题。在我看来,接下来的两个命令会违反一致性,因为后面发生的实例可能具有较小的序列号。那么为什么它仍然是合法的呢?