We introduce Rabia, a simple and high performance framework for implementing state-machine replication (SMR) within a datacenter. The main innovation of Rabia is in using randomization to simplify the design. Rabia provides the following two features: (i) It does not need any fail-over protocol and supports trivial auxiliary protocols like log compaction, snapshotting, and reconfiguration, components that are often considered the most challenging when developing SMR systems; and (ii) It provides high performance, up to 1.5x higher throughput than the closest competitor (i.e., EPaxos) in a favorable setup (same availability zone with three replicas) and is comparable with a larger number of replicas or when deployed in multiple availability zones.
Our SOSP paper, "Rabia: Simplifying State-Machine Replication Through Randomization," describes Rabia's design and evaluations in detail (SOSP Artifact Review Summary) and earns three badges: artifact available, artifact evaluated, and artifact reproduced.
- state-machine replication (SMR), consensus, and formal verification
- Computer systems organization → Dependable and fault-tolerant systems and networks;
- Computing methodologies → Distributed algorithms.
- deployment, internal, roles, and
main.go
: Rabia's implementation in Go and the project's auxiliary code - proofs: proof scripts for the core weak Multivalued consensus part of the Rabia protocol.
- redis-raft: redis-raft related code and instructions
- epaxos: compiled binaries of Paxos and EPaxos for cloudlab machines from various branches in (E)Paxos and (E)Paxos-NP codebases + scripts to run them
- docs: documentations, see below
Paper errata -- Errata of our paper
How to install and run Rabia -- install and run Rabia on a single machine or a cluster of machines
How to read Rabia's codebase -- an introduction to Rabia's implementation
Package-level comments -- contains all Go packages' comments, some design assumptions and rationales, which can be served as an in-depth guide to this codebase.
Rabia's Roadmap and ToDos -- for overarching objectives and and granular items
Developer notes -- contains FAQs and some miscellaneous hints for developers
Lewis Tseng, Joseph Tassarotti, Haochen Pan, Jesse Tuğlu, Neo Zhou, Tianshu Wang, Yicheng Shen, Andrew Chapman and Matthew Abbene -- Boston College
Roberto Palmieri -- Lehigh University
Zheng Xiong -- The University of Texas at Austin