Distributed system 当我采用筏式';s";从不通过计数副本提交以前条款中的日志条目”;在这种情况下,你能统治吗?

Distributed system 当我采用筏式';s";从不通过计数副本提交以前条款中的日志条目”;在这种情况下,你能统治吗?,distributed-system,consensus,raft,Distributed System,Consensus,Raft,我目前正在自己实现Raft共识算法,我遇到了以下问题。 考虑有4个节点(A,B,C和D),因此日志条目可以提交超过2票。现在我们启动集群,并用term=0选出一位领导者。然后会发生以下情况: 从动件B/D断开 引线A创建LogEntryX 引线A尝试复制到所有节点,但最终失败,因为只有2个节点(A和C) 节点B重新连接并超时,它将使用新的term=1启动一个选择 节点A失去了领导地位,因为它收到了节点B的RequestVoteRPC 节点B无法赢得选举,因为它没有LogEntryX。因此集群中没

我目前正在自己实现Raft共识算法,我遇到了以下问题。 考虑有4个节点(A,B,C和D),因此日志条目可以提交超过2票。现在我们启动集群,并用
term=0
选出一位领导者。然后会发生以下情况:

  • 从动件B/D断开
  • 引线A创建
    LogEntry
    X
  • 引线A尝试复制到所有节点,但最终失败,因为只有2个节点(A和C)
  • 节点B重新连接并超时,它将使用新的
    term=1
    启动一个选择
  • 节点A失去了领导地位,因为它收到了节点B的
    RequestVote
    RPC
  • 节点B无法赢得选举,因为它没有
    LogEntry
    X。因此集群中没有领导者
  • 节点超时并再次被选为领导者
  • 领导A成功地将
    LogEntry
    X复制到B
  • 现在节点A/B/C具有完全相同的
    LogEntry
    X,即
    (index=0,term=0)
    。然而,根据Raft文件,领导者A不能提交X,尽管它是自己生成的,并且大多数人同意X

    Raft从不通过计数提交以前术语中的日志条目 复制品。仅显示领导当前任期中的日志条目 通过计算副本来实施

  • 假设不再有来自客户端的
    LogEntry
    s要复制,因此
    LogEntry
    X保持未提交状态
  • 我的问题是:

  • 这真的是个问题吗
  • 有什么解决办法吗? 事实上,已经有一些关于SoF的帖子强调了这一规则的重要性。在这里,它似乎说我们可以创建X的一个拷贝Y,然后复制Y。它有效吗,或者可能存在一个共同的解决方案
  • 没有

  • 对。在本文第13页,您有以下内容:

  • 领导者的完备性 属性保证引线具有所有提交的条目,但在其任期开始时,它可能不知道是哪个条目 那些是。要找到答案,它需要从提交一个条目 它的期限。Raft通过让每个领导者在其任务开始时向日志中提交一个空白的禁止操作条目来处理此问题 术语

    在您的情况下,在步骤7之后,
    A
    将创建一个
    NoOp
    日志条目,它将成功地复制它,提交它,从而提交所有以前的条目

  • 没有

  • 对。在本文第13页,您有以下内容:

  • 领导者的完备性 属性保证引线具有所有提交的条目,但在其任期开始时,它可能不知道是哪个条目 那些是。要找到答案,它需要从提交一个条目 它的期限。Raft通过让每个领导者在其任务开始时向日志中提交一个空白的禁止操作条目来处理此问题 术语

    在您的情况下,在步骤7之后,
    A
    将创建一个
    NoOp
    日志条目,它将成功地复制它,提交它,从而提交所有以前的条目