Skip to main content

Autonomous Computing and how it influenced the way I build software

There are a lot of concepts and papers that have influenced the way I design and build software. One concept that certainly should be on the list is 'Autonomous Computing' as introduced by Pat Helland more than 20 years ago.

If you have never heard about this concept, I would recommend to first read this paper before you continue reading my blog post.


Back? Let’s continue.

In the paper Pat introduces the concept of Fiefdoms and Emissaries and Collaborations.

Fiefdoms refer to independent, autonomous components within a computing system. Each fiefdom is responsible for a specific aspect or function of the overall system. They operate independently and have their own decision-making capabilities.

Emissaries are entities that facilitate communication and coordination between fiefdoms. They act as messengers, relaying information and requests between different components of the system. Emissaries enable fiefdoms to interact and collaborate without direct dependencies on each other.

A collaboration is an abstraction for a set of messages into and out of a fiefdom for a single long-running business operation.

Each of those concepts sound familiar to specific techniques I like to use when building software.

Technique 1 – The actor model

The actor model is a theoretical framework for concurrent computation that treats actors as fundamental units of computation. Actors are independent entities that communicate with each other by sending and receiving messages. Each actor has its own internal state and can perform actions in response to messages it receives.

In Helland's vision of autonomous computing, systems are composed of autonomous components that communicate asynchronously through message passing. This aligns with the principles of the actor model, where actors operate independently and communicate via message passing.

Both the actor model and Helland's concept emphasize decentralized, loosely-coupled systems where components can operate autonomously and reactively. By leveraging message passing and asynchronous communication, systems can be more scalable, resilient, and adaptable to changing conditions.

So an actor could be seen as a fiefdom.

Technique 2 – An anti-corruption layer

In Domain Driven Design, the anti-corruption layer is a design pattern used to isolate a bounded context from external systems or domains with different models or languages. It acts as a translation layer, ensuring that communication between different bounded contexts remains consistent and that the internal model of a context is protected from external influences.

Similarly, in Helland's concept of collaborations, the emissaries serve as intermediaries between autonomous components, facilitating communication and coordination. They ensure that interactions between fiefdoms are well-defined and consistent, helping to maintain the autonomy and integrity of each component.

Both the anti-corruption layer in DDD and collaborations in autonomous computing focus on managing interactions between different parts of a system to prevent conflicts, maintain autonomy, and enable interoperability. They provide mechanisms for managing complexity and ensuring that systems remain cohesive and adaptable as they evolve.

So an anti-corruption layer could be seen as an emissary.

Technique 3 – Sagas

In the context of distributed systems and event-driven architectures, a saga is a pattern used to manage long-lived transactions that span multiple (micro)services or components.

A saga represents a sequence of local transactions that are coordinated to achieve a global outcome. Each local transaction corresponds to a step in the saga and is responsible for making changes within its own bounded context. If a step fails, compensating actions are executed to undo the changes made by previous steps.

This aligns with the concept of a collaboration that is used to represent a single long-running business process.

So a saga could be seen as a collaboration.

Summary

Pat proposes a vision where computing systems are more autonomous, decentralized, and responsive. The techniques above can help you to realize that vision.

It certainly helped me to build better systems.

More information

Anti-corruption Layer pattern - Azure Architecture Center | Microsoft Learn

Saga pattern - Azure Design Patterns | Microsoft Learn

Popular posts from this blog

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t

DevToys–A swiss army knife for developers

As a developer there are a lot of small tasks you need to do as part of your coding, debugging and testing activities.  DevToys is an offline windows app that tries to help you with these tasks. Instead of using different websites you get a fully offline experience offering help for a large list of tasks. Many tools are available. Here is the current list: Converters JSON <> YAML Timestamp Number Base Cron Parser Encoders / Decoders HTML URL Base64 Text & Image GZip JWT Decoder Formatters JSON SQL XML Generators Hash (MD5, SHA1, SHA256, SHA512) UUID 1 and 4 Lorem Ipsum Checksum Text Escape / Unescape Inspector & Case Converter Regex Tester Text Comparer XML Validator Markdown Preview Graphic Color B