QuePaxa is a novel crash fault tolerant and asynchronous consensus algorithm.
The main innovations of QuePaxa, compared to the existing consensus algorithms such as Multi-Paxos, Raft, Rabia and EPaxos are threefold:
QuePaxa employs a new asynchronous consensus core to tolerate adverse network conditions, while having a one-round-trip fast path under normal-case network conditions.
QuePaxa employs hedging-delay instead of traditional timeouts. Hedging delays can be arbitrarily configured in QuePaxa, without affecting the liveness,
whereas for Raft and Multi-Paxos, a conservatively high timeout should be used to ensure liveness.
QuePaxa dynamically tunes the protocol at runtime to maximize the performance.
Our SOSP paper, QuePaxa: Escaping the tyranny of timeouts in consensus describes QuePaxa's design and evaluation in detail.
state-machine replication (SMR),consensus, asynchrony, randomization, tuning, and hedging
client/, common/, configuration/, proto/, replica/ provide the QuePaxa replica and submitter implementations in Go-lang.
integration-test/ contains the set of integration tests that test the correctness of QuePaxa in a single machine deployment with 5 replicas and 5 clients under different
configuration parameters.
experiments/: contains the automated scripts for artifact evaluation and the compiled binaries of Epaxos, Multi-paxos, Raft, Rabia and QuePaxa.
how to build, install and run QuePaxa in a single VM
how to read QuePaxa codebase
In this section, we explain how to build, install and run QuePaxa in a single VM
sudo accesspython3 installed with numpy and matplotlibpython pip3, matplotlib and go 1.19.5sudo apt update
sudo apt install python3-pip; pip3 install matplotlib
rm -rf /usr/local/go
wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
Check if the installation is successful by issueing the command: go version
which should output go1.19.5 linux/amd64.
This repository uses Protocol Buffers. Install the protoc compiler by following the Protocol Buffers.
git clone https://github.com/dedis/quepaxa
cd quepaxa
/bin/bash build.sh
build.sh will produce an error protoc: command not found, if you have not installed the protoc compiler correctly.
NOTE: The outputs might show raxos and QuePaxa interchangeably. This is because, QuePaxa code was initially named Raxos and later renamed to QuePaxa.
50k cmd/sec aggregate arrival rate/bin/bash integration-test/safety-test.sh 200000 0 0 1 5000 50 10000 100 0 0
If the test was successful, the final outputs should look like the following.
In the logs/200000/0/0/1/5000/50/10000/100/0/0/ folder, you can see the output of 5 replicas (1-5.log) and 5 submitters (21-25.log).
Submitter logs contain the median latency, throughput and 99 percentile latency statistics.
A sample client output at logs/200000/0/0/1/5000/50/10000/100/0/0/21.log
``` initialized client 21 with process id: 31567 starting request client Finish sending requests Calculating stats for thread 0 Total time := 60 seconds Throughput := 10026 requests per second Median Latency := 5201 micro seconds per request 99 pecentile latency := 19635 micro seconds per request Error Rate := 0
finishing request client ```
A sample replica output at logs/200000/0/0/1/5000/50/10000/100/0/0/1.log
started QuePaxa Server
Average number of steps per slot: 1.000000, total slots 10183, steps accumilated 10183
The log consistency (SMR correctness) can be found in the file logs/200000/0/0/1/5000/50/10000/100/0/0/consensus.log
```
60150596 entries match
0 entries miss match
TEST PASS ```
QuePaxa under different configuration parameterspython3 integration-test/python/integration-automation.py
The integration tests consists of 9 tests, each of which exercise QuePaxa under different leader modes, timeouts and network conditions, using 5 replicas and 5 submitters setup in a single VM.
In the logs/ folder you will find the log files corresponding to each test.
Each subdirectory of logs/ is indexed as logs/leaderTimeout/serverMode/leaderMode/pipeline/batchTime/batchSize/arrivalRate/closeLoopWindow/requestPropagationTime/asynchronousSimulationTime/
Please cross-check with the integration-test/python/integration-automation.py file to see what parameters are used in each integration subtest, that will help you to locate the output sub-folder in the logs/
In the following section, we outline the QuePaxa implementation architecture and the package level comments
that will allow you to understand the QuePaxa code base.

Above figure depicts the QuePaxa architecture. QuePaxa contains two separate binaries;
the client (submitter in the paper) and the replica.
QuePaxa client is the program that generates a stream of client requests to be consumed by the replica nodes.
QuePaxa client supports the following configuration parameters.
QuePaxa client connects with all the QuePaxa replicas using TCP connections.
QuePaxa replica implements the QuePaxa consensus algorithm and the state machine replication logic.
QuePaxa replica supports the following configurations.
configuration/local/configuration.yml)QuePaxa replica consists of three layers: Proxy, Proposer and Recorder.
Proxy: Proxy maintains the state machine replication logic.
Proxy receives client commands from the clients using TCP connections and forms a replica batch,
to be consumed by the proposers.
Proxy then sends the replica batches to the proposer.
Upon reaching consensus, Proposer sends back the agreed upon value to the Proxy
and the Proxy updates the state machine. Then the proxy sends back the response to the client.
Proposer: Proposer is the implementation of the proposer segment of QuePaxa,
as described in our SOSP paper: QuePaxa: Escaping the tyranny of timeouts in consensus.
Proposer communicates with all the recorders of all replicas using gRPC.
Recorder: Recorder is the implementation of the Interval summary register as described in the our paper.
Recorder responds to proposer requests.
client/: contains the client implementation.
The request sending logic is in request.go and the statistic calculation logic is in stat.go
common/: contains go structs that are both common to replica and client
configuration/: contains the code to extract configuration data from a .yaml file into a
cfg object.
experiments/: contains the AWS deployment scripts for the artifact evaluation.
More on this is available in the artifact evaluation document.
integration-test/: contains the integration tests for QuePaxa.
proto/: contains the proto definitions of client messages
replica/: contains the QuePaxa replica logic. proposer.go and recorder.go contain the
proposer and the ISR logics, respectively.
build.sh/: contains the build script
$ claude mcp add quepaxa \
-- python -m otcore.mcp_server <graph>