In globally distributed systems, shared state is never perfect. When communication is neither fast nor reliable, it is not possible to achieve strong consistency, low latency, and availability at the same time. Unfortunately, abandoning strong consistency has wide ramifications. Eventual consistency, though attractive from a performance viewpoint, is challenging to understand and reason about for both system architects and programmers. To provide robust abstractions, we need not just systems but also principles; we need the ability to articulate what a consistency protocol is supposed to guarantee, and the ability to prove or refute such claims.
Principles of Eventual Consistency carefully examines both the what and the how of consistency in distributed systems. It provides the reader with tools for reasoning about consistency of protocols. The emphasis is on using basic mathematical techniques, such as sets, relations, and first order logic, to describe a wide variety of consistency guarantees, and to define protocols with a level of precision that enables us to prove both positive results – correctness of protocols – and negative results – refute implementability.