Skip to content

dragonboy1994/paxos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Paxos

Paxos is a Rust implementation for multi-Paxos protocol without crash failures. The original Paxos was proposed by Leslie Lamport in his landmark paper Part-time parliament. The Paxos variant that this repository implements is from the paper called Paxos made moderately complex (PMMC) .

Note that the code in the repo can't handle crash failures yet -> in the context of PMMC, there is no functionality for handling config commands. I may add it later if this repo gets enough attention.

Execution

Run them with Cargo:

cargo run 

Directory Structure

  • src/
    • main.rs The main file that sets the environment description.
    • lib.rs Constructs all the control channels, mpsc and broadcast channels.
    • utils.rs All the message formats, ballots, pvalues.
    • broadcast_channel.rs Cosntructs the broadcast channels.
    • client.rs Constructs the thread for the clients.
    • replica.rs Constructs the thread for the replicas.
    • leader.rs Constructs the thread for the leaders.
    • scout.rs Constructs the thread for the scouts.
    • commander.rs Constructs the thread for the commanders.
    • acceptor.rs Constructs the thread for the acceptors.

Approach I took

Generally, repos don't describe how codebase has been written. In a break from that tradition, this section will describe the approach I took in building this repository. Hopefully, this well serve as a good map for someone else who also wants to build Paxos consensus from scratch.

  • Add multiple leaders and one receiver and broadcast channel from receiver to leaders - this channel is just communicating simple u8 messages
  • Add multiple replica
  • Add client, add broadcast channels from client to replicas, modify replicas so that the replicas broadcast the messages received from the client - these channels are just communicating simple u8 messages
  • Add acceptors and communication channels from leaders to acceptors - these channels are just communicating simple u8 messages
  • Write message structs, ordering of ballots
  • Add reverse channels - add mpsc channel from replica to client, added broadcast channel from leader to replica
  • Add reverse channels - add mpsc channel from acceptors to leaders
  • Update the commands sent by clients
  • Change the broadcast channel from client to the replicas - messages will be Request
  • Update the replica context
  • Change the broadcast channel from leader to the replicas - messages will be P1a, P2a
  • Propose added in replica, scout to acceptor broadcast channel added
  • Work on acceptor’s message processing -> added processing of both P1a and P2a, added new communication channels
  • Add scouts and add dynamic broadcast channels from leader to their respective scouts
  • Add commanders and add dynamic broadcast channels from leader to their respective commanders
  • Add acceptors and communication channels from scouts/commanders to acceptors

Some References

  1. The original Paxos paper by Lamport in Part-time parliament
  2. The paper this implementation follows is Paxos made moderately complex

About

Building Paxos backend in Rust

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages