#raft-consensus #distributed-consensus #protocols #consistency #log #toy #speed

rast

一个关注速度的raft一致性协议的玩具实现

1个不稳定版本

0.1.0-alpha.02020年6月3日

#1437算法

Apache-2.0

110KB
2.5K SLoC

Rast

Build Status crates.io

Fast. Rust. Raft.

Rast是一个关注稳定状态速度的raft一致性协议的玩具实现。

这是一个概念验证,不适用于生产环境

特性

  • 完全流水线。raft逻辑是非阻塞的,可以在磁盘IO期间继续响应用户请求和时钟滴答。
  • [尚未实现] 无拷贝serde。Kafka正确地将网络格式和磁盘格式设置为相同,这允许使用Linux的zero-copy优化,将传入的网络流量直接复制到磁盘以进行持久化。没有理由Raft日志实现不能以相同的方式工作,io_uring使得这更加容易。
  • [尚未实现] 无分配,懒serde。在稳定状态的热路径中,raft逻辑仅查看每个传入消息的几个字段,但流行的serde实现(如GRPC的Protocol Buffers)要求在整个消息反序列化时进行分配。像Cap’n ProtoFlatBuffers这样的替代线格式避免了这一点。

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之后

  • 快照

依赖关系