tikv/raft-rs:在 Rust 中实现的 Raft 分布式共识算法源码


在构建分布式系统时,一个主要目标通常是构建容错。也就是说,如果网络中的一个特定节点出现故障,或者存在网络分区,则整个集群不会发生故障。参与分布式共识协议的节点集群必须就价值达成一致,一旦达成该决定,该选择即为最终决定。
分布式共识算法通常采用复制状态机和日志的形式。每个状态机接受来自其日志的输入,并表示要复制的值,例如哈希表。它们允许一组机器作为一个连贯的组工作,可以在其某些成员的失败中幸存下来。
两个著名的分布式共识算法是 Paxos 和 Raft。Paxos 被用在像谷歌的Chubby这样的系统中,而 Raft 被用在像tikvetcd之类的东西中。
Raft 通常被视为比 Paxos 更易于理解和更易于实现。
Raft算法学习可见:分布式系统Raft算法
Raft 通过日志复制状态机。如果可以保证所有机器的日志顺序一致,那么在按顺序应用所有日志后,状态机就会达到一致的状态。
 
一个完整的 Raft 模型包含 4 个基本部分:

  1. Consensus Module,核心共识算法模块;
  2. Log,存放 Raft 日志的地方;
  3. 状态机,保存用户数据的地方;
  4. 传输,用于通信的网络层。

注意:这个 Rust 项目中的 Raft 实现仅包括核心共识模块,不包括其他部分。Raft crate 中的核心共识模块是可定制的、灵活的和有弹性的。您可以直接使用 Raft crate,但您需要构建自己的日志、状态机和传输组件。