【问题标题】:How raft algorithm maintains strong read consistency in case of a node become leader and it have an uncommitted log entryraft算法如何在节点成为leader并且有未提交的日志条目的情况下保持强读一致性
【发布时间】:2020-12-03 02:47:44
【问题描述】:

考虑五个节点(S1、S2、S3、S4、S5)获取键/值数据。并且发生了以下步骤

  1. S3 成为领导者,客户端向集群写入等于 2 的密钥
  2. S3将entry附加到S1,S2,S4,S5,然后S1,S2,S4,S5接受它并将entry写入自己的日志(如图1所示)
  3. S3 收到多数响应(来自 S1,S2,S4,S5),S3 提交 key 等于 2 的实体,并向客户端发送写入成功消息,然后向 S1,S2,S4,S5 发送提交消息
  4. S2,S4,S5 收到提交消息并提交成功,但 S1 崩溃。就像图 2 中一样,S1 将有一个未提交的条目。
  5. 现在,S1 重新启动并成为一个领导者,其 key 等于 2 的未提交条目(如图 3 所示)

经过以上步骤,客户端查询一个条目(key等于2,刚刚写入成功)。但是现在 S1 是领导者,并且 key equal 2 条目未提交。因此,客户将找不到自己刚才写的条目。那么,我在哪里做错了?请帮我 (图片1) (图二) (图三)

【问题讨论】:

    标签: algorithm consensus raft


    【解决方案1】:

    我在 Diego Ongaro 论文更详细的版本In Search of an Understandable Consensus Algorithm(Extended Version) 中找到了解决方案。在第 8 节(客户端交互)中,我找到了答案, Raft 通过让每个领导者在其开始时向日志中提交一个空白的 no-op 条目来处理这个问题。 在此之后,有问题的 S1 将通过提交一个空白的 no-op 条目来提交日志索引等于 1 条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2023-02-06
      • 2019-05-16
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多