Skip to content

1xyz/paxossim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

paxos-simulation

alt text

This is a simple simulation which mimics the working of the Paxos consensus protocol. This is a re-implementation of the code in Paxos Made Moderately Complex – van Resesse 2011, which provides a deep investigation of Paxos.

Summary

Paxos provides a protocol for state machine replication in a distributed asynchronous environment, that allows failures. In essence, it is used to solve a consensus problem in a distributed system. Consensus is the process of agreeing on one result among a group of participants. This problem becomes difficult when the participants or their communication medium may experience failures.

Note: These notes primarily derived from Paxos Made Moderately Complex

Processes

The simulation contains the following participating processes:

  • Client: A client process makes a request to modify or read a state. It broadcasts its request to all replica processes.
  • Replica: A replica process maintains a copy of the application state. Every replica process receives requests from the clients, and asks the leaders to serialize the requests. A consistent serialization provided by this protocol allows all the replicas to see the same sequence. Every replica applies this sequence in order, to its application state.
  • Leader: A leader process receives requests from the replicas. Every leader runs a two phase SYNOD protocol with all the acceptors. The leader has two sub-processes: Scout and the Commander, which participate in phases one and two of the SYNOD protocol with the acceptor respectively.
  • Acceptor: The Acceptor primarily communicates with the scout and commander and maintains its own state. Collectively, it provides the fault tolerant memory of Paxos.

To be resilient to f failures, we need f+1 replicas and leaders and 2f+1 acceptors.

Concepts

  • Command: A globally unique command initiated by a client to a replica identifying a request to modify/read the application state. Represented by a triple {client-id, command-id, operation}, where:
    • client-id is a client unique identifier.
    • command-id is a unique identifier within an individual client's space.
    • operation is the specific operation requested by the client.
  • Slot: A Replica maintains an sequence of slots, which are assigned to commands (A replica "proposes" a command to a slot, a leader "decides" this proposal). This sequence of assignment should be the same across all the replicas as guaranteed by the Paxos protocol.
  • Ballot, Leader maintain ballots. A ballot is a tuple of {number, leader-id}, The ballot must be lexicographically sorted, thereby requiring both the number and leader-id to be lexicographically sorted. This allows ballots to be totally ordered. Ballots are used for voting in the SYNOD protocol.
  • PValue, A triple containing {ballot, slot, command} <b, s, c>, which is used to communicate ballot results from an acceptor to the leader.

Invariants

Invariants for the individual processes.

Replica:

  • R1: There are no two commands decided for the same slot.
    • i.e given two Replicas r1 & r2, two commands c1 and c2. for a given slot s, if r1.Decisions contains (s, c1) and r2.Decisions contains (s, c2), then c1 and c2 are the same command
  • R2: All commands, upto slot_out are the set of decisions.
  • R3: For all replicas r, r.state is essentially the result of applying the commands in the set of decisions (R.Decisions) in order
  • R4: For each replica, r.slot_out cannot decrease over time
  • R5: A replica proposes commands for configuration it knows about.
    • when the slot s is in [slot_in, slot_out+WINDOW)

Acceptor:

  • A1: An Acceptor can only adopt strictly increasing ballot numbers
  • A2: An Acceptor a can only adopt a p-value: <b, s, c> if its currently adopted ballot_number b is the same as that of the p-value.
    • i.e p_value.b = a.b, for <b, s, c> to be accepted
  • A3: An Acceptor a cannot remove values from its accepted list.
    • This is an impractical invariant, since in every phase1 response includes the entire Accepted list to a Scout
  • A4: For any two acceptors a and a', For the same ballot_number, slot_number combination accepted, there can only be one proposed command associated
    • i.e if a.accepted contains <b, s, c> & a'.accepted contains <b, s, c'> then. c = c'
  • A5: If a majority of acceptors have accepted a p-value for the current ballot, slot and command, then any future ballots proposing can only propose the same command and slot combination
    • i.e for a majority of acceptors a. if <b, s, c> are in a.accepted. If a new ballot <b', s, c'> has been accepted for a' then c = c'.

Commander:

  • C1: For any ballot (b) slot (s) combination, atmost one Command (c) is considered. i.e atmost one Commander is spawned for a given <b, s, c>
  • C2: Suppose <b, s, c> is accepted by a majority of acceptors a. Then if a commander is spawned for a <b', s, c'> such that b' > b, then c = c'

Notes: C1 => A4, and C2 => A5, which in turns implies R1.

About

A simulation of Paxos processes

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy