Alternatives to Eventual Consistency
Eventual Consistency is a hallmark of distributed systems designed by principles derived from the CAP Theorem. Eventual Consistency can not only enable systems to survive transient partition failure, but also to achieve a level of asynchronicity that can be leveraged within a business context. However, not all systems require the same rigor of partition tolerance and may actually find asynchronicity to be a limitation to their business model.
Recent arguments against Eventual Consistency have begun to emerge. In an ACM paper titled “Don’t Settle for Eventual Consistency", Wyatt Lloyd et.el. have argued that systems which require a strong degree of temporal consistency, meaning the order of operations is vital, Eventual Consistency is not a good choice. In fact, the very concepts that define Eventual Consistency could cause a catastrophic business failure. For example, if messages containing ordered operations are replicated across geo-distributed nodes and their order of delivery is not ensured, a chain of events could be triggered on a remote node that does not fully embody the intent of the system nor reflect the state that other nodes may possess.
Causal Consistency, on the other hand, prescribes a distribution model that explicitly delivers each message in a context that ensures order. This focus on Consistency as opposed to Partition Tolerance seems to fly in the face of contemporary wisdom when designing a distributed system, but this shift in priorities denotes a more refined approach and thoughtful design of each system and its unique requirements.
“Faced with the choice of at most two of these properties, many systems have chosen to sacrifice strong consistency to ensure availability and partition tolerance. Other systems—for example, those that deal with money—sacrifice availability and/or partition tolerance to achieve the strong consistency that is necessary for the applications built on top of them.” – Lloyd, et el
Causal Consistency is not a replacement for Eventual Consistency. Causal Consistency is a design consideration for systems where consistency is a non-negotiable requirement. Trade-offs between Eventual and Causal consistency should not be measured in absolutes, but rather measured in degrees of risk and impact. Choosing the correct model for your system should be a matter of reflecting on your systems purpose and what form of failure is the most tolerable.
Shane Hastie on Distributed Agile Teams, Product Ownership and the Agile Manifesto Translation Program
Shane Hastie Apr 17, 2015