Triggered by a tweet by @rseroter (thanks for that, Richard), I decided to write this little post.
One of the major challenges with the implementation of service oriented architecture (SOA) and therefore Microservices, is the underlying data architecture. How can loosely coupled services, that cannot keep state, make sure that the business data remains consistent, reliable and trustworthy?
In every implementation of a (enterprise) service bus or other form of integration middleware, having to cope with for example back-end applications and services that are not idempotent is a nightmare.
What if we could make this all a “thing of the past”, and run our services on an immutable infrastructure? No more updates to existing records. No more keeping track of separate audit information in logs, to record who did what, when and why. The infrastructure just records every bit of information as new information, thereby “elaborating” on the current status. That way, auditability is built in. That way, restartability is not an issue anymore. That way, idempotency is not an issue any more.
Pat Helland writes in his paper: Many kinds of computing are “Append-Only”. Observations are recorded forever (or for a long time). Derived results are calculated on demand (or periodically pre-calculated). And: Normalization is for sissies!
Is immutable infrastructure the holy grail of service oriented architecture and microservices?