<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Udi Dahan - The Software Simplist &#187; SCA &amp; SDO</title>
	<atom:link href="http://www.udidahan.com/category/sca-sdo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sun, 08 Jan 2012 12:45:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>No such thing as a centralized ESB</title>
		<link>http://www.udidahan.com/2007/06/30/no-such-thing-as-a-centralized-esb/</link>
		<comments>http://www.udidahan.com/2007/06/30/no-such-thing-as-a-centralized-esb/#comments</comments>
		<pubDate>Sat, 30 Jun 2007 13:09:55 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Availability]]></category>
		<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/30/no-such-thing-as-a-centralized-esb/</guid>
		<description><![CDATA[Via David McGhee&#8217;s Q&#038;A with Dr. Don Ferguson, but read the whole thing.

Q: Could you tell you your thoughts or preference for a distributed or centralized ESB? 
DON: there is no such thing as a centralized ESB.

This is the problem with a lot of the products that call themselves ESBs. They are centralized brokers which [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://blogs.msdn.com/davidmcg/archive/2007/06/28/soa-esb-integration-in-the-real-world.aspx">David McGhee&#8217;s Q&#038;A</a> with <a href="http://www.microsoft.com/presspass/exec/techfellow/Ferguson/default.mspx">Dr. Don Ferguson</a>, but read the whole thing.</p>
<blockquote><p>
Q: Could you tell you your thoughts or preference for a distributed or centralized ESB? </p>
<p>DON: there is no such thing as a centralized ESB.
</p></blockquote>
<p>This is the problem with a lot of the products that call themselves ESBs. They are centralized brokers which may be clustered for availability. But they are in no way an implementation of the Bus Architectural Pattern. Please check this before cutting a check to your vendor.</p>
<p>Also, understand that if you do security related things in your ESB, possibly as a part of your routing rules, that if the security infrastructure is centralized that means your ESB is too. Even if it really was distributed to begin with.</p>
<p>Buyer beware.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/30/no-such-thing-as-a-centralized-esb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Podcast] Using Autonomous Components for SLAs in SOA</title>
		<link>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/</link>
		<comments>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/#comments</comments>
		<pubDate>Sun, 03 Jun 2007 05:07:36 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/</guid>
		<description><![CDATA[In this podcast we answer questions about how to use autonomous components to unify disparate building blocks like servers, middleware, and databases in order to handle the technical complexity of complying with detailed service-level agreements. Reuse of business logic, database schemas, and messaging topics between autonomous components are discussed as well.
Download via the Dr. Dobbs&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we answer questions about how to use autonomous components to unify disparate building blocks like servers, middleware, and databases in order to handle the technical complexity of complying with detailed service-level agreements. Reuse of business logic, database schemas, and messaging topics between autonomous components are discussed as well.</p>
<p><a href="http://www.ddj.com/dept/webservices/199800168">Download via the Dr. Dobbs&#8217; site</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070531ud01.mp3?podcast=070531ud01.mp3">here</a>.</p>
<p>And here&#8217;s this week&#8217;s question:</p>
<blockquote><p>
Hi Udi,</p>
<p>Thanks again for your continued assistance.  I was very much interested by your advice to consolidate each of the services related to each product family into a single service, but as autonomous components.  </p>
<p>From your description of autonomous components from a prior podcast, it seems that they are much the same as services &#8211; in that they communicate only via loosely coupled messaging, and can have their own databases.  Would you say that the main difference between autonomous components is that different autonomous components within a service may in fact share business logic and databases?  If so, it would seem that combining these services into a single service with 3 autonomous components would be a matter of definition, rather than an architectural shift.  Any information you could provide to clarify this distinction would be fantastic.</p>
<p>Something else that&#8217;s been playing on my mind of late &#8211; is whether or not you would consider a topic as having to belong to a specific service.  That is, would you say it is bad practice to have multiple services publish on a common topic?  I suppose if we have multiple services publishing on a common topic, then they should be defined as autonomous components, belonging to a single larger service &#8211; in which case that common topic would belong to that new service.</p>
<p>As usual your advice is always extremely helpful.  Please keep those podcasts coming!</p>
<p>Best Regards,<br />
Bill
</p></blockquote>
<p><u>Additional References</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/04/30/podcast-message-schemas-between-multiple-publishers-and-subscribers/">Podcast on Message Schemas between multiple Publishers and Subscribers</a></li>
<li><a href="http://udidahan.weblogs.us/2006/08/28/podcast-business-and-autonomous-components-in-soa/">Podcast on Business and Autonomous Components in SOA </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070531ud01.mp3?podcast=070531ud01.mp3" length="15911054" type="audio/mp3" />
		</item>
		<item>
		<title>On Intermediation And SOA</title>
		<link>http://www.udidahan.com/2007/05/19/on-intermediation-and-soa/</link>
		<comments>http://www.udidahan.com/2007/05/19/on-intermediation-and-soa/#comments</comments>
		<pubDate>Sun, 20 May 2007 04:27:07 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Availability]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/19/on-intermediation-and-soa/</guid>
		<description><![CDATA[Nick Malik has an interesting post on The value of intermediation in SOA where he starts out suggesting a couple of books that stand at the basis of much of today&#8217;s SOA thinking. I agree that far too few people seem to have read them.
In his previous post Is it service-oriented if the message cannot [...]]]></description>
			<content:encoded><![CDATA[<p>Nick Malik has an interesting post on <a href="http://blogs.msdn.com/nickmalik/archive/2007/05/15/the-value-of-intermediation-in-soa.aspx">The value of intermediation in SOA</a> where he starts out suggesting a couple of <a href="http://udidahan.weblogs.us/books/">books</a> that stand at the basis of much of today&#8217;s SOA thinking. I agree that far too few people seem to have read them.</p>
<p>In his previous post <a href="http://blogs.msdn.com/nickmalik/archive/2007/05/14/is-it-service-oriented-if-the-message-cannot-be-intermediated.aspx">Is it service-oriented if the message cannot be intermediated</a>, Nick defines intermediability as <i>&#8220;SOA should give us the ability to intercept a message going from point A to point B, and react to that message without informing either end of that pipe.&#8221;</i>. I&#8217;ll respond to this in due course.</p>
<p>Anyway, he continues on by saying &#8220;SOA [is] an architecture for Enterprise Application Integration.&#8221;</p>
<p>I can&#8217;t agree with that statement. The main reason is that EAI puts the application in the center, and that integrating existing applications one of the primary purposes of it. It is my assertion that in order to solve many of the problems that we are having today, we need to take a broader, business based view of the enterprise and model that with services. A service may be implemented with one or more applications. However, my experience has been that these services tend to use parts of existing applications, with multiple services using different parts of the same application. The reason for this is that the applications we have today, especially the ERP monoliths, do a lot, and at the same time, not everything. This is part of the reality that EAI tried to solve, but then got mired down in cross system hell. You just can&#8217;t solve poor business decomposition in the technology domain.</p>
<p>The value of putting services at the fore makes it possible to gradually phase out and evolve legacy applications, and migrate costly mainframe apps bit by bit without having these changes ripple out and break other services. The same is true for those systems&#8217; data &#8211; backup strategies are defined at the service level, impacted primarily by their Service-Level Agreements.</p>
<p>While I whole-heartedly agree with what Nick has to say in terms of <a href="http://udidahan.weblogs.us/category/oo/">OO intermediation</a> of the <a href="http://udidahan.weblogs.us/category/dependency-inection/">Dependency Injection</a> variety, and that <a href="http://udidahan.weblogs.us/category/scalability/">scaling up those same concepts in terms of messaging</a> is the right way to go, I take issue with orchestration in the intermediation area. These &#8220;tactical changes&#8221; need to be done in the context of the top, business-level service strategy. That means that all logic belongs within a service. The &#8220;network&#8221; between services is just that, a &#8220;dumb&#8221; network &#8211; no business logic of any kind, just technological capabilities like knowing which physical server to route messages to.</p>
<p>In this spirit, I&#8217;d like to suggest an alternative solution to the example Nick gives. Here&#8217;s the scenario:</p>
<blockquote><p>
Let&#8217;s say that system 1 generates an invoice.  It sends an event to the world saying &#8220;invoice here&#8221; and system 2 captures that message.  System 2 asks for details about the invoice&#8230; perhaps it will place the information on a web site for internal support teams.</p>
<p>Let&#8217;s say that we are moving to a CRM solution in our internal support groups.  We want to create the information in the CRM system related to the invoices that specific customers have been issued.  We need to integrate these two systems.  The existing web app needs to have a link to the CRM system&#8217;s data, to allow the user to move across easily.
</p></blockquote>
<p>And here is the solution he prescribes:</p>
<blockquote><p>
We can intercept the request for further information from the web app to the publisher.  When the publisher responds with information about the invoice, we can insert the invoice in the CRM system, add a link to the CRM record for that invoice to the data structure, and resume our response to the web app.  Assuming that our canonical schema has a field for &#8216;foreign key&#8217;, we have just integrated our CRM and web information portal&#8230; without changing either one.
</p></blockquote>
<p>Without getting into the business-level analysis of what the correct service decomposition might be, here&#8217;s what I suggest (although all of these &#8220;systems&#8221; might just end up within the same service, or having parts of them being used by multiple services).</p>
<p>First of all, have all information about the invoice available via the message only. This could be done by actually putting all the invoice data in the message, or by placing a URI instead where other systems can HTTP GET it from &#8211; <a href="http://udidahan.weblogs.us/category/rest/">REST style</a>. This decreases coupling between the <a href="http://udidahan.weblogs.us/category/pubsub/">publisher and its subscribers</a>. However, we haven&#8217;t solved the problem of our web apps getting access to the relevant data in the CRM system.</p>
<p>The solution presents itself at the business level. The invoice is not &#8220;complete&#8221; without the appropriate CRM data. Therefore, it does not make sense for a service to publish it that way. Let&#8217;s call this service the Purchasing Service. It would handle the workflow of receiving the first system&#8217;s event, adding the invoice to the CRM system, and taking the resulting full invoice data and publishing that. All external systems like the web apps would see just the final event. Orchestration, if there even is such a thing, occurs within the service boundary. This technological level intermedation isn&#8217;t even a blip at the business level. We can also imagine other services, say a Sales Service, that would use the CRM system as well.</p>
<p>In summary, when moving to <a href="http://udidahan.weblogs.us/category/soa/">SOA</a>, intermediation provides many technological benefits in getting data and behavior to work across existing systems and applications, however it&#8217;s laregly a NO-OP at the service level. After phasing out many of those existing applications behind the service boundaries, the same service-level interactions would persist. Your Service-Oriented Architecture would not be any different. That&#8217;s the technical agility aspect of SOA.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/19/on-intermediation-and-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Astoria, SDO, and irrelevance</title>
		<link>http://www.udidahan.com/2007/05/01/astoria-sdo-and-irrelevance/</link>
		<comments>http://www.udidahan.com/2007/05/01/astoria-sdo-and-irrelevance/#comments</comments>
		<pubDate>Tue, 01 May 2007 06:26:24 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Data Access]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SCA & SDO]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/01/astoria-sdo-and-irrelevance/</guid>
		<description><![CDATA[At MIX, Microsoft announced the coming of a new &#8220;technology&#8221; code-named &#8220;Astoria&#8221; with the following purpose in mind:

The goal of Microsoft Codename Astoria is to enable applications to expose data as a data service that can be consumed by web clients within a corporate network and across the internet. The data service is reachable over [...]]]></description>
			<content:encoded><![CDATA[<p>At MIX, Microsoft announced the coming of a new &#8220;technology&#8221; code-named <a href="http://astoria.mslivelabs.com/">&#8220;Astoria&#8221;</a> with the following purpose in mind:</p>
<blockquote><p>
The goal of Microsoft Codename Astoria is to enable applications to expose data as a data service that can be consumed by web clients within a corporate network and across the internet. The data service is reachable over HTTP, and URIs are used to identify the various pieces of information available through the service. Interactions with the data service happens in terms of HTTP verbs such as GET, POST, PUT and DELETE, and the data exchanged in those interactions is represented in simple formats such as XML and JSON.
</p></blockquote>
<p>To me, this sounds like an unarchitected mashup of <a href="http://udidahan.weblogs.us/category/rest/">REST</a> and the irrelevant part of <a href="http://udidahan.weblogs.us/category/sca-sdo/">SDO</a>.</p>
<p>Please, Microsoft, just stop. You&#8217;re going the wrong way. We really don&#8217;t need yet another <a href="http://udidahan.weblogs.us/category/data-access/">data access</a> strategy from you.</p>
<p><a href="http://patricklogan.blogspot.com/2007/04/maybe-knot.html">Patrick Logan</a> is still waiting to see anything concrete come out before weighing in. While <a href="http://codebetter.com/blogs/sam.gentile/archive/2007/04/30/new-and-notable-163-special-mix-07-edition.aspx">Sam Gentile</a> has given it the &#8220;New and Notable&#8221; stamp. <a href="http://weblogs.asp.net/fmarguerie/archive/2007/04/30/jasper-and-astoria-projects-to-keep-an-eye-on.aspx">Fabrice Marguerie</a> will be investigating as well. And <a href="http://weblogs.asp.net/pgielens/archive/2007/04/30/restful-data-services.aspx">Paul Gielens</a> also finds the REST path worthwhile.</p>
<p>But I&#8217;ve got to say, I&#8217;ve been against these &#8220;data services&#8221; from day one. The REST style is most applicable for large, chunky resources &#8211; while this seems to be targeting single tables in the database. Look at <a href="http://udidahan.weblogs.us/2007/05/01/does-rest-simplify-communication-more-than-soa/">this discussion on REST vs SOA</a> for some examples.</p>
<p>I am skeptical but will keep watching. But, what with all these fine bloggers giving me the low-down, I&#8217;m sure we&#8217;ll be finding out the important part soon &#8211; you know, the part Microsoft doesn&#8217;t put online <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/01/astoria-sdo-and-irrelevance/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Service Component Architecture, Service Data Objects, and my bus</title>
		<link>http://www.udidahan.com/2007/04/30/service-component-architecture-service-data-objects-and-my-bus/</link>
		<comments>http://www.udidahan.com/2007/04/30/service-component-architecture-service-data-objects-and-my-bus/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 13:30:58 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/04/30/service-component-architecture-service-data-objects-and-my-bus/</guid>
		<description><![CDATA[There&#8217;s been quite a flurry of activity around Service Component Architecture (SCA) and Service Data Objects (SDO) in the non-Microsoft community. These specs have been sent for OASIS ratification and have garnered support from the Open Service Oriented Architecture (OSOA) organization &#8211; a collaboration of a dozen top software vendors including IBM.
I&#8217;ve been getting some [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been quite a flurry of activity around Service Component Architecture (SCA) and Service Data Objects (SDO) in the non-Microsoft community. These specs have been sent for OASIS ratification and have garnered support from the Open Service Oriented Architecture (OSOA) organization &#8211; a collaboration of a dozen top software vendors including IBM.</p>
<p>I&#8217;ve been getting some questions on how these upcoming standards correspond to what I&#8217;ve been describing about SOA. Specifically, how does SCA relate to <a href="http://udidahan.weblogs.us/2006/08/28/podcast-business-and-autonomous-components-in-soa/">the Business Components and Autonomous Components I podcasted about</a>.</p>
<p>First of all, I&#8217;d say that the SDO thing is, in my opinion, &#8220;much ado about nothing&#8221;. These are &#8220;merely&#8221; the messages that are sent between services. We don&#8217;t need further standardization there, if the WS-Splat has taught us anything it&#8217;s that more is definitely not better.</p>
<p>In terms of SCA, it&#8217;s components seem to correspond to the <a href="http://udidahan.weblogs.us/2007/04/01/service-layer-separation-of-concerns/">Service Layer</a> of an Autonomous Component.</p>
<p>What does all this have to do with Web Services? Well, in both the SCA/SDO case and in my ESB/SOA case, we add constraints and guidelines on top of the generic ways WSDL has been mangled by the tooling.</p>
<p>In all cases, we still need to discuss what makes a good contract &#8211; what is good message design. I&#8217;ll be dealing with that in the next coming days.</p>
<p>More information:</p>
<p><a href="http://www.ibm.com/developerworks/blogs/page/woolf?entry=service_component_architecture_sca">Info from IBM on SCA.</a><br />
<a href="http://www.ibm.com/developerworks/blogs/page/woolf?entry=service_data_objects_sdo">Info from IBM on SDO.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/04/30/service-component-architecture-service-data-objects-and-my-bus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autonomous Services &#8211; a step beyond Service Orientation</title>
		<link>http://www.udidahan.com/2006/01/08/autonomous-services-a-step-beyond-service-orientation/</link>
		<comments>http://www.udidahan.com/2006/01/08/autonomous-services-a-step-beyond-service-orientation/#comments</comments>
		<pubDate>Mon, 09 Jan 2006 05:09:31 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Availability]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/245</guid>
		<description><![CDATA[After starting to write a whitepaper on Workflow in Service Oriented Architectures, I wanted to reference some prior work published on autonomous services (so that the whitepaper wouldn&#8217;t turn into a book). Anyway, after some futile googling, I&#8217;ve decided to give in and write it up myself.
The tenets of Service Orientation as put forth by [...]]]></description>
			<content:encoded><![CDATA[<p>After starting to write a whitepaper on Workflow in Service Oriented Architectures, I wanted to reference some prior work published on autonomous services (so that the whitepaper wouldn&#8217;t turn into a book). Anyway, after some futile googling, I&#8217;ve decided to give in and write it up myself.</p>
<p>The tenets of Service Orientation as put forth by Microsoft include one about “autonomy”. The tenet states that “Services should be autonomous”. After some digging, I found out that the intent of the authors was “The teams that develop different services should not be dependent on each other”, or in shortened form “Autonomous Teams”. This revelation was surprising to me since the real meaning of the tenet was less profound than what I had imagined – autonomous computing.</p>
<p>The idea of autonomous computing has been around for some time and presents a view of the world in which computing units cooperate to achieve global goals yet are not dependent even on the existence of other computing units to function. (If you’re envisioning tiny robots playing soccer, you’re not far off.)</p>
<p>So when I first saw the autonomy tenet, I was thinking of autonomous services: services so loosely coupled that the correct functioning of a service would not be dependent on the correct functioning of other cooperating services. Services loosely coupled in time as well as in code. Obviously this would mean that if Service A needed to cooperate with Service B, and Service B was not even available, Service A would continue to function, and live up to its service-level-agreement. But before we start drifting off into the outer reaches of business-IT alignment, let’s bring this down to earth.</p>
<p>Before we get into a detailed analysis of the how, let’s first agree on the why. Despite being a historical trend, architectures these days tend to be more loosely coupled than before. Loose coupling being a good thing that enables us to better manage the complexity inherent in large software projects. The practical test of loose coupling in a system is changing the public interface of a class and seeing how much of the system doesn’t compile any more (dynamic languages aside). Service Orientation brings us tenets that, when followed, lead to more loosely coupled architectures than if we actively did not follow them. I think that we can agree then that if we could somehow achieve the loose coupling in time mentioned above, without paying an arm and a leg, that would move our architectures another step forward.</p>
<p>Looking back on the evolution of the field of distributed computing, we can see that, over time, less and less things are being assumed. It is now well understood that anything that goes over the network takes much longer than those calls that stay on the same machine, yet once systems were built that abstracted the network communication into looking just like local calls. The performance of those systems was matched only by their lifetime. With the advent of autonomous computing, the assumption that the called service is available and will respond in a timely fashion is called into question. In the real world, servers crash and network equipment goes up in smoke – we can no longer take for granted that communication will always be available, and that its quality will be good enough. In essence, this marks the end of synchronous RPC/RMI. The following code just won’t cut it in this brave new world:</p>
<p>localhost.service1 s1 = new localhost.service1();<br />
orderReply = s1.HandleOrder(orderRequest);</p>
<p>If the service is unavailable, what will happen to our order request? Will it just get lost?<br />
If the service takes a long time to respond, will our server tie up resources for the same amount of time? If this happens under peak load, might it cause our server to crash?</p>
<p>Performing the above code on a different thread won’t make any difference, autonomous services means the end of Request/Response as we know it.</p>
<p>“No Request/Response between services?!”, you ask incredulously.</p>
<p>The simple answer is “yes”, but there is another level of meaning to it. If you have two software entities that between them you just HAVE to have request/response communication, then they should be in the same service. This is where the real architectural guidance comes in. </p>
<p>In component-orientation and object-orientation, the division of the solution into the right number of parts, with each part having the right amount of responsibility was a kind of black magic passed from master to apprentice. Getting the boundaries right was paramount, but difficult. A number of litmus tests are used to catch the gross errors, and the rest is just gut. So too, the request/response test helps us catch gross errors in service boundary demarcation.</p>
<p>The interesting thing that happens after separating our services out this way is that we often end up with services that mirror the way the business side is structured. Voila, business-IT alignment with your hands closed and one eye tied behind your back! Well, it’s one step in the right direction anyway.</p>
<p>This leaves us with the original types of one-way communication (fire-and-forget, pub-sub, etc) and with one kind of two-way communication: duplex. Duplex is really just two one-way communications (A to B, then B to A) that are correlated. First, I send a message to you, mark it with an id number, and save that number. At some future point in time, you get the message, process it, and send a message back with its own id number. But, you’ll have to put my original id number on the message too, so that I’ll know that your message is a response to mine. At some even more distant point in the future, I get a message from you, look at it, and see that it is the long-awaited response to the request I sent way back when.</p>
<p>If I had to sum up the difference autonomous services bring to the styles of  communication used between services, I’d say this: You get a message, look at it, and figure out what it means and what you should do. This isn’t an infrastructure issue. There application level timeouts to deal with (If I don’t get a response back in 3 days, then notify the supervisor), and long-running workflows to manage (next whitepaper ).</p>
<p>If there is one thing to pay attention to in this whole “autonomous services paradigm” it is that the focus has shifted from between services to within a single service. In parting, I want to let you know that systems can be, and are being, built this way. It works. It better than works. Systems created this way are more robust to failures (seeing as they’re designed for failures makes it less impressive) and easier to manage. Give it a try. You didn’t really think that SOA would fizzle away into a bunch of WS specs, did you?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2006/01/08/autonomous-services-a-step-beyond-service-orientation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

