Raft 如何线性化?

dat*_*ser 4 distributed consensus raft

我对分布式系统还很陌生,想知道 Raft 共识算法是如何线性化的。Raft 通过仲裁提交日志条目。当领导者 Raft 提交时,这意味着超过一半的参与者拥有复制的日志。但可能有一部分参与者没有最新日志,或者他们有日志但没有收到提交这些日志的指示。

或者 Raft 的读取线性化是否需要读取法定人数?

kuu*_*ujo 6

好吧,线性化与读取和写入都有关,是的,两者都是通过法定人数来完成的。为了使读取线性化,读取必须由领导者处理,并且领导者必须在将读取应用到状态机之后但在响应客户端之前验证它没有被较新的领导者取代。但在实践中,许多现实世界的实现使用宽松的一致性模型进行读取,例如允许从追随者读取。但请注意,虽然仲裁保证了 Raft 集群的线性化,但这并不意味着客户端请求是线性化的。为了将线性化扩展至客户端,必须添加会话以防止删除/重复的客户端请求在 Raft 日志中为单个提交生成多个提交,这将违反线性化。

\n

  • 我将 RAFT 论文放在这里:https://raft.github.io/raft.pdf。第 8 节“客户端交互”描述了线性化语义(这正是上面答案中的内容)。请您注意,我建议您阅读整篇 RAFT 论文,它写得很好,很容易理解,同时相对较短(15 页)。 (2认同)