Welcome to EMC Consulting Blogs Sign in | Join | Help

Jack Hanison's Blog

in·te·gra·tion (ĭn'tĭ-grā'shən)
n.
"the combining and coordinating of separate parts or elements into a unified whole"

The relationship between Service Autonomy and Loose Coupling in SOA

I was recently asked by a client if the SOA design principles of Service Autonomy and Loose Coupling amounted to the same thing. I thought it was an interesting question, so after some thought, I replied with the following, which I repeat here to help others that may be intrigued by the distinction:

The principle of Service Autonomy says that a service should be independent of external dependencies so that it is predictable in it's run-time behaviour, able to be maintained without disrupting other aspects of an organisation's systems landscape, and implementation decisions such as technology choice can be made in the best interests of delivering the service without affecting the usability of the service.

On the surface of it, Service Autonomy would seem to imply that there should be no coupling at all. That is to say, that coupling of any kind implies the introduction of a dependency. And this is where the distinction exists. Coupling and Autonomy are not the same thing, but they are very closely related. Coupling is about the way in which dependencies are introduced, and by doing so perfect autonomy is compromised. They feel like the same thing, because a balance must be reached between them and they go hand-in-hand.

Within a service boundary, there will naturally exist some tight couplings, and this is not always anathema to Service Orientation. Service Logic will be tightly bound to the service contract in order to implement the appropriate service behaviour, for example. However, it is when we introduce dependencies outside of the service boundary where we should pay careful attention to the manner of coupling.

In this context, loose coupling means that the services that are being coupled maintain as much autonomy as possible. This can be achieved by careful service contract design, and through the use of standards for contract implementation, including standardised schemas.

So, there is a strong relationship between Service Autonomy and Loose Coupling, they can be thought of as two sides of the same coin, but they are not the same thing.

Published 26 February 2008 18:40 by jack.hanison
Filed under:

Comments

 

john.rayner said:

In OOP terms, loose coupling between two modules means that changes in one module do not require changes in the other.  Is there any reason why this doesn't apply equally in SOA?

Clemens Vaster has an interesting post about service autonomy at http://blogs.msdn.com/clemensv/archive/2006/06/01/612995.aspx.  How do you think this relates to your concept of autonomy?

Cheers,

John

February 26, 2008 21:33
 

jack.hanison said:

Hey John,

Exactly the same principle applies - I emphasised how contract design can encourage loose coupling, the abstraction principle of contract design, correctly applied would encourage loose coupling from the perspective of change management.

Clemens is a smart and thought provoking guy. I think that he is essentially saying the same thing as I am, but with many more words and detail! Essentially service design is about applying key principles to the solution domain. But the balance between these principles will always be a matter of judgement and experience of the individuals involved. In the example that Clemens gives there is a necessity to reduce the autonomy of individual services for the benefit of other qualities of the solution. Loose coupling of consumers to the services is not affected, but the coupling of components within the service is. Clearly in this instance the benefit of compromising the autonomy of the services overrides the principle.

Clemens states that "The two ideas compose well, but they are not the same, at all" which I think sums it up.

I saw Clemens give a presentation where he gave his alternative view of the definitions of various SOA tenants. He chose to redefine the autonomy tenant thus: "Roles and Capabilities Evolve Agilely and Independently" emphasising the need for independance (autonomy) of the service (and it's roles and capabilities) but also placing an importance of the flexibility (agile evolution) that must be exercised when applying such design principles.

Thanks for bringing that article to my attention.

Jack

February 27, 2008 15:07
Anonymous comments are disabled
Powered by Community Server (Personal Edition), by Telligent Systems