1 个不稳定版本
0.6.1 | 2024年2月14日 |
---|
#854 in 异步
225KB
3K SLoC
async raft
快速的 Rust、现代共识协议和可靠的异步运行时 —— 本项目旨在为下一代分布式数据存储系统(SQL、NoSQL、KV、流、图……或者可能是更奇特的东西)提供共识框架。
指南 是开始的最佳地方,之后可以查看 文档 以获取更深入的信息。
此 crate 与其他 Raft 实现的不同之处在于
- 它是完全反应性的,并拥抱异步生态系统。它由系统中实际发生的 Raft 事件驱动,而不是由
tick
操作驱动。在复制消息期间尽可能使用批处理以提高吞吐量。 - 通过两个特质
RaftStorage
&RaftNetwork
对存储和网络集成进行了良好定义。这为应用程序提供了最大灵活性,以便能够选择它们的存储和网络介质。有关详细信息,请参阅指南中的 存储 & 网络 章节。 - 所有与 Raft 节点的交互都通过一个单独的公共
Raft
类型进行定义,该类型用于启动 Raft 异步任务,并与之交互。此系统的 API 清晰简洁。请参阅指南中的 raft 章节。 - 日志复制完全流水线和批处理以提高性能。日志复制还使用拥塞控制机制,以尽可能高效地帮助节点保持最新状态。
- 它完全支持根据Raft规范动态更改集群成员资格。请参阅指南中的
dynamic membership
章节。完全支持领导者降级和非投票者同步。 - 指南中的“集群形成”章节讨论了初始集群形成的细节以及如何从应用程序的角度有效实现。
- 支持使用快照进行自动日志压缩,以及从领导者节点到跟随者节点的快照流。
- 整个代码库都带有跟踪功能。这可以用于标准日志记录,或用于分布式跟踪,并且可以在编译时静态配置详细程度以完全删除配置级别以下的所有跟踪。
此实现严格遵循Raft规范(pdf警告),并且所有数据模型都使用规范中找到的相同命名法以提高可理解性。Raft的此实现包含集成测试,覆盖Raft集群生命周期的所有方面,包括:集群形成、动态成员资格更改、快照、将数据写入活动集群等。
如果您正在使用此Raft实现构建应用程序,请提出一个问题并告诉我!我很乐意将您的项目名称和徽标添加到本项目中的用户列表中。
贡献
有关开始为此项目做出贡献的更多详细信息,请参阅CONTRIBUTING.md指南。
许可协议
async-raft采用MIT许可证或Apache许可证2.0的条款,由您选择。
注意:本项目中使用的“章节”符号§
是对Raft规范特定章节的引用。
依赖项
~4–6MB
~103K SLoC