replication - RAFT:提交条目的术语条件

标签 replication distributed-system consensus raft

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

最佳答案

从技术上讲,存储在大多数服务器上的条目都已提交是不正确的。确实,一旦条目存储在大多数服务器上,领导者就决定提交该条目,但仅限于其当前期限内。来自另一个术语的条目可以存储在大多数服务器上,但永远不会被提交,并且实际上后来会被另一个领导者覆盖。这如 Raft 论文中的图 8 所示。

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

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

关于replication - RAFT:提交条目的术语条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37210615/

相关文章:

database - 两阶段提交 : availability, 可伸缩性和性能问题

couchdb 和 futon - 有没有办法取消使用 futon 的连续复制

sqlite - Mono 的复制框架

apache-kafka - 扩展 200 多个 Kafka 主题

java - ZMQ 丢失事件在 jeromq scala 中传播

network-programming - “Gossip about gossip” 协议(protocol)

mysql - 复制从站空间较小

sql - 我可以使用 Developer 版本的 SQL Server 复制组件吗?

algorithm - Lamport 的 Paxos 中的矛盾使简单的论文