RAFT:提交条目的条件

RAFT: term condition to commit an entry

我一直在阅读一些关于 Raft 的文档,但我得到了关于提交的相互矛盾的信息。我知道一个条目只有在已知存储在大多数服务器中时才能提交,但是还有其他条件吗?我读过,当前学期的条目必须存储在每台服务器中,但其他一些文档对此只字未提。有帮助吗?

存储在大多数服务器上的条目在技术上是不正确的。 正确的是,领导者确定条目一旦存储在大多数服务器上就被提交,但仅限于其当前任期。来自另一个任期的条目可以存储在大多数服务器上,但永远不会被提交,实际上后来会被另一个领导者覆盖。 Raft 论文中的图 8 显示了这一点。

这就是为什么领导者必须确保其当前任期的条目已提交,然后才能考虑提交先前任期的任何(附加)条目。一旦选出领导者,该领导者就有可能将条目从先前的任期复制到大多数节点,而无需提交它们。如果该领导者随后崩溃,则可以选择另一个具有较晚任期条目的领导者,并覆盖存储在集群大部分中的条目。这就是图 8 中所示的内容,这也是承诺的技术定义为: 领导者当前任期中的一个条目一旦存储在集群的大部分中就会被提交,一旦领导者任期中的一个条目被提交,领导者日志中先前任期的所有条目都会被提交。隐式提交。

这实际上意味着当领导者被选举时,它通常会提交一个无操作条目以强制在其当前任期内提交。领导者不会增加其 commitIndex 直到空操作条目存储在大多数服务器上。