【问题标题】:What will happen to replicated but uncommited logs in raft protocolraft 协议中复制但未提交的日志会发生什么
【发布时间】:2016-03-12 17:36:34
【问题描述】:

假设一个 3 成员 raft 集群 a[master],b,c

客户端将日志发送到 a,a 将其复制到 b 和 c,a 将日志应用到状态机并响应客户端。 然后 a 在 b 和 c 有机会将提交的状态复制到 b 和 c 之前崩溃。

b 替换 a 作为集群领导者。 当日志已经响应客户端时,未提交的日志会发生什么?

会被 b 再次复制还是直接丢弃?

然后假设一个 4 成员 raft 集群 a[master],b,c,d

客户端将日志发送到 a,a 将其复制到 b 和 c(而不是 d),a 将日志应用到状态机并响应客户端,然后 a 在将提交的状态复制到 b 和 c 之前崩溃,并且d.

d 替换 a 成为集群领导者。那么当日志已经响应客户端时,未提交的日志会发生什么? 它会被丢弃吗?

【问题讨论】:

    标签: consensus raft


    【解决方案1】:

    我认为您将“承诺”与“应用”混淆了。该条目被视为已提交,因为它已保存在大多数服务器中,尽管尚未应用。 B 之所以成为领导者,是因为它的日志是最新的,当它设法应用自己任期内的一个条目时,也会应用来自 A 的那个条目。

    在第二种情况下,D 不能成为领导者,因为它的日志不是最新的,并且 B 和 C 不会授予他们的投票。

    【讨论】:

      【解决方案2】:

      《In Search of an Understandable Consensus Algorithm (Extended Version)》 中的第 5.4.2 节和图 8 讨论了一个更复杂的情况。

      第一季度。任何与leader的CurrentTerm任期不同的未提交日志,只有在提交新日志(日志的任期等于leader的CurrentTerm)时才能应用。否则他们将保持不承诺。

      第二季度。 d 将无法成为领导者。(就像图 8.e 中的 S5)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2011-02-01
        • 2023-02-06
        • 2021-06-26
        • 2011-02-04
        • 2015-07-17
        • 2016-05-23
        • 1970-01-01
        相关资源
        最近更新 更多