1个不稳定版本
0.1.0-alpha.0 | 2020年6月3日 |
---|
#1437 在 算法
110KB
2.5K SLoC
Rast
Fast. Rust. Raft.
Rast是一个关注稳定状态速度的raft一致性协议的玩具实现。
这是一个概念验证,不适用于生产环境。
特性
- 完全流水线。raft逻辑是非阻塞的,可以在磁盘IO期间继续响应用户请求和时钟滴答。
- [尚未实现] 无拷贝serde。Kafka正确地将网络格式和磁盘格式设置为相同,这允许使用Linux的zero-copy优化,将传入的网络流量直接复制到磁盘以进行持久化。没有理由Raft日志实现不能以相同的方式工作,io_uring使得这更加容易。
- [尚未实现] 无分配,懒serde。在稳定状态的热路径中,raft逻辑仅查看每个传入消息的几个字段,但流行的serde实现(如GRPC的Protocol Buffers)要求在整个消息反序列化时进行分配。像Cap’n Proto和FlatBuffers这样的替代线格式避免了这一点。
v0.1.0-alpha.0
- 用log crate替换printlns
- 解决所有WIP评论
- 审核所有TODO评论
- 解决所有未检查的测试
- 外部文档
- 小清理
- 将current_time改为Option
- 为{Persist,ReadStateMachine}{Req,Res}创建结构体
- 在适用时清除max_outstanding_read_id
v0.1.0-alpha.1
- 处理节点重启
- 持久化硬状态
- 零拷贝消息序列化
- 更广泛的敌对测试
- 初步基准测试
- 消息幂等性
- 读写请求(cput)
- 处理状态机的panic
- 审核公共接口
- 将日志记录作为可选依赖项
- 清理日志消息
- 内部文档
- 惯用的rustdoc
v0.1.0
- 用maelstrom进行测试
- 失败测试
- 强化公共接口
- 成员变更
在v0.1.0之后
- 快照