Skip to content
About
Main content

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 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

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 is faster in 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: matters more than the replication factor (placement across failure domains).

probability one replica is up
members of the group
needs a majorityneeds all (unanimity)
Data table
Unavailability by group size, each node up 99% (independent)
Members NseriesUnavailability
1needs a majority0.01
1.1needs a majority0.01
1.2needs a majority0.01
1.3needs a majority0.01
1.4needs a majority0.01
1.5needs a majority0.02
1.6needs a majority0.02
1.7needs a majority0.02
1.8needs a majority0.02
1.9needs a majority0.02
2needs a majority0.02
2.1needs a majority0.02
2.2needs a majority0.02
2.3needs a majority0.02
2.4needs a majority0.02
2.5needs a majority0
2.6needs a majority0
2.7needs a majority0
2.8needs a majority0
2.9needs a majority0
3needs a majority0
3.1needs a majority0
3.2needs a majority0
3.3needs a majority0
3.4needs a majority0
3.5needs a majority0.001
3.6needs a majority0.001
3.7needs a majority0.001
3.8needs a majority0.001
3.9needs a majority0.001
4needs a majority0.001
4.1needs a majority0.001
4.2needs a majority0.001
4.3needs a majority0.001
4.4needs a majority0.001
4.5needs a majority0
4.6needs a majority0
4.7needs a majority0
4.8needs a majority0
4.9needs a majority0
5needs a majority0
5.1needs a majority0
5.2needs a majority0
5.3needs a majority0
5.4needs a majority0
5.5needs a majority0
5.6needs a majority0
5.7needs a majority0
5.8needs a majority0
5.9needs a majority0
6needs a majority0
6.1needs a majority0
6.2needs a majority0
6.3needs a majority0
6.4needs a majority0
6.5needs a majority0
6.6needs a majority0
6.7needs a majority0
6.8needs a majority0
6.9needs a majority0
7needs a majority0
7.1needs a majority0
7.2needs a majority0
7.3needs a majority0
7.4needs a majority0
7.5needs a majority0
7.6needs a majority0
7.7needs a majority0
7.8needs a majority0
7.9needs a majority0
8needs a majority0
8.1needs a majority0
8.2needs a majority0
8.3needs a majority0
8.4needs a majority0
8.5needs a majority0
8.6needs a majority0
8.7needs a majority0
8.8needs a majority0
8.9needs a majority0
9needs a majority0
1needs all (unanimity)0.01
1.1needs all (unanimity)0.01
1.2needs all (unanimity)0.01
1.3needs all (unanimity)0.01
1.4needs all (unanimity)0.01
1.5needs all (unanimity)0.02
1.6needs all (unanimity)0.02
1.7needs all (unanimity)0.02
1.8needs all (unanimity)0.02
1.9needs all (unanimity)0.02
2needs all (unanimity)0.02
2.1needs all (unanimity)0.02
2.2needs all (unanimity)0.02
2.3needs all (unanimity)0.02
2.4needs all (unanimity)0.02
2.5needs all (unanimity)0.03
2.6needs all (unanimity)0.03
2.7needs all (unanimity)0.03
2.8needs all (unanimity)0.03
2.9needs all (unanimity)0.03
3needs all (unanimity)0.03
3.1needs all (unanimity)0.03
3.2needs all (unanimity)0.03
3.3needs all (unanimity)0.03
3.4needs all (unanimity)0.03
3.5needs all (unanimity)0.039
3.6needs all (unanimity)0.039
3.7needs all (unanimity)0.039
3.8needs all (unanimity)0.039
3.9needs all (unanimity)0.039
4needs all (unanimity)0.039
4.1needs all (unanimity)0.039
4.2needs all (unanimity)0.039
4.3needs all (unanimity)0.039
4.4needs all (unanimity)0.039
4.5needs all (unanimity)0.049
4.6needs all (unanimity)0.049
4.7needs all (unanimity)0.049
4.8needs all (unanimity)0.049
4.9needs all (unanimity)0.049
5needs all (unanimity)0.049
5.1needs all (unanimity)0.049
5.2needs all (unanimity)0.049
5.3needs all (unanimity)0.049
5.4needs all (unanimity)0.049
5.5needs all (unanimity)0.059
5.6needs all (unanimity)0.059
5.7needs all (unanimity)0.059
5.8needs all (unanimity)0.059
5.9needs all (unanimity)0.059
6needs all (unanimity)0.059
6.1needs all (unanimity)0.059
6.2needs all (unanimity)0.059
6.3needs all (unanimity)0.059
6.4needs all (unanimity)0.059
6.5needs all (unanimity)0.068
6.6needs all (unanimity)0.068
6.7needs all (unanimity)0.068
6.8needs all (unanimity)0.068
6.9needs all (unanimity)0.068
7needs all (unanimity)0.068
7.1needs all (unanimity)0.068
7.2needs all (unanimity)0.068
7.3needs all (unanimity)0.068
7.4needs all (unanimity)0.068
7.5needs all (unanimity)0.077
7.6needs all (unanimity)0.077
7.7needs all (unanimity)0.077
7.8needs all (unanimity)0.077
7.9needs all (unanimity)0.077
8needs all (unanimity)0.077
8.1needs all (unanimity)0.077
8.2needs all (unanimity)0.077
8.3needs all (unanimity)0.077
8.4needs all (unanimity)0.077
8.5needs all (unanimity)0.087
8.6needs all (unanimity)0.087
8.7needs all (unanimity)0.087
8.8needs all (unanimity)0.087
8.9needs all (unanimity)0.087
9needs all (unanimity)0.087

Any fixed failure-detection timeout is either slow or wrong, because response times have fat tails: a long waits, a short one suspects live nodes (Failure detection).