lol
A Raft implementation in Rust language. To support this project please give it a ⭐
Features
- 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.
Usage
Add this to your Cargo.toml
.
[dependencies]
lol-core = "0.9"
Available feature flags:
simple
: EnablesSimpleRaftApp
.gateway
: EnablesGateway
to interact with the cluster.rocksdb-backend
: Enables RocksDB-backedRaftStorage
.
Example
// Implement RaftApp for YourApp!
// Initialize your app.
let app = YourApp ;
// Choose a backend.
let storage = new;
// This is the Id of this node.
let uri = "https://192.168.10.15:50000".parse.unwrap;
let config = default.build.unwrap;
// Make a tower::Service.
let service = make_raft_service;
// Start a gRPC server with the service.
builder
.add_service
.serve.await;
Related Projects
- lol-perf: Performance analysis project which utilizes cargo-flamegraph and cargo-profiler.
- phi-detector: Implementation of Phi Accrual Failure Detector.
Development
Use docker container to make an dev environment on your computer.
make
to build the docker image./dev
to start the dev container
then
cargo build
to compile the entire projectmake test
to run the regression testsmake bench
to run the benchmark tests