我正在学习 Paxos 算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf),有一点我不明白。
我们知道事件遵循及时的顺序,并且它发生在例如事件 1-5 和 10 已决定,但之后的 6-9 和 11 尚未决定时。在上面的论文中,它说我们只是用无操作值填充 6-9 之间的空白,并简单地记录从 11 开始的新事件。
所以在这种情况下,由于已经记录了事件 10,我们知道在 5 到 10 之间肯定发生了某些类型的事件,但由于某些故障而没有被 Paxos 记录。如果我们简单地填写 no-op 值,这些事件将在我们的记录中丢失。
更糟糕的是,如果正如我上面链接的论文所说,事件实际上是来自客户端的命令,那么中间缺少一些命令可能会使整个操作集非法(如果不能跳过任何命令或命令其中很重要)。
那么为什么 Paxos 为事件之间的间隙填充 no-op 值仍然是合法的呢?(如果整个记录集可能由于我上面提到的 no-op 值而无效。)另外,有没有更好的方法来从这些间隙中恢复而不是使用 no-op?