An alternative approach is to relax synchronization: the data store executes an
operation at a single data center, without any communication with others, and
propagates updates to other data centers in the
background [1]}, [2]}. This minimizes the latency and makes the system
highly available, i.e., operational even during network partitionings. But
on the downside, the systems following this approach provide weaker consistency
models: e.g., eventual consistency [1]}, [4]} or causal
consistency [5]}. The latter is particularly appealing: it
guarantees that clients see updates in an order that respects the potential
causality between them.
For example, assume that in a banking application Alice deposits $100 into
Bob's account (\(u_1\) ) and then posts a notification about it into Bob's inbox
(\(u_2\) ). Under causal consistency, if Bob sees the notification (\(u_3\) ), and
then checks his account balance (\(u_4\) ), he will see the deposit. This is not
guaranteed under eventual consistency, which does not respect causality
relationships, such as those between \(u_1\)  and \(u_2\) . In some settings, causal
consistency has been shown to be the strongest model that
allows availability during network partitionings [6]}, [7]}. It
has been a subject of active research in recent years, with scalable
implementations [8]}, [9]}, [10]} and some industrial
deployments [11]}, [12]}.
