Rast

~~F~~ast. R~~u~~st. Ra~~f~~t.
Rast is a toy implementation of the [raft consistency protocol] with a focus on
steady-state speed.
This is a proof of concept and not ready for production use.
Features
- Fully pipelined. The raft logic is non-blocking and can continue to respond to
incoming rpcs and clock ticks during disk IO.
- [Not yet implemented] Zero-copy serde. One thing that [Kafka] got right was
making the network format and the disk format the same. This allowed for use
of the Linux [zero-copy] optimization that copies the incoming network traffic
straight to disk for persistance. There's no reason a Raft log implemenation
couldn't work the same way and io_uring makes this even easier.
- [Not yet implemented] Zero-alloc, lazy serde. The Raft logic in the steady
state hot-path only looks at a couple fields of each incoming message, but
popular serde implementations (like the [Protocol Buffers] of GRPC) require
that an entire message be deserialized and allocate while doing so.
Alternative wire formats like [Cap’n Proto] and [FlatBuffers] avoid this.
v0.1.0-alpha.0
- [x] Replace printlns with log crate
- [x] Resolve all WIP comments
- [x] Audit all TODO comments
- [x] Resolve all ignored tests
- [x] External documentation
- [x] Small cleanups
- [x] Make currenttime an Option
- [x] Structs for {Persist,ReadStateMachine}{Req,Res}
- [x] Clear maxoutstandingreadid when applicable
v0.1.0-alpha.1
- [ ] Handle node restarts
- [ ] Zero-copy message serialization
- [ ] More extensive nemesis testing
- [ ] Initial benchmarking
- [ ] Message idempotency
- [ ] Read-write requests (cput)
- [ ] Handle panics in state machine
- [ ] Audit public interface
- [x] Make logging an optional dependency
- [ ] Clean up log messages
- [ ] Internal documentation
- [ ] Idiomatic rustdoc
v0.1.0
- [ ] Test with [maelstrom]
- [ ] Failure testing
- [ ] Harden public interface
- [ ] Membership changes
After v0.1.0