async-raft:使用 Tokio 框架实现 Raft 分布式共识协议

22-09-15 banq

速度极快的 Rust、现代共识协议和可靠的异步运行时——该项目旨在为下一代分布式数据存储系统(SQL、NoSQL、KV、流式传输、图形......或者更奇特的东西)提供共识主干)。

这个 crate 与其他 Raft 实现的不同之处在于:
  • 它是完全反应式的并包含异步生态系统。它由系统中发生的实际 Raft 事件驱动,而不是由tick操作驱动。尽可能在复制期间对消息进行批处理以实现最大吞吐量。
  • 存储和网络集成通过两个特征RaftStorage和RaftNetwork. 这为应用程序在选择存储和网络介质方面提供了最大的灵活性。有关详细信息,请参阅指南的存储网络章节。
  • 与 Raft 节点的所有交互都通过一个公共Raft类型很好地定义,该类型用于生成 Raft 异步任务,并与该任务进行交互。该系统的 API 简洁明了。请参阅指南中的章节。
  • 日志复制完全流水线和批处理以获得最佳性能。日志复制还使用拥塞控制机制来帮助尽可能高效地保持节点最新。
  • 它完全支持根据 Raft 规范的动态集群成员更改。请参阅dynamic membership指南中的章节。完全支持领导者下台和非选民同步。
  • 有关初始集群形成的详细信息,以及如何从应用程序的角度有效地做到这一点,在指南的集群形成章节中进行了讨论。
  • 具有快照的自动日志压缩以及从领导节点到跟随节点的快照流是完全支持和可配置的。
  • 整个代码库都配备了跟踪。这可用于标准日志记录分布式跟踪,并且可以在编译时静态配置详细程度,以完全删除配置级别以下的所有检测。

此实现严格遵守Raft 规范(pdf 警告),并且所有数据模型都使用规范中的相同命名法,以便更好地理解。Raft 的这种实现具有涵盖 Raft 集群生命周期的所有方面的集成测试,包括:集群形成、动态成员更改、快照、将数据写入实时集群等。