如何解决在节点成为领导者且日志条目未提交的情况下,筏算法如何保持强读取一致性
考虑五个节点(S1,S2,S3,S4,S5)获取键/值数据。然后发生了以下步骤
- S3成为领导者,客户端向集群写入等于2的密钥
- S3将条目追加到S1,S2,S4,S5,然后S1,S2,S4,S5接受并将其写入自身日志(如图1所示)
- S3收到多数响应(来自S1,S2,S4,S5),键等于2的S3提交实体,向客户端发送写成功消息,然后向S1,S2,S4,S5发送提交消息
- S2,S4,S5收到提交消息并提交成功,但S1崩溃了。就像图2中一样,S1将具有未提交的条目。
- 现在,S1重新启动并成为密钥等于2的未提交条目的领导者(如图3所示)
完成上述步骤后,客户端查询一个条目(键等于2,刚写成功)。但是现在S1是领导者,并且密钥等于2的条目未提交。因此,客户将找不到自己之前写的条目。那么,我在哪里弄错了?请帮我 (图片1) (图2) (图3)
解决方法
我在Diego Ongaro论文中找到了更详细的版本In Search of an Understandable Consensus Algorithm(Extended Version)的解决方案。在第8节(客户互动)中,我找到了答案, 筏通过让每个领导者在其开始时在日志中提交一个空白的无操作条目来解决此问题 之后,有问题的S1将通过提交空白的无操作条目来提交等于1项的日志索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。