RAFT:提交条目的条件

时间:2016-05-13 12:54:39

标签: replication distributed-system consensus raft

我一直在阅读关于Raft的几个文档,我得到了关于提交的矛盾信息。我知道一个条目只有在已知存储在大多数服务器中才能提交但是,还有其他条件吗?我已经读过,当前术语的条目也必须存储在每个服务器中,但是其他一些文档对此没有任何说明。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

技术上确实存在于大多数服务器上的条目已提交。 是真的,领导者确定一个条目一旦存储在大多数服务器上,但只在其当前条款中存储,就会被提交。来自另一个术语的条目可以存储在大多数服务器上,但永远不会被提交,之后会被另一个领导者覆盖。这在筏纸中的图8中显示。

这就是为什么领导者必须确保从当前条款开始的条目才能考虑提交先前条款中的任何(附加)条目。一旦领导者当选,该领导者就有可能将先前任期的条目复制到大多数节点而不会被提交。如果该领导者然后崩溃,则可以选择具有来自后期条目的另一个领导者并覆盖存储在大多数群集上的条目。这就是图8中所示的内容,它是承诺的技术定义的原因: 领导者的当前术语中的条目一旦存储在群集的大部分上,就会被提交,并且一旦从领导者的条款中提交了条目,隐含地提交了领导者日志中先前条款的条目。

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