Tuesday, March 25, 2008

Services are Autonomous, but Why?

In my post on synchronous request/reply, I mentioned that one tenet of SOA is that services are autonomous. But what does that mean? And why is it important?

The four tenets of SOA were originally posited Don Box, in his article A Guide to Developing and Running Connected Systems with Indigo.

The other tenets may be a topic for another post. The services are autonomous tenet was intended by Don Box to mean that services are deployed and versioned independently from each other.

I and some others such as Udi Dahan extend this constraint to also stipulate that services should be able to function autonomously at run time. That is, they should be able to as much as possible function without influence from other services. That is not to say that services live in a vaccuum. Services must of course be able to interact with other services.

The nature of these interactions however should be such that no service should rely on the immediate availability of another service in order to handle a message. That is, we want to eliminate temporal coupling between services by limiting ourselves to asynchronous communication between services.

The more autonomous our services are, the more loosely coupled they are. And loose coupling is what gives us business agility, which is the key business driver for SOA.

Without this kind of autonomy between services, one service failing could cause a domino effect causing many other services across the enterprise to fail. In my opinion this degree of coupling is unacceptable.