The arithmetic worth carrying
How do round-trip tiers and quorum tails set what a design can do?
Coordination is priced by locality tier, and the tiers are decades apart. Same-rack RTT is about 0.1–0.25 ms, cross-AZ about 0.5–2 ms, cross-region 10–150 ms, with a hard floor of about 10 µs per km of fibre round trip. A protocol that needs one RTT per operation is fine inside an AZ, marginal across AZs, and architecturally impossible across regions. Nothing here is faster than geography. So where you place the coordination point is a bigger decision than which protocol you pick.
Consensus does not scale out; it scales fault tolerance. Adding members buys tolerance of more failures and costs throughput, so systems run many small groups instead of one wide one (why it does not scale out).
A quorum is the only fan-out that does not amplify the tail. Waiting for any 3 of 5 replicas is faster in the tail than waiting for one designated node, because the slowest replicas are not on the critical path (the arithmetic).
Replication multiplies availability only if failures are independent. Three replicas, each up with probability p = 0.99, give availability of about 0.9997 under independence, when the system needs a majority (at least 2 of 3) up: 3 × 0.99² × 0.01 + 0.99³ = 0.0294 + 0.9703 = 0.9997. That is 30 times fewer outages than a single node at 0.99 (unavailability 0.01 versus 0.0003). But three replicas in one rack give you the availability of one rack: the failure domain of the placement matters more than the replication factor (placement across failure domains).
- probability one replica is up
- members of the group
Data table
| Members N | series | Unavailability |
|---|---|---|
| 1 | needs a majority | 0.01 |
| 1.1 | needs a majority | 0.01 |
| 1.2 | needs a majority | 0.01 |
| 1.3 | needs a majority | 0.01 |
| 1.4 | needs a majority | 0.01 |
| 1.5 | needs a majority | 0.02 |
| 1.6 | needs a majority | 0.02 |
| 1.7 | needs a majority | 0.02 |
| 1.8 | needs a majority | 0.02 |
| 1.9 | needs a majority | 0.02 |
| 2 | needs a majority | 0.02 |
| 2.1 | needs a majority | 0.02 |
| 2.2 | needs a majority | 0.02 |
| 2.3 | needs a majority | 0.02 |
| 2.4 | needs a majority | 0.02 |
| 2.5 | needs a majority | 0 |
| 2.6 | needs a majority | 0 |
| 2.7 | needs a majority | 0 |
| 2.8 | needs a majority | 0 |
| 2.9 | needs a majority | 0 |
| 3 | needs a majority | 0 |
| 3.1 | needs a majority | 0 |
| 3.2 | needs a majority | 0 |
| 3.3 | needs a majority | 0 |
| 3.4 | needs a majority | 0 |
| 3.5 | needs a majority | 0.001 |
| 3.6 | needs a majority | 0.001 |
| 3.7 | needs a majority | 0.001 |
| 3.8 | needs a majority | 0.001 |
| 3.9 | needs a majority | 0.001 |
| 4 | needs a majority | 0.001 |
| 4.1 | needs a majority | 0.001 |
| 4.2 | needs a majority | 0.001 |
| 4.3 | needs a majority | 0.001 |
| 4.4 | needs a majority | 0.001 |
| 4.5 | needs a majority | 0 |
| 4.6 | needs a majority | 0 |
| 4.7 | needs a majority | 0 |
| 4.8 | needs a majority | 0 |
| 4.9 | needs a majority | 0 |
| 5 | needs a majority | 0 |
| 5.1 | needs a majority | 0 |
| 5.2 | needs a majority | 0 |
| 5.3 | needs a majority | 0 |
| 5.4 | needs a majority | 0 |
| 5.5 | needs a majority | 0 |
| 5.6 | needs a majority | 0 |
| 5.7 | needs a majority | 0 |
| 5.8 | needs a majority | 0 |
| 5.9 | needs a majority | 0 |
| 6 | needs a majority | 0 |
| 6.1 | needs a majority | 0 |
| 6.2 | needs a majority | 0 |
| 6.3 | needs a majority | 0 |
| 6.4 | needs a majority | 0 |
| 6.5 | needs a majority | 0 |
| 6.6 | needs a majority | 0 |
| 6.7 | needs a majority | 0 |
| 6.8 | needs a majority | 0 |
| 6.9 | needs a majority | 0 |
| 7 | needs a majority | 0 |
| 7.1 | needs a majority | 0 |
| 7.2 | needs a majority | 0 |
| 7.3 | needs a majority | 0 |
| 7.4 | needs a majority | 0 |
| 7.5 | needs a majority | 0 |
| 7.6 | needs a majority | 0 |
| 7.7 | needs a majority | 0 |
| 7.8 | needs a majority | 0 |
| 7.9 | needs a majority | 0 |
| 8 | needs a majority | 0 |
| 8.1 | needs a majority | 0 |
| 8.2 | needs a majority | 0 |
| 8.3 | needs a majority | 0 |
| 8.4 | needs a majority | 0 |
| 8.5 | needs a majority | 0 |
| 8.6 | needs a majority | 0 |
| 8.7 | needs a majority | 0 |
| 8.8 | needs a majority | 0 |
| 8.9 | needs a majority | 0 |
| 9 | needs a majority | 0 |
| 1 | needs all (unanimity) | 0.01 |
| 1.1 | needs all (unanimity) | 0.01 |
| 1.2 | needs all (unanimity) | 0.01 |
| 1.3 | needs all (unanimity) | 0.01 |
| 1.4 | needs all (unanimity) | 0.01 |
| 1.5 | needs all (unanimity) | 0.02 |
| 1.6 | needs all (unanimity) | 0.02 |
| 1.7 | needs all (unanimity) | 0.02 |
| 1.8 | needs all (unanimity) | 0.02 |
| 1.9 | needs all (unanimity) | 0.02 |
| 2 | needs all (unanimity) | 0.02 |
| 2.1 | needs all (unanimity) | 0.02 |
| 2.2 | needs all (unanimity) | 0.02 |
| 2.3 | needs all (unanimity) | 0.02 |
| 2.4 | needs all (unanimity) | 0.02 |
| 2.5 | needs all (unanimity) | 0.03 |
| 2.6 | needs all (unanimity) | 0.03 |
| 2.7 | needs all (unanimity) | 0.03 |
| 2.8 | needs all (unanimity) | 0.03 |
| 2.9 | needs all (unanimity) | 0.03 |
| 3 | needs all (unanimity) | 0.03 |
| 3.1 | needs all (unanimity) | 0.03 |
| 3.2 | needs all (unanimity) | 0.03 |
| 3.3 | needs all (unanimity) | 0.03 |
| 3.4 | needs all (unanimity) | 0.03 |
| 3.5 | needs all (unanimity) | 0.039 |
| 3.6 | needs all (unanimity) | 0.039 |
| 3.7 | needs all (unanimity) | 0.039 |
| 3.8 | needs all (unanimity) | 0.039 |
| 3.9 | needs all (unanimity) | 0.039 |
| 4 | needs all (unanimity) | 0.039 |
| 4.1 | needs all (unanimity) | 0.039 |
| 4.2 | needs all (unanimity) | 0.039 |
| 4.3 | needs all (unanimity) | 0.039 |
| 4.4 | needs all (unanimity) | 0.039 |
| 4.5 | needs all (unanimity) | 0.049 |
| 4.6 | needs all (unanimity) | 0.049 |
| 4.7 | needs all (unanimity) | 0.049 |
| 4.8 | needs all (unanimity) | 0.049 |
| 4.9 | needs all (unanimity) | 0.049 |
| 5 | needs all (unanimity) | 0.049 |
| 5.1 | needs all (unanimity) | 0.049 |
| 5.2 | needs all (unanimity) | 0.049 |
| 5.3 | needs all (unanimity) | 0.049 |
| 5.4 | needs all (unanimity) | 0.049 |
| 5.5 | needs all (unanimity) | 0.059 |
| 5.6 | needs all (unanimity) | 0.059 |
| 5.7 | needs all (unanimity) | 0.059 |
| 5.8 | needs all (unanimity) | 0.059 |
| 5.9 | needs all (unanimity) | 0.059 |
| 6 | needs all (unanimity) | 0.059 |
| 6.1 | needs all (unanimity) | 0.059 |
| 6.2 | needs all (unanimity) | 0.059 |
| 6.3 | needs all (unanimity) | 0.059 |
| 6.4 | needs all (unanimity) | 0.059 |
| 6.5 | needs all (unanimity) | 0.068 |
| 6.6 | needs all (unanimity) | 0.068 |
| 6.7 | needs all (unanimity) | 0.068 |
| 6.8 | needs all (unanimity) | 0.068 |
| 6.9 | needs all (unanimity) | 0.068 |
| 7 | needs all (unanimity) | 0.068 |
| 7.1 | needs all (unanimity) | 0.068 |
| 7.2 | needs all (unanimity) | 0.068 |
| 7.3 | needs all (unanimity) | 0.068 |
| 7.4 | needs all (unanimity) | 0.068 |
| 7.5 | needs all (unanimity) | 0.077 |
| 7.6 | needs all (unanimity) | 0.077 |
| 7.7 | needs all (unanimity) | 0.077 |
| 7.8 | needs all (unanimity) | 0.077 |
| 7.9 | needs all (unanimity) | 0.077 |
| 8 | needs all (unanimity) | 0.077 |
| 8.1 | needs all (unanimity) | 0.077 |
| 8.2 | needs all (unanimity) | 0.077 |
| 8.3 | needs all (unanimity) | 0.077 |
| 8.4 | needs all (unanimity) | 0.077 |
| 8.5 | needs all (unanimity) | 0.087 |
| 8.6 | needs all (unanimity) | 0.087 |
| 8.7 | needs all (unanimity) | 0.087 |
| 8.8 | needs all (unanimity) | 0.087 |
| 8.9 | needs all (unanimity) | 0.087 |
| 9 | needs all (unanimity) | 0.087 |
Any fixed failure-detection timeout is either slow or wrong, because response times have fat tails: a long timeout waits, a short one suspects live nodes (Failure detection).