#raft-consensus #raft #distributed-consensus #consensus #data-storage #async-task

async-raft-ext

异步实现的Raft分布式共识协议。在保持rnacos接口不变的情况下,增强了raft的能力。

8个版本

0.6.3 2023年9月26日
0.6.2 2023年9月5日
0.6.2-beta.42023年9月4日

#418 in 异步

Download history 36/week @ 2024-03-14 42/week @ 2024-03-21 83/week @ 2024-03-28 39/week @ 2024-04-04 37/week @ 2024-04-11 23/week @ 2024-04-18 20/week @ 2024-04-25 29/week @ 2024-05-02 38/week @ 2024-05-09 50/week @ 2024-05-16 36/week @ 2024-05-23 30/week @ 2024-05-30 42/week @ 2024-06-06 23/week @ 2024-06-13 23/week @ 2024-06-20 11/week @ 2024-06-27

每月 101 次下载
用于rnacos

MIT/Apache

225KB
3K SLoC

async raft

使用Tokio框架实现的Raft分布式共识协议。请github上给个star!

Build Status Discord Chat Crates.io docs.rs License Crates.io Crates.io



在保持rnacos接口不变的情况下,增强了raft的能力。


闪电般的Rust,现代共识协议和可靠的异步运行时 — 此项目旨在为下一代分布式数据存储系统(SQL、NoSQL、KV、流、图 ... 或可能还有更多异类)提供共识骨干。

指南是开始的最佳地点,然后是文档以获取更深入的细节。

此crate与其他Raft实现的不同之处在于

  • 它是完全反应式的,并拥抱异步生态系统。它由系统中实际发生的Raft事件驱动,而不是由一个tick操作驱动。在复制过程中,尽可能使用消息批处理以实现最大吞吐量。
  • 通过两个trait RaftStorage & RaftNetwork定义了存储和网络集成。这为应用程序提供了在存储和网络介质方面选择的最大灵活性。有关详细信息,请参阅指南中的存储 & 网络章节。
  • 所有与Raft节点的交互都通过一个公共的Raft类型进行定义,该类型用于生成Raft异步任务,并与该任务交互。该系统的API清晰简洁。请参阅指南中的raft章节。
  • 日志复制已完全实现管道化和批量处理,以实现最佳性能。日志复制还使用拥塞控制机制,以尽可能高效地帮助节点保持最新状态。
  • 它完全支持根据 Raft 规范动态更改集群成员。请参阅指南中的dynamic membership章节。它完全支持领导者降级和非投票者同步。
  • 关于初始集群形成以及如何从应用程序的角度有效地执行,请参阅指南中的cluster formation章节。
  • 完全支持带有快照的自动日志压缩,以及从领导者节点到从属节点的快照流。
  • 整个代码库都使用跟踪进行了配置。这可用于标准日志记录或用于分布式跟踪,并且可以在编译时静态配置详细程度,以完全删除配置级别以下的所有跟踪。

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

如果您正在使用此 Raft 实现构建应用程序,请提出一个问题并告诉我!我很乐意将您的项目名称和徽标添加到此项目的用户列表中。

贡献

有关如何开始为此项目做出贡献的更多详细信息,请参阅CONTRIBUTING.md指南。

许可

async-raft 可以根据您的选择在 MIT 许可证或 Apache 许可证 2.0 的条款下获得许可。


注意:此项目中的“章节”符号§的出现是对 Raft 规范特定章节的引用。

依赖项

~4–6.5MB
~109K SLoC