37 个版本
新增 0.9.14 | 2024 年 8 月 23 日 |
---|---|
0.9.13 | 2024 年 6 月 21 日 |
0.9.11 | 2024 年 5 月 20 日 |
0.9.3 | 2024 年 3 月 21 日 |
0.6.4 | 2022 年 1 月 3 日 |
#43 在 异步 中排名
每月 2,756 次下载
在 7 crate 中使用
1MB
21K SLoC
该项目旨在改进 Raft,使其成为分布式数据存储系统(SQL、NoSQL、KV、Streaming、Graph 等)下一代共识协议。
目前,openraft 是 databend 元服务集群的共识引擎。
-
🚀 开始使用
- Openraft 指南 是最佳入门点,
- Openraft 文档 提供更深入的细节,
- Openraft 常见问题解答 解释了一些常见问题。
-
🙌 有问题吗?
无论你的风格如何,我们都在这里支持你。 🚀 一起创造一些精彩吧!
- Openraft 是从 async-raft 衍生而来的,修复了几个错误: 修复的错误。
状态
- 构建应用程序的功能几乎完整。
- 性能:单个写入者支持每秒70,000次写入,256个写入者支持每秒1,000,000次写入。参见:性能
- 单元测试覆盖率达到了92%。
- 混沌测试尚未完成,需要进一步测试以确保应用程序的健壮性和可靠性。
API 状态
-
Openraft API 还未稳定。在
1.0.0
之前,升级可能包含不兼容的更改。查看我们的 变更日志。提交信息以关键字开头,表示提交的修改类型。DataChange:
磁盘上的数据类型更改,可能需要手动升级。Change:
如果引入了不兼容的更改。Feature:
如果引入了兼容的非破坏性新功能。Fix:
如果只是修复了bug。
版本
-
main 分支正在积极开发中。主分支是用于 release-0.10 的。
-
release-0.9 分支:最新版本:( v0.9.0 | 变更日志 ); 升级指南:⬆️ 从 0.8 升级到 0.9;
release-0.9
不会接受新功能,只会修复bug。 -
release-0.8 分支:最新版本:( v0.8.8 | 变更日志 ); 升级指南:⬆️ 从 0.7 升级到 0.8,⬆️ 从 0.8.3 升级到 0.8.4;
release-0.8
不会接受新功能,只会修复bug。 -
release-0.7 分支:最新版本:( v0.7.6 | 变更日志 ); 升级指南:⬆️ 从 0.6 升级到 0.7;
release-0.7
不会接受新功能,只会修复bug。 -
release-0.6 分支:最新版本:( v0.6.8 | 变更日志 );
release-0.6
不会接受新功能,只会修复bug。
路线图
- 2022-10-31 扩展联合成员资格
- 2023-02-14 在选举时最小化冲突率;参见:Openraft 投票设计;或者使用带有 功能标志
single-term-leader
的标准 raft 模式。 - 2023-04-26 目标性能为每秒1,000,000次 put。
- 简化投票和预投票的复杂性:移除预投票 RPC。
- 支持灵活的法定人数,例如: 分层法定人数
- 考虑引入读取法定人数和写入法定人数,在节点数量为偶数的集群中提高效率。
性能
基准测试专注于Openraft框架本身,在最小化的存储和网络环境下运行。这不是真实世界的应用基准测试!!!
客户端 | put/s | ns/op |
---|---|---|
256 | 1,014,000 | 985 |
64 | 730,000 | 1,369 |
1 | 70,000 | 14,273 |
有关基准测试的详细信息,请访问./cluster_benchmark文件夹。
特性
- 异步和事件驱动:基于Raft事件进行操作,不依赖于周期性滴答,优化消息批量处理以提高吞吐量。
- 可扩展的存储和网络:通过
RaftLogStorage
、RaftStateMachine
和RaftNetwork
特质进行自定义,允许灵活选择存储和网络解决方案。 - 统一的Raft API:提供单个
Raft
类型以创建和与Raft任务交互,API简单直观。 - 集群形成:提供初始集群设置的策略,详细内容请参考集群形成指南。
- 内置跟踪工具:代码库集成了tracing进行日志记录和分布式跟踪,可以在编译时设置详尽程度级别。
功能
- ✅ 领导者选举:通过策略或手动(
trigger_elect()
)。 - ✅ 非投票者(学习者)角色:请参阅
add_learner()
。 - ✅ 日志压缩(状态机的快照):通过策略或手动(
trigger_snapshot()
)。 - ✅ 快照复制。
- ✅ 动态成员资格:使用联合成员资格配置更改。请参阅动态成员资格
- ✅ 可线性读:
ensure_linearizable()
。 - ⛔️ 不支持:单步配置更改。
- ✅ 切换心跳/选举:
enable_heartbeat
/enable_elect
。 - ✅ 手动触发快照/选举:
trigger_snapshot()
/trigger_elect()
。 - ✅ 通过策略或手动清除日志:
purge_log()
。
谁在使用它
贡献
有关如何为该项目做出贡献的详细信息,请参阅CONTRIBUTING.md指南。
贡献者
Made with contributors-img.
许可证
Openraft 采用 MIT 许可协议 或 Apache License 2.0,您可任选其一。
依赖项
~6–8.5MB
~143K SLoC