Problem
Synchronous coordination across replicas or services hurts latency and availability. Many workloads do not need every reader to see every write instantly.
Also known as: eventually-consistent, convergent-replication
Accept temporary divergence between replicas in exchange for availability and low latency, guaranteeing convergence once updates stop.
Synchronous coordination across replicas or services hurts latency and availability. Many workloads do not need every reader to see every write instantly.
Eventual consistency promises that if no new updates are made, all replicas will eventually return the same value. It gives up immediate agreement to gain availability and speed. Amazon's Dynamo paper and Werner Vogels' essay made it a mainstream design choice for large systems.
In practice the window of inconsistency is often milliseconds to seconds, but under backlog or partition it can stretch much longer, which is why it must be monitored rather than assumed.
A write lands on one or a few replicas and is propagated in the background.
t0 client writes x=2 -> replica A (ack)
t1 replica B still has x=1 (stale read possible)
t2 A replicates to B, C (async, gossip or log)
t3 all replicas x=2 (converged)
If two replicas accept different writes concurrently, a resolution rule decides the winner: last-write-wins, version vectors with application merge, or CRDTs. Background anti-entropy compares replicas (often using Merkle trees) and repairs drift. Quorum settings can tighten the guarantee where needed.
Low: fewer coordination resources
Medium: monitor lag and repair
High: developers must reason about anomalies
Unbounded replication lag during backlog or partition
Lost updates from naive last-write-wins
Users see their own writes disappear temporarily