Designing Data-Intensive Applications - Chapter 9 - Consistency and Consensus
Earlier the book club of our company has studied excellent book:
This is the best book I have read about building complex scalable software systems. 💪
As usually I prepared an overview and mind-map.
Chapter 9 tells about Consistency and Consensus in distributed systems. It covers the following topics:
- What is consistency and eventual consistency
- Linearizability. Why it is needed. Difference from Serializability. How to implement Linearizability. The cost of Linearizability. CAP theorem.
- Ordering Guarantees. What is ordering and causality. It’s relation to Linearizability. Sequence Number Ordering and how to implement it. Total Order Broadcast and how to implement it.
- Distributed Transactions and Consensus. Why we need Consensus and Distributed Transactions. How to implement them, related problems and software that helps.
Summary:
- We do not need Consensus for EVERY operation:
- We can use single leader with Linearizability, and Consensus for selecting new leader.
- Or we can use Causal Consistency, and Consensus for some problem cases.
- We also have specific software that implements Consensus.
- Also some systems (leaderless / multileader) don’t need linearizability and can work with branching and merging.
See also:
- Designing Data-Intensive Applications - Chapter 12 - The Future of Data Systems
- Designing Data-Intensive Applications - Chapter 5 - Replication
- Designing Data-Intensive Applications - Chapter 7 - Transactions
- Designing Data-Intensive Applications - Chapter 6 - Partitioning
- Designing Data-Intensive Applications - Chapter 11 - Stream Processing