chapter six
6 Distributed Systems
This chapter covers
- Defining transaction guarantees with the ACID properties
- Navigating distributed trade-offs using the CAP and PACELC theorems
- Selecting the right Transaction Isolation Levels for your data
- Distinguishing between Safety (correctness) and Liveness (progress)
- Optimizing set membership checks using Bloom Filters
Distributed systems are fundamentally about trade-offs. In a single-threaded application running on one machine, we take certain luxuries for granted: variables don't change unexpectedly, time moves forward linearly, and a write you just made is the value the next read returns. In a distributed system, none of these guarantees hold automatically. We're forced to choose: do we want our data to be perfectly consistent, or do we want our system to remain available during a network partition? Do we want speed, or do we want accuracy? There is no free lunch.