Decision guide
Strong vs Eventual Consistency
Which consistency guarantee does each part of your system need?
Side by side
| Criterion | Strong (linearizable) | Session guarantees | Eventual |
|---|---|---|---|
| Read latency | Higher (coordination) | Low | Lowest |
| Availability in partitions | Reduced (minority unavailable) | High | Highest |
| Anomalies | None | Others may see stale data | Stale reads, temporary divergence |
| Implementation | Consensus / single leader | Sticky routing, version tokens | Async replication, caches |
| Examples | Spanner, etcd, primary DB reads | Replicas + read-your-writes routing | DynamoDB default reads, DNS, CDNs |
When to choose each
Strong (linearizable)
Reads always see the latest committed write.
Choose when
- Money, inventory reservations, uniqueness
- Locks and leader election
Avoid when
- Global low-latency reads for everything
Session guarantees
Read-your-writes, monotonic reads per user/session.
Choose when
- User-facing apps with replicas/caches
- Profiles, settings, feeds
Avoid when
- Cross-user invariants
Eventual
Replicas converge over time.
Choose when
- Caches, search indexes, analytics, counters
- Multi-region availability
Avoid when
- Invariants that must never be violated
Verdict
Use strong consistency only where invariants demand it, session guarantees for user-facing reads, and eventual consistency everywhere else — and document which guarantee each API provides.