https://github.com/imdea-software/swiftpaxos
Prototype implementation of SwiftPaxos (NSDI 2024)
https://github.com/imdea-software/swiftpaxos
concensus distributed-systems key-value-store state-machine-replication
Last synced: about 1 year ago
JSON representation
Prototype implementation of SwiftPaxos (NSDI 2024)
- Host: GitHub
- URL: https://github.com/imdea-software/swiftpaxos
- Owner: imdea-software
- License: mit
- Created: 2023-10-06T13:59:14.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-19T14:23:37.000Z (about 2 years ago)
- Last Synced: 2025-03-27T02:21:16.433Z (about 1 year ago)
- Topics: concensus, distributed-systems, key-value-store, state-machine-replication
- Language: Go
- Homepage:
- Size: 89.8 KB
- Stars: 17
- Watchers: 8
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
SwiftPaxos: Fast Geo-Replicated State Machines
==========
[](https://goreportcard.com/report/github.com/imdea-software/swiftpaxos)
This repository contains the prototype implementation of SwiftPaxos, a new state-machine replication protocol for geo-distributed systems.
SwiftPaxos is a _faster Paxos without compromises_.
In the best case, it executes a state-machine command in two message delays (one round-trip), and three otherwise.
SwiftPaxos was [presented](https://www.usenix.org/conference/nsdi24/presentation/ryabinin) at the 21st USENIX Symposium on Networked Systems Design and Implementation ([NSDI '24](https://www.usenix.org/conference/nsdi24)).
Installation
------------
git clone https://github.com/imdea-software/swiftpaxos.git
cd swiftpaxos
go install github.com/imdea-software/swiftpaxos
Implemented protocols
---------------------
| Protocol | Comments |
|-------------------------|---------------------------------------------------|
| SwiftPaxos | See our NSDI'24 [paper](https://www.usenix.org/conference/nsdi24/presentation/ryabinin) for the full details.|
| Paxos | The classic Paxos protocol. |
| N2Paxos | All-to-all variant of Paxos. |
| CURP | CURP implemented over N2Paxos. |
| Fast Paxos | Fast Paxos with uncoordinated collision recovery. |
| EPaxos | A [corrected][epaxos_correct] version of EPaxos. |
This software is based on the [Egalitarian Paxos](https://github.com/otrack/epaxos) code base, as well as the corrections made [here](https://github.com/otrack/epaxos).
Usage
-----
#### participants
There are three types of participants: *master*, *servers* and *clients*.
The servers and clients implement the protocol logic.
The master maintains the configuration of the system.
#### deployment configuration
To setup a run, the participants read deployment configuration file.
See [aws.conf][config] for an example of configuration file for AWS EC2.
#### launching a participant
Master:
swiftpaxos -run master -config conf.conf
Server:
swiftpaxos -run server -config conf.conf -alias server_name
Client:
swiftpaxos -run client -config conf.conf -alias client_name
#### command line options
-alias alias
An alias of this participant
-config file
Deployment config file (required)
-latency file
Latency config file
-log file
Path to the log file
-protocol protocol
Protocol to run. Overwrites protocol field of the config file
-quorum file
Quorum config file
-run participant
Run a participant
See [quorum.conf][quorum] and [latency.conf][latency] for an example of quorum and latency configuration files.
Flint
-----
To have an idea on how different replication protocols would compare, we wrote a tool named [Flint][flint].
Flint takes as input a set of AWS regions.
It computes the expected latencies and estimates how the protocols perform in such a deployment.
[config]: aws.conf
[epaxos_correct]: https://github.com/otrack/on-epaxos-correctness
[quorum]: quorum.conf
[latency]: latency.conf
[flint]: https://github.com/vonaka/flint