Databases uphold 4 promises. Transactions are Atomic, Consistent, Isolated, and Durable.
That's fine for the small, directly-connected scope of a database... , but what about distributed systems? How can we ensure correctness across APIs and message queues?
When we cross compute boundaries, we need a different set of promises. We need to know that the system will behave correctly when messages arrive out of order. It needs the ability to retry on delivery failure without causing duplication. And we must be sure that all nodes converge even if they don't all subscribe to the same queues. We need ACID 2.0.
A system that is ACID 2.0 is: • Associative • Commutative • Idempotent • Distributed
Each of these guarantees is vital for the correct behavior of a system. And better yet, they provide guidance for designing Web APIs and service bus messages. They are precisely defined, so that we can verify with certainty whether the systems we build uphold these promises, or whether we are setting ourselves up for failure.
Build better Web applications, mobile apps, and microservices. Make them resilient. Make them ACID 2.0.