A Raft implementation in Rust language. To support this project please give it a ⭐
- Implements all basic Raft features: Replication, Leader Election, Log Compaction, Persistency, Dynamic Membership Change, Streaming Snapshot, etc.
- Based on Tonic and efficient gRPC streaming is fully utilized in log replication and snapshot copying.
- Phi Accrual Failure Detector is used in leader failure detection. This adaptive algorithm lets you not choose a fixed timeout number before deployment and makes it possible to deploy Raft node in Geo-distributed environment. This algorithm is also used in Akka.
- Clear Abstractions: RaftApp is your application or state machine in Raft's context. RaftStorage is the abstraction of the backend storage with which both in-memory and persistent (backed by RocksDB) are supported.
// Implement RaftApp for YourApp!
struct YourApp { ... }
impl RaftApp for YourApp {
...
}
let app = YourApp { ... };
let storage = ...; // Choose a backend from lol_core::storage
let core = RaftCore::new(app, storage, config, ...);
let service = lol_core::make_service(core);
tonic::transport::Server::builder()
.add_service(service)
.serve(socket).await;
- lol-perf: Performance analysis project which utilizes cargo-flamegraph and cargo-profiler.
- lol-book: Documentation project which utilizes mdbook.
Use docker container to make an dev environment on your computer.
make docker-build
to build the docker image./dev
to start the container
then
cargo build
to compile the whole projectmake test
to run the regression testsmake bench
to run the benchmark