Summerset is a distributed, replicated, protocol-generic key-value store supporting a wide range of state machine replication (SMR) protocols for research.
Reference:
@phdthesis{
author = {Hu, Guanzhou},
year = {2025},
title = {Cloud Consensus Protocols With Optimistic Connectivity},
journal = {ProQuest Dissertations and Theses},
pages = {275},
keywords = {Cloud storage; Consensus protocols; Distributed systems; Formal methods; Optimistic connectivity; Computer science; Computer engineering; Information technology; 0489:Information Technology; 0984:Computer science; 0464:Computer Engineering},
isbn = {9798286499199},
language = {English},
url = {https://www.proquest.com/dissertations-theses/cloud-consensus-protocols-with-optimistic/docview/3228170052/se-2},
note = {Copyright - Database copyright ProQuest LLC; ProQuest does not claim copyright in the individual underlying works; Last updated - 2025-08-01},
}List of currently implemented protocols...
| Protocol | Description | Link |
|---|---|---|
RepNothing |
Simplest protocol with no replication | - |
SimplePush |
Pushing to peers w/o consistency guarantees | - |
ChainRep |
Bare implementation of Chain Replication | paper |
MultiPaxos |
Classic MultiPaxos w/ modern features | paper |
EPaxos |
Leaderless-style Egalitarian Paxos | paper |
Raft |
Raft with explicit log and strong leadership | paper |
RSPaxos |
MultiPaxos w/ RS erasure code sharding | paper |
CRaft |
Raft w/ erasure code sharding and fallback | paper |
Crossword |
Quorum-shards tradeoff for dynamic payloads | tba |
QuorumLeases |
Local reads at leaseholders when quiescent | paper |
Bodega |
Always-local linearizable reads via roster leases | tba |
Formal TLA+ specification of some protocols are provided in tla+/.
More exciting protocols, old and new, are actively being added!
Why is Summerset different from other codebases...
- Async Rust: Summerset is written in Rust and demonstrates an orderly usage of async programming structures backed by the
tokioframework for distributed replication. - Channel/event-based: Summerset adopts a channel-oriented, event-based system architecture; each replication protocol is basically just a set of event handlers plus a
tokio::select!loop. The entire codebase contains 0 explicit usage ofMutex. - Modularized: Common components of a distributed KV store, e.g. network transport and durable logger, as well as protocol-specific parallelism tasks, are cleanly separated from each other and connected through channels. This extends Go's philosophy of doing "synchronization by (low-cost) communication (of ownership transfers)".
- Protocol-generic: With the above points combined, Summerset is able (and strives) to support a set of different replication protocols in one codebase, with common functionalities abstracted out, leaving each protocol's implementation concise and to-the-point.
These design choices make protocol implementation in Summerset rather straight-forward and understandable, without making a sacrifice on performance.
Comments / issues / PRs / usage in your own projects are always welcome!
Install the latest Rust toolchain if haven't. For *nix:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shBuild everything in debug or release (-r) mode:
cargo build [-r] --workspace [--features ...]Run all unit tests:
cargo test --workspaceGenerate & open documentation for the core library in browser:
cargo doc --openSummerset currently assumes a Linux environment and is tested on Ubuntu 24.04.
First, launch the cluster manager oracle (which only serves setup & testing purposes and does not participate in any of the protocol logic):
cargo run [-r] -p summerset_manager -- -hThen, launch server replica executables:
cargo run [-r] -p summerset_server -- -hThe default logging level is set as >= info. To display debugging or even tracing logs, set the RUST_LOG environment variable to debug or trace, e.g.:
RUST_LOG=debug cargo run ...To run a client endpoint executable:
cargo run [-r] -p summerset_client -- -hCurrently supported client utility modes include: repl for an interactive CLI, bench for performance benchmarking, tester for correctness testing, and mess for one-shot injection.
Some helper scripts for running Summerset processes are provided. First, install uv and set up the environment:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv syncYou can find the scripts for running Summerset processes locally in scripts/; use with:
uv run -m scripts.local_cluster.py -h
uv run -m scripts.local_clients.py -hAnd for a set of distributed machines (requiring correctly filled scripts/remote_hosts.toml file):
uv run -m scripts.distr_cluster.py -h
uv run -m scripts.distr_clients.py -hNote that these scripts use sudo and assume specific ranges of available ports, so a Linux server machine environment is recommended.
Please check out the Issues page for to-do items planned for the codebase.
Lore: Summerset Isles is the name of an elvish archipelagic province in the Elder Scrolls series. The name also sounds like "a set of SMRs".