Defined as consistency in the face of concurrent reads/writes.
Informally: every operation takes effect atomically sometime after it started and before it finished. All operations behave as if executed on a single copy of the data
Not to be confused with serializability: transactions having the same effect as if they were run in some serial order. Also contrasting with causal relationships, linearizability is defined in terms of real-time whereas causal is defined in terms of message sending and receiving.
The consequence/desired property of linearizability is that every operation returns an “up-to-date” value, sometimes called “strong consistency”
We can guarantee linearizability of get (quorum read + read repair) and set (blind write to quorum). If events overlap, either order could happen and is ok.
Not without downsides
- Performance costs: lots of messages and waiting for responses
- Scalability limits: leader can be a bottleneck
- Availability problems: if you can’t contact a quorum of nodes, you can’t process any operations