<?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; Space-Based Architecture</title>
	<atom:link href="http://www.udidahan.com/category/space-based-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Fri, 10 Feb 2012 21:01:32 +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>On rising data volumes</title>
		<link>http://www.udidahan.com/2007/08/20/on-rising-data-volumes/</link>
		<comments>http://www.udidahan.com/2007/08/20/on-rising-data-volumes/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 07:40:47 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/08/20/on-rising-data-volumes/</guid>
		<description><![CDATA[Larry&#8217;s post Data Volumes Trumping Core Multiplication? Interesting Thought raises some interesting questions as to what will have a larger impact on the way we use program computers &#8211; rising data volumes or more cores:

It seems to me that nowadays we work more and more with data streams and not data sets. On a transaction-to-transaction [...]]]></description>
			<content:encoded><![CDATA[<p>Larry&#8217;s post <a href="http://www.knowing.net/PermaLink,guid,7075ce1b-fa59-4bca-926f-79fb45f9670e.aspx">Data Volumes Trumping Core Multiplication? Interesting Thought</a> raises some interesting questions as to what will have a larger impact on the way we use program computers &#8211; rising data volumes or more cores:</p>
<blockquote><p>
It seems to me that nowadays we work more and more with data streams and not data sets. On a transaction-to-transaction basis, I think it&#8217;s an uncommon application that uses more data than can fit into several gigabytes of RAM (obvious exception: multimedia data).
</p></blockquote>
<p>While data stream processing is the heartbeat of many verticals, I&#8217;m seeing another trend there as well &#8211; the use of historical data as a part of that data stream processing. Some people have begun calling this Complex Event-Stream Processing (CEP), and the analysts are already beginning to eat it up. Regardless, the problem is that it is difficult to hold all historical data in memory so that when events arrive we can process them quickly.</p>
<p>So, my bottom line is that we&#8217;re being hit on multiple fronts &#8211; both the rate at which we need to process events and the amount of data required to process each event. Multiple cores help a bit, but probably not enough to discount scaling up to more machines. All this at the end of the day points out that we should not treat multiple cores any differently than multiple machines.</p>
<p>So, we either need languages to handle this (<a href="http://www.erlang.org/">Erlang</a> for one) or possibly frameworks (<a href="http://www.NServiceBus.com">NServiceBus</a> is my contribution). All I know is that Layered (Tiered) Architectures won&#8217;t cut it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/08/20/on-rising-data-volumes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Space-Based Architecture – scalable, but not much to do with SOA</title>
		<link>http://www.udidahan.com/2007/06/20/space-based-architecture-%e2%80%93-scalable-but-not-much-to-do-with-soa/</link>
		<comments>http://www.udidahan.com/2007/06/20/space-based-architecture-%e2%80%93-scalable-but-not-much-to-do-with-soa/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 21:31:25 +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[Performance]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/20/space-based-architecture-%e2%80%93-scalable-but-not-much-to-do-with-soa/</guid>
		<description><![CDATA[Space-Based Architecture (or SBA for short) just might be in your future if your building large-scale distributed systems. By focusing on high-throughput and low latency, SBA joins messaging and in-memory data caching and adds a good measure of load partitioning. However, with the entire industry enamoured with SOA, what place is left for SBA?
Before going [...]]]></description>
			<content:encoded><![CDATA[<p>Space-Based Architecture (or SBA for short) just might be in your future if your building large-scale distributed systems. By focusing on high-throughput and low latency, SBA joins messaging and in-memory data caching and adds a good measure of load partitioning. However, with the entire industry enamoured with SOA, what place is left for SBA?</p>
<p>Before going too far ahead, you might want to take a look at my previous post <a href="http://udidahan.weblogs.us/2007/01/20/space-based-architectural-thinking/">&#8220;Space-Based Architectural Thinking</a>, or listen to my podcast <a href="http://udidahan.weblogs.us/2007/04/10/podcast-space-based-architectures-for-the-web/">Space-Based Architecture for the Web</a>. There&#8217;s also a 30 minute webcast online describing SBA more fully <a href="http://www.bejug.org/confluenceBeJUG/display/PARLEYS/SBA+-+Scalable+SOA">here</a>. I&#8217;m also going to try to stay away from things concerning Jini this time after already discussing <a href="http://udidahan.weblogs.us/2007/06/12/don%e2%80%99t-let-the-jini-out-of-the-bottle-on-soa/">the connection between Jini and SOA</a>, and the tradeoffs between two general approaches: <a href="http://udidahan.weblogs.us/2007/05/10/tasks-and-spaces-versus-messages-and-handlers/">Tasks and Spaces vs Message and Handlers</a>.</p>
<p>OK, so the issue of state-management is a big one. Everybody wants to work stateless, because it scales. The only problem is that the business processes that we are automating are long running, meaning that there are external systems or people involved. This makes these processes inherently stateful. So, we need a way to scale statefully &#8211; SBA gives us that. For some background on the &#8220;Shared Nothing Architecture&#8221;, I suggest reading <a href="http://www.dehora.net/journal/2004/04/interprocess_soa.html">this post on inter-process SOA</a> and <a href="http://www.zefhemel.com/archives/2004/09/01/the-share-nothing-architecture">this one as well</a>.</p>
<p>Availability also has to be handled, not only in terms of having enough servers online to handle the required load but in having all the data required to process each request be accessible. This has often been handled by the database using ACID transactions &#8211; durability being that which solved availability issues, but also hurting latency the most. The problem with saving the state of our long-running business processes/workflows in the database is the load and the responsiveness requirements. In many verticals &#8211; telcos, financial, and defense to name a few, we need millisecond level latency on each stage of the workflow. This is what leads SBA to the in-memory, replicated data grid.</p>
<p>Note that SBA only intends to take these workflows out of the database, and not anything else &#8211; especially not Master Data. The lifetime of these workflows is incredibly short compared to that of master data like customers and products. It will have much different backup strategies as well. In terms of load, these workflows will be heavy on reads and writes together in the same transactions, but quite low in terms of just reads. If we have workflows that perform work in parallel, we easily end up with concurrency requirements that make DBAs cringe under the barrage of short transactions. </p>
<blockquote style="background-color:white"><p>
If you&#8217;re worried that Workflow Foundation (WF) won&#8217;t scale because of the above, you needn&#8217;t be. You can (more or less easily) replace the persistence mechanism of WF with your own, saving your workflow instances to an in-memory replicated data grid.
</p></blockquote>
<p>By enabling the objects in the grid to call back into logic on your servers, you have, in essence, done messaging and more. The added benefit that SBA receives from this is a unification of technology between caching and messaging. This translates directly to savings when it comes time to cluster each of those technology&#8217;s environments.</p>
<p>Finally, if we can find an attribute in the incoming stream of messages that creates a nice even distribution, we can then partition our load between our servers by that key. This will work up to the point where the load per key increases beyond a single server&#8217;s capacity, and then we have to look at re-partitioning, a non-trivial problem. However, if we put objects in our grid that represent the master data, and tie them to our workflow instances with both of those tied to the key of our load, a smart infrastructure can make sure all that data is already resident on the server that is handling that piece of the load. That decreases latency even more since we no longer have to pay network roundtrips to collect all the data needed before we can process it. That&#8217;s a substantial advantage for the above verticals.</p>
<p>But all of this has nothing to do with SOA.</p>
<p>Sure, it&#8217;ll change how we implement our Services internally, but it has no impact on their interfaces or the top-level service decomposition. In the Java community, the word &#8220;service&#8221; is often used to describe the logic of a system. Great significance is placed on keeping these &#8220;services&#8221; simple, as in Plain-Old Java Objects. The fact of the matter is that the logic of the system should be simple and independent of other concerns like data access and communcations (a la Web Services), but that does not make it a service, not in the SOA sense.</p>
<p>For more information on what Services in SOA are like, check out this podcast on <a href="http://udidahan.weblogs.us/2006/08/28/podcast-business-and-autonomous-components-in-soa/">Business and Autonomous Components in SOA</a>. Actually, SBA will probably have the biggest impact on the way <a href="http://udidahan.weblogs.us/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/">autonomous components will handle service-level agreements</a>.</p>
<p>So, it appears that even with SOA, SBA has its place. The former dealing with business level agility, the latter dealing with all the technical aspects of supporting that agility. If you&#8217;re tasked with the designing the architecture of a scalable, available, high-throughput, low-latency distributed system, I&#8217;d strongly advise you to look at SBA &#8211; the technical value is overwhelming. Even if you don&#8217;t utilize all elements of SBA and choose the <a href="http://www.theserverside.com/tt/articles/article.tss?l=DistCompute">Master Worker Pattern</a> instead of load partitioning, you&#8217;ll find the technologies supporting SBA to be quite flexible in that respect.</p>
<p>Will Space-Based Architectures be a part of your future? I don&#8217;t know for sure, but they&#8217;re a most welcome part of my present.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/20/space-based-architecture-%e2%80%93-scalable-but-not-much-to-do-with-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tasks and Spaces versus Messages and Handlers</title>
		<link>http://www.udidahan.com/2007/05/10/tasks-and-spaces-versus-messages-and-handlers/</link>
		<comments>http://www.udidahan.com/2007/05/10/tasks-and-spaces-versus-messages-and-handlers/#comments</comments>
		<pubDate>Thu, 10 May 2007 15:58:45 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/10/tasks-and-spaces-versus-messages-and-handlers/</guid>
		<description><![CDATA[While going through the JavaSpace presentation I found on Owen Taylor&#8217;s blog, I kept saying to myself, &#8220;well, I can do that without a space&#8221;, until I got to one part of it.
The ability to introduce a new task at runtime without restarting any servers, and have new clients be able to send those tasks, [...]]]></description>
			<content:encoded><![CDATA[<p>While going through the <a href="http://jroller.com/page/owentaylor?entry=great_presentation_on_javaspaces_and">JavaSpace presentation I found on Owen Taylor&#8217;s blog</a>, I kept saying to myself, &#8220;well, I can do <i>that</i> without a space&#8221;, until I got to one part of it.</p>
<p>The ability to introduce a new task at runtime without restarting any servers, and have new clients be able to send those tasks, and existing servers perform them. I never did that before.</p>
<p>This is <i>very</i> important when you&#8217;ve already got a system running and you want to expand on it. I think that this covers at least half of all the software work being done on the planet.</p>
<p>The interesting thing is that this ability comes in two parts &#8211; one design, the other technology.</p>
<p>In terms of design, in order for existing servers to be able to do the work of the new task without any kind of restart, we need the code for performing the work of the task to reside in the task itself, possibly in some kind of &#8220;execute&#8221; method. The server would simply take a task out of the &#8220;queue&#8221; of pending tasks and call that execute method.</p>
<p>Now, those of us trying to do this with Microsoft technology know that if the assembly containing the code for that task was not available on that machine, this wouldn&#8217;t work. Technologically speaking, we&#8217;d receive some kind of deserialization exception that resulted from a TypeNotFoundException. In other words, in order to support the new task, we&#8217;d need to &#8220;install&#8221; all of its participating assemblies on all our servers.</p>
<p>For those of us who know and use <a href="http://www.jini.org/wiki/Main_Page">Jini</a> with Java, we get this behavior automatically &#8211; the bytecode of the task is downloaded automatically. This is an advantage in terms of operations, but I&#8217;m not an operations guy so I can&#8217;t say how huge this really is.</p>
<p>The interesting thing for me in this design is that it&#8217;s somewhat different from <a href="http://udidahan.weblogs.us/2006/06/02/can-indigo-be-my-bus/">the messaging paradigm I&#8217;ve been so successful with</a>. Here we don&#8217;t use messages as simple Data Transfer Objects. Tasks contain both data and behavior. This behavior used to belong to message handlers. I like having separate message handlers, it enables me to create <a href="http://udidahan.weblogs.us/2007/04/01/service-layer-separation-of-concerns/">very flexible pipelines</a>.</p>
<p>Here&#8217;s how I&#8217;d trade it off. When using Jini, the tasks style gives me zero footprint deployment. When using .NET, if I&#8217;m already installing things on my existing servers, I can deploy new messages and handlers just as well as the task assemblies. The problem is that I&#8217;d need some way for the server to pick up on the new handlers &#8211; a background thread scanning the deployment directory, or the FileSystemWatcher (given the fact that it sometimes misses things).</p>
<p>Well, it looks like both design styles are feasible on both platforms. The ability to have code download automatically on the Java platform is a plus that is most felt when using tasks.</p>
<p>Bottom line so far, there&#8217;s a lot to learn from JavaSpaces, and even if you don&#8217;t use Java, Jini, or Space technologies (<a href="http://www.gigaspaces.com">like this</a>), the design patterns employed there are extremely valuable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/10/tasks-and-spaces-versus-messages-and-handlers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using spaces with web services</title>
		<link>http://www.udidahan.com/2007/05/05/using-spaces-with-web-services/</link>
		<comments>http://www.udidahan.com/2007/05/05/using-spaces-with-web-services/#comments</comments>
		<pubDate>Sat, 05 May 2007 09:16:38 +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[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/05/using-spaces-with-web-services/</guid>
		<description><![CDATA[Willam Brogden has an article up on SearchWebServices.com on How Web Services can use JavaSpaces. I don&#8217;t want all the Microsoft folks tuning out now that they&#8217;ve heard the &#8220;J&#8221; word, so let me just say that there are technologies out there for .NET too.
A &#8220;JavaSpace&#8221; is really just a space, which is, at the [...]]]></description>
			<content:encoded><![CDATA[<p>Willam Brogden has an article up on SearchWebServices.com on <a href="http://searchwebservices.techtarget.com/tip/0,289483,sid26_gci1251765,00.html?track=NL-449&#038;ad=586258&#038;asrc=EM_NLT_1307248&#038;uid=5532089">How Web Services can use JavaSpaces</a>. I don&#8217;t want all the Microsoft folks tuning out now that they&#8217;ve heard the &#8220;J&#8221; word, so let me just say that there are technologies out there for .NET too.</p>
<p>A &#8220;JavaSpace&#8221; is really just a <a href="http://udidahan.weblogs.us/2007/01/20/space-based-architectural-thinking/">space</a>, which is, at the end of the day, a queryable distributed in-memory hashtable. Something many of us are already doing for caching. The reason you shouldn&#8217;t be doing this yourself is simple. While keeping a single hashtable in memory on a single computer and synchronizing it against changes to your database is simple, doing that in a highly available manner across multiple servers is not. Vendors providing solutions in this space include:</p>
<ul>
<li><a href="http://www.gigaspaces.com">Gigaspaces</a></li>
<li><a href="http://www.ibm.com/developerworks/websphere/downloads/objectgrid/">IBM ObjectGrid</a></li>
<li><a href="http://www.alachisoft.com/ncache/index.html">Alachisoft&#8217;s NCache</li>
<li><a href="http://www.gemstone.com">GemStone</a></li>
<li><a href="http://www.tangosol.com/coherence-.net.jsp">Tangosol&#8217;s Coherence</a></li>
</ul>
<p>But there are others as well. Bottom line: don&#8217;t develop one of your own. Do a proof of concept with your short list of vendors and go from there.</p>
<p>The article sums it up nicely like this:</p>
<blockquote><p>
Although JavaSpaces servers are not trivial to set up, they are much easier than any other type of grid computing server. Furthermore, the simplicity of the interface makes the learning curve easier. The greatest advantage of the JavaSpaces approach is the ease with which additional workers can be added to the grid. </p>
<p>It should be clear from the example that there is a lot of extra communication traffic in a JavaSpaces solution so the only reason to use JavaSpaces or any other form of grid computing in support of a Web service is a requirement for computing power or special resources that are not feasible to supply on the server directly.
</p></blockquote>
<p>I have this to add to it. Whereas most traditional systems keep the idea of message-based communication and data caching separate, spaces allow you to kill two birds with one stone. Even if you don&#8217;t go the whole Space-Based Architecture route, you&#8217;ll find that spaces will fit nicely in your distributed architecture toolkit &#8211; I know I did.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/05/using-spaces-with-web-services/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>[Podcast] Space-Based Architectures for the Web</title>
		<link>http://www.udidahan.com/2007/04/10/podcast-space-based-architectures-for-the-web/</link>
		<comments>http://www.udidahan.com/2007/04/10/podcast-space-based-architectures-for-the-web/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 05:27:56 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/04/10/podcast-space-based-architectures-for-the-web/</guid>
		<description><![CDATA[This week&#8217;s question comes from Regu who asks:

Udi,
In a web scenario, how do you correlate multiple events in a SBA that have been created out of a single request? Also, how would you ensure that the response to the user is synchronous and meaningful?
Of course we may use a correlation ID across the events. In [...]]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s question comes from Regu who asks:</p>
<blockquote><p>
Udi,</p>
<p>In a web scenario, how do you correlate multiple events in a SBA that have been created out of a single request? Also, how would you ensure that the response to the user is synchronous and meaningful?</p>
<p>Of course we may use a correlation ID across the events. In this case will the request thread wait until all events for the request are processed?
</p></blockquote>
<p>Get it via the Dr. Dobb&#8217;s site <a href="http://ddj.com/dept/webservices/198900592">here</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070410ud01.mp3?podcast=070410ud01.mp3">here</a>.</p>
<p><u>Additional References</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/02/12/so-how-many-machinescpus-do-we-need/">So, how many machines/CPUs do we need?</a></li>
<li><a href="http://udidahan.weblogs.us/2007/01/20/space-based-architectural-thinking/">Space-Based Architectural Thinking</a></li>
</ul>
<p>Want more? Go to the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/04/10/podcast-space-based-architectures-for-the-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Space-Based Architectural Thinking</title>
		<link>http://www.udidahan.com/2007/01/20/space-based-architectural-thinking/</link>
		<comments>http://www.udidahan.com/2007/01/20/space-based-architectural-thinking/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 13:24:34 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Space-Based Architecture]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/archives/365</guid>
		<description><![CDATA[I’ve began rethinking certain assumptions about how I use message passing in my distributed systems after reading things like “SBA &#038; EDA Lessons Learned” from the excellent “Panic from Fuzzy” blog. Since I was only familiar with the Tuple Space theory but have never employed space technologies like JavaSpaces, I did the only thing I [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="EN-US"><font face="Times New Roman" size="3">I’ve began rethinking certain assumptions about how I use message passing in my distributed systems after reading things like “</font><a href="http://feeds.feedburner.com/~r/PanicFromFuzzy/~3/67960493/sba-eda-lessons-learned.html"><font face="Times New Roman" size="3">SBA &#038; EDA Lessons Learned</font></a><font size="3"><font face="Times New Roman">” from the excellent “Panic from Fuzzy” blog. Since I was only familiar with the Tuple Space theory but have never employed space technologies like JavaSpaces, I did the only thing I could do – I convened a session on it at the Software Architecture Workshop so as to benefit from the knowledge and experience of those frightfully smart guys.<br />
</font></font></span><span lang="EN-US"><font face="Times New Roman" size="3"> </font></span><span lang="EN-US"><span lang="EN-US"><font size="3"><font face="Times New Roman">The functional issue that attracted me to spaces was its ability to do very dynamic like content-based filtering. By subscribing to notifications based on a template, I could replace a broad and deep topic hierarchy and handle some other interesting scenarios as well. For instance, when a given user is working on a certain set of data – a tree of specific instances, I would like that machine to only get updates on that data, which could be quite a substantial savings in terms of network load. Another case is where the user is only allowed to see certain instances of the same type.<br />
</font></font></span><span lang="EN-US"><font face="Times New Roman" size="3"> </font></span></p>
<p></span><span lang="EN-US"><font size="3"><font face="Times New Roman">About three quarters of the way through the session, when I was still thinking that I could put entities in the space, someone called my attention to the fact that I would have to give up the cross-entity transactional semantics that I was so used to. For instance, in order to implement a business rule when an order is cancelled the customer may also need to be updated to a non-preferred status. This calls for a transactional scope around both of these updates – on the business level. If the entities were in the space, the naïve solution would be to Take the order, change its status to cancelled, Put it back in the space, Take the customer, updates its status, and Put it back in the space. By not being able to perform all this work transactionally, failure cases would need to be handled by compensating transactions – a significant jump in complexity.<br />
</font></font></span><span lang="EN-US"><font face="Times New Roman" size="3"> </font></span><span lang="EN-US"><span lang="EN-US"><font size="3"><font face="Times New Roman">Needless to say I left that session quite a bit cooler on Space-Based Architectures than I was going in, but later on in the day, over a beer with one of the guys, he suggested that maybe spaces could be used as an alternative way to do message passing. Instead of Taking and Putting entities, we could do the same for messages – since the business-type of transactions would by-and-large correlate to a single message. We could benefit from the dynamic subscription behavior and possibly do away with a deep, and sometimes fragile, topic hierarchy. Once again my enamourment was on the rise.<br />
</font></font></span><span lang="EN-US"><font face="Times New Roman" size="3"> </font></span></p>
<p></span><span lang="EN-US"><font size="3"><font face="Times New Roman">But as do all fickle loves, this too was not destined to last. After doing some more thinking I remembered about handling failure cases in terms of message passing. When dealing with reliable messages, the receipt of a message, its handling, and the subsequent sending of new messages is at times required to be all transactional. I was once again required to perform a Take operation as well as multiple Put operations in a single transaction.<br />
</font></font></span><span lang="EN-US"><font face="Times New Roman" size="3"> </font></span><span lang="EN-US"><span lang="EN-US"><font size="3"><font face="Times New Roman">I hardly believe that this is the end of the story for me and spaces. I’m still getting my head around using spaces as a technology choice in my current architectures and examining new architectural possibilities around it as well. We are definitely living in interesting times.<br />
</font></font></span></p>
<p></span></p>
<p><span lang="EN-US"><span lang="EN-US"><font size="3"><font face="Times New Roman"><br />
<b>Update</b></p>
<p>Check out the &#8220;Ask Udi&#8221; podcast for this topic: <a href="http://udidahan.weblogs.us/2007/04/10/podcast-space-based-architectures-for-the-web/">Space-Based Architectures for the Web</a>.</p>
<p></font></font></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/01/20/space-based-architectural-thinking/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

