In the presence of network partition, one has to choose between consistency and availability (tradeoff).
- Consistency: Every read receives the most recent write or an error
- Availability: Every request receives a (non-error)response - without the guarantee that it contains the most recent write
- Partition tolerance: The system continues to operate despite an arbitrary number of messages being dropped(or delayed) by the network between nodes
All non-faulty processes decide the same value(data consistency)
- synchronous model
- asynchronous model
You can't do agreement in an AsynchronousMessagePassing system if even one crash failure is allowed, unless you argument the basic model in some way, e.g. by adding randomization or failure detectors.
- faulty processor
- Byzantine faults, weakest type of failure and the most difficult kind to deal with. Allow arbitrary failures including malicious faults
- failure to return a result
- return of an incorrect result
- return differing results to different parts of the system
- Paxos
- Raft
- Byzantine Paxos
- Practical Byzantine Fault Tolerance Algorithm (PBFT)
- Zyzzyva
- Aardvark
- RBFT
- [Bitcoin POW]
- Cuckoo Cycle adopted by aternity
- Equihash adopted by Zcash
openness | throughput | fault tolerance | Consumption | latency | |
---|---|---|---|---|---|
2PC | NO | Good | |||
Paxos | Bad | Good | |||
Raft | Bad | Good | |||
PBFT | Bad | Good | |||
POW | Good | Bad | |||
POS | Good | Bad | |||
DPOS | Medium | Medium | |||
Ouroborous | Good | Medium |