<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Architecture</title>
        <link>http://www.shanghai-software.com/blog/category/9.aspx</link>
        <description>Architecture</description>
        <language>en-AU</language>
        <copyright>Ben Kloosterman</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <item>
            <title>SOA 1 class per service Juval Lowy framework  </title>
            <link>http://www.shanghai-software.com/blog/archive/2009/11/01/soa-1-class-per-service-juval-lowy-framework.aspx</link>
            <description>I posted this a year ago....

I'm really against this make each class a separate service concept.

It reminds me of the Microkernel and especially workplace OS but worse.

The idea of microkernels was each service ( like memory) was an easily managed entity with carefully defined inputs and outputs which could be consumed.)

Workplace OS took this to limit and performance was so poor that no amount of optimization would help. So they had no choice but to scrap the project ( were talking $2B 10 years ago)

the bad thing is once such a design is made and implemented just like workplace OS it is very difficult and expensive to fix.

Classes by nature frequently communicate with other classes ,serializing everything makes this far to slow. Think about big orders with 10,000 line items each line item could be a separate service call to add up some total and what do you gain ?

I consider service to service communication and some sort of nearness analysis a vital part of SOA and grouping related classes into services will help significantly by

- Increasing performance
- Allow for better maintenance and less change as related changes will deploy together .
- Allow for better OO/maintenance and Agile techniques within each service. ( though less outside)
- Allows better integration and use of different services such as Java , CRM/ERP services etc.
- Encourages chunkier cross service calls and better attention paid to the service interface ( for easier use, compatibility/maintenance and performance)
- Discourages the service as a DB store proc wrapper.
- Avoids having to put performance hacks in the wrong place to try to avoid cross class calls.

This does not mean services should be 20 classes 3 is a good line but 1 to 9 is ok in a number of cases depending on class relationships. Basically if 2 classes communicate all the time they should be in the same service.

I can see in 5-15 years hosted environments/frameworks hosting classes which can be moved to machines or be in proc though its far too early for this and you NEED the ability for classes to communicate via normal inproc ( without serialization) .

I not you mention this for the future but telling people to use each class as a service now without some more comments on the hazzards ( especially when they don't have a lot of experience in SOA) will lead to a lot of frustration for some .&lt;img src="http://www.shanghai-software.com/blog/aggbug/51.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/11/01/soa-1-class-per-service-juval-lowy-framework.aspx</guid>
            <pubDate>Sun, 01 Nov 2009 13:12:25 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/51.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/11/01/soa-1-class-per-service-juval-lowy-framework.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/51.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/51.aspx</trackback:ping>
        </item>
        <item>
            <title>Is SSL really secure/too much security</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/04/12/42.aspx</link>
            <description>Is SSL really secure ? By encrypting messages on the wire  people get the feeling its secure and people use it ubiquitiously.&lt;br /&gt;
&lt;br /&gt;
Is encrypting on the wire something that really helps ? I don't really think  so , with most networks it is VERY difficult and practically impossible to do . &lt;br /&gt;
&lt;br /&gt;
eg &lt;br /&gt;
- In a LAN you need physical access to put a device in between reading all traffic from a PC ( in which case you have bigger problems) &lt;br /&gt;
- Switched mean a machine tap is not very usefull ( html is not broad cast) &lt;br /&gt;
- You need admin access to use a machine to tap  if you have this you can install a reader in the browser which logs your actions ( without the ssl) &lt;br /&gt;
- Tapping internet links is not possible due to the amount of traffic. Note smaller links could be monitored by a government agency &lt;br /&gt;
&lt;br /&gt;
However &lt;br /&gt;
&lt;br /&gt;
- A simple browser addin via a trojan or admin access can read all SSL !  &lt;br /&gt;
&lt;br /&gt;
What about tapping Wireless/GSM  , well wireless already has encryption . The encryption is prob harder to break then SSL due to the changing key,  &lt;br /&gt;
&lt;br /&gt;
So what do we get for SSL very little. Hence SSL just gives a false sense of security and wastes resources and adds complexity. &lt;br /&gt;
&lt;br /&gt;
This brings me to a point i did some consulting for a number of projects for a company  and the company had address information for their clients being sent to mobile phones . It was pointed out that the device only  kept the clients the driver visited and it would be a LOT easier and cheaper to just follow the vehicles.  We implementede it anyway as the client is always right .&lt;br /&gt;
&lt;br /&gt;
Still i feel people over engineer security ....in the wrong places. I have seen systems with good SSL but laughable or no authentication ...ummm.&lt;img src="http://www.shanghai-software.com/blog/aggbug/42.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/04/12/42.aspx</guid>
            <pubDate>Sun, 12 Apr 2009 00:47:21 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/42.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/04/12/42.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/42.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/42.aspx</trackback:ping>
        </item>
        <item>
            <title>Why should you use an Event Driven Architecture (EDA)?</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/03/27/why-should-you-use-an-event-driven-architecture-eda.aspx</link>
            <description>There is a lot of documentation on EDA and people working with SOA and call backs will naturally gravitate to EDA , but i have often wanted a simple reason why.  Here i will &lt;span style="font-style: italic;"&gt;attempt&lt;/span&gt; this and focus on service based EDA's. &lt;br /&gt;
&lt;br /&gt;
1.  It Naturally mirrors organisations.&lt;br /&gt;
&lt;br /&gt;
High level EDA events are business events. With EDA anybody may receive these events and act accordingly. This means extending events to new applications is a trivial excercise. &lt;br /&gt;
&lt;br /&gt;
2. Low integration costs&lt;br /&gt;
&lt;br /&gt;
Integration expenses are massive, EDA makes it really easy for systems to communicate even more so than SOA's which require writing a system to interact with the appropriate services.  With an EDA an admin can add a subscription and the appropriate messages will be sent to new system&lt;br /&gt;
&lt;br /&gt;
3. Lower hardware costs &lt;br /&gt;
&lt;br /&gt;
Sure machines are cheap but for large scale systems ( where EDA's shine) going from 500 servers to 10,000 servers is a big hit.  &lt;br /&gt;
&lt;br /&gt;
4. It is simpler.  Information which EDA's are good at often have to be polled . &lt;br /&gt;
&lt;br /&gt;
EDAs are often used for live events , when something happened with simple SOA services or with Databases this requires frequent polling.  Polling results in significant overheads and thare a few issues to ensure you dont get duplicate data.&lt;br /&gt;
&lt;br /&gt;
5. Information is live.  Anybody including clients can get information as soon as the company receives it . eg Bank transfers , courier scannings,share quotes  etc&lt;br /&gt;
&lt;br /&gt;
6. It brings organisations and their IT systems together.&lt;br /&gt;
&lt;br /&gt;
The easier integration and the capturing of real business events mean other IT teams are more likely to use them , this results in less duplication and technology islands. ( Though see below) &lt;br /&gt;
&lt;br /&gt;
7. It allows groups to be autonomous and still work with enterprise events. &lt;br /&gt;
&lt;br /&gt;
One of the big issues with SOA /large DB systems is its big centralised IT.  You sometimes need to meet standards etc . These standards are required since a single consumer can bring down the whole DB , With EDA down stream system systems provided little or no impact and hence can go unrestricted.  This allows quick and dirty systems needed for a new startup within the company to see if it is viable etc.  Futhermore you have a lot less restriction on the data you get , you are not required to use certain Service operations or stored procs. You can use any Xpath query and have the information you need in real time and can then store and use it yourself. &lt;br /&gt;
&lt;br /&gt;
8. Strong EDA's can result in smaller duplicated Data stores. &lt;br /&gt;
&lt;br /&gt;
In small organizations EDA will result in single data storage , in larger ones duplicate data will normally evolve , these will not have the same information but there will be overlap.  This is good as it allows the appropriate  business to manage the data.&lt;br /&gt;
&lt;br /&gt;
9. Creating a good EDA can be easier to implement than good SOA's.&lt;br /&gt;
&lt;br /&gt;
Creating a good SOA is hard , you need to consider Data ( multiple service access ?? ) , orchestration , polling ,Service Bus , Data ware housing etc &lt;br /&gt;
&lt;br /&gt;
With an EDA based SOA the focus is on Events and hence has a looser policy on SOA's , things like Data storage are up to the individual team who may or may nor share.&lt;br /&gt;
&lt;br style="font-weight: bold;" /&gt;
&lt;span style="font-weight: bold;"&gt;The key point here is the focus is and remains on the important part of the architecture the actual business events.&lt;/span&gt; SOA systems tend to wonder as vendors write many pages on their products and people spend a lot of time learning them and debating technical issues. &lt;br /&gt;
&lt;br /&gt;
10. Completely loosely coupled&lt;br /&gt;
&lt;br /&gt;
The sender knows nothing about the receiver and hence dependencies do not form.(Which also leads to lower integration costs above)  .&lt;br /&gt;
&lt;br /&gt;
Weaknesses&lt;br /&gt;
&lt;br /&gt;
1. Not suitable for most small companies &lt;br /&gt;
&lt;br /&gt;
Like SOA's its pointless using EDA for a small part of the enterprise. Its like designing a big building but make 1 apartment have full height curved windows.  The one exception is companies with lots of monotoring systems as these are by definition event driven  and hence map well to EDA's (Stock Brokers , Couriers , Police /Security , Military ,Aviation etc) &lt;br /&gt;
&lt;br /&gt;
2. No Shared Data .&lt;br /&gt;
&lt;br /&gt;
EDAs dont have any form of data storage and hence you still need these in your EDA . However they work well with Data warehouses which can store the data from the events it receives.  EDAs dont work well for firms with massive data processing ( eg Credit card bonus point provider). &lt;br /&gt;
&lt;br /&gt;
3. All data is live ,so bad for partially connected systems like mobile phones. &lt;br /&gt;
&lt;br /&gt;
Partially connected systems need a store retrieve mechanism ( Note our EDA system EDAM provides this) &lt;br /&gt;
&lt;br /&gt;
4. Need capability to receive events &lt;br /&gt;
&lt;br /&gt;
Receiving events requires a dynamic subscription or a fixed Ip address.  Dynamic subscriptions in WS-Eventing are a bit clumsy . Note EDAM has a &lt;a rel="" href="http://74.55.152.210/blog/WCF" title="WCF"&gt;Windows Communication Foundation&lt;/a&gt; interface to make this easy.  .Net services ESB also helps get through firewalls to receive events.&lt;img src="http://www.shanghai-software.com/blog/aggbug/37.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/03/27/why-should-you-use-an-event-driven-architecture-eda.aspx</guid>
            <pubDate>Fri, 27 Mar 2009 02:14:01 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/37.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/03/27/why-should-you-use-an-event-driven-architecture-eda.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/37.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/37.aspx</trackback:ping>
        </item>
        <item>
            <title>SOA and Cloud computing</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/03/27/soa-and-cloud-computing.aspx</link>
            <description>Great article from Zapthink. . Especially &lt;br /&gt;
"&lt;br /&gt;
&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;the ESB has been far too central in organization’s discussions about SOA. The logic goes that all you need to do is develop a bunch of Web Services, plop them on an ESB and voila, you have a SOA. Isn’t it amazing that you can get architecture without actually doing architecture? As ridiculous as this might sound, for many organizations, this approach represents fully their SOA strategy. But, the movement to cloud computing throws the ESB “strategy” out the window. &lt;o:p /&gt;&lt;/span&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;In the cloud computing world, you have no visibility into the infrastructure, nor do you know where and how it is implemented. &lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
"
&lt;meta content="text/html; charset=utf-8" http-equiv="Content-Type" /&gt;
&lt;meta content="Word.Document" name="ProgId" /&gt;
&lt;meta content="Microsoft Word 12" name="Generator" /&gt;
&lt;meta content="Microsoft Word 12" name="Originator" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_filelist.xml" rel="File-List" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_themedata.thmx" rel="themeData" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_colorschememapping.xml" rel="colorSchemeMapping" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p style="background: white none repeat scroll 0% 0%; line-height: 15.6pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;By: Ronald Schmelzer&lt;/span&gt;&lt;/em&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
Posted: Mar. 25, 2009&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://t.ymlp178.com/qhmafauwwakaumqearaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;In our previous ZapFlash&lt;/span&gt;&lt;/a&gt;, ZapThink Managing Partner Jason Bloomberg explored the recent upswing in interest in Cloud Computing and evaluated its merits vis-à-vis Service-Oriented Architecture (SOA). In that ZapFlash, Jason concluded that cloud computing is an ill-defined term that has turned into a bandwagon that vendors, consultants, and end-users alike are jumping on without asking first where they are going. He also complained that there is a broad chasm between the sort of public clouds espoused by organizations like Amazon and the internal do-it-yourself clouds that large vendors would like you to sink your time and money into. But, his biggest bugaboo was that too many well-intentioned individuals and organizations are jumping without doing architecture of any sort, let alone SOA. Lack of an architecture perspective, preferably a Service-oriented one, is sure to doom any cloud computing effort just as much as it has doomed &lt;a href="http://t.ymlp178.com/qhjaiauwwaoaumqeaaaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;Web Services on a Bus efforts branded as “SOA”&lt;/span&gt;&lt;/a&gt;. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;However, that’s not ZapThink’s final word on cloud computing. In this ZapFlash, we’d like to take a different perspective on whether cloud computing holds water with regards to SOA. In particular, there are some aspects of cloud computing that positively inform SOA and vice-versa, and allow us to shift the conversation of SOA beyond what many still consider to be standards-based integration. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Finally… a Reason to Stop Talking about ESBs&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
One of the best reasons to bless the cloud computing movement is that it finally allows us to shift the focus away from the Enterprise Service Bus (ESB). &lt;a href="http://t.ymlp178.com/qhbazauwwacaumqeazaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;As you&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhhaaauwwanaumqeadaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;may recall&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhwaoauwwazaumqeaxaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;from a number&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhqakauwwaxaumqearaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;of previous ZapFlashes&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhyaaauwwaoaumqeazaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;on this topic&lt;/span&gt;&lt;/a&gt;, the ESB has been far too central in organization’s discussions about SOA. The logic goes that all you need to do is develop a bunch of Web Services, plop them on an ESB and voila, you have a SOA. Isn’t it amazing that you can get architecture without actually doing architecture? As ridiculous as this might sound, for many organizations, this approach represents fully their SOA strategy. But, the movement to cloud computing throws the ESB “strategy” out the window. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;In the cloud computing world, you have no visibility into the infrastructure, nor do you know where and how it is implemented. Indeed, you can both provide and consume Services without having to give a whit about the stuff in the middle. After all, that’s why it’s called cloud computing and not “vendor A’s bus” computing. Not only can you build a perfectly good SOA using a cloud as your infrastructure, but it might actually be a best practice to do so. In our &lt;a href="http://t.ymlp178.com/qwsavauwwagaumqeadaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;Licensed ZapThink Architect (LZA) boot camps&lt;/span&gt;&lt;/a&gt;, we frequently espouse the position that Services should be designed to be location-independent, implementation-neutral, and distributed (potentially heterogeneous) intermediary based. A good cloud implementation should allow you to do all three. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;With all this cloud goodness, there’s no need to even have to start your SOA planning by buying (or contemplating buying) an ESB. Design your Services to be infrastructure neutral and you can put them in the cloud or on existing infrastructure or on network intermediaries. Does it matter? No. This of course means that you should beware message queues that turned into EAI platforms that turned into ESBs getting turned into “cloud platforms”. Remember that you heard that warning first here, from ZapThink. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;There is a major difference, however, between organizations that might leverage a third-party cloud as their SOA infrastructure from those enterprises that may want to implement their own internal clouds to serve as their SOA infrastructure. For the latter, you’ll still need some sort of infrastructure to make the Services behave in a cloud-like manner. However, odds are that it won’t look like what your current ESB looks like. After all, if a cloud was simply a message bus, then why don’t we call it such? Odds are that an internal cloud will look like more like the old grid-based computing infrastructure with massively redundant systems and virtualized compute infrastructure. In any case, the when the SOA conversation turns to cloud, it will necessarily have to turn away from being ESB-centric since there will be many more options for your SOA infrastructure deployment. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;The Power of Service Virtualization&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
Another benefit of adding cloud computing to the SOA mix is that it allows us to consider the power of virtualization from the outset of designing our Services, rather than as an afterthought. In our previous ZapFlash on this topic, Jason complained that virtualization and SOA, while good in concept to combine, are not done so in practice because the people involved in the virtualization efforts and the SOA team are usually different people addressing different issues. However, that does not need to be the case. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Indeed, planning to use a cloud as your SOA infrastructure will require you to think about how to design, manage, govern, secure, and compose your Services from a virtualized perspective. At a 30,000 foot level, virtualization as a concept requires you to abstract a single instance of a particular resource as multiple. This means that a single storage resource becomes a virtualized many, as does compute and application resources. From a SOA perspective, Service virtualization therefore means that there should not be a single implementation, contract, composition, or process for the Service. Rather, each of these things should be virtualized so as to minimize the impact of failure, improve overall performance, and allow for variability and flexibility when things change. By focusing on movement to cloud computing infrastructures for SOA as an excuse to design virtualized Services, you are doing yourself a favor, even if you don’t end up deploying those Services in a cloud. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;The ZapThink Take&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
This brings us to probably the biggest benefit of this whole cloud computing hoopla – a change in the way we think about Services. For those of you who have long considered Services to be location-independent, infrastructure-neutral, network intermediary-based, process-focused, and contract-driven then the cloud computing movement doesn’t really add much color to your SOA vision other than confirm what you have already suspected about SOA: you don’t need Web Services and you don’t need an ESB to make SOA a success. However, for those that have equated SOA with Web Services and ESB, they might see this looming cloud computing movement as the next iteration of their SOA efforts. For these readers, we would say, “finally!” &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;To properly implement SOA, you need to have abstraction as your primary perspective. But this also needs to be your primary perspective when you implement cloud computing initiatives. Service-oriented cloud computing is in many ways a redundant statement. Not having a Service-oriented perspective on cloud computing means you’re building tightly coupled clouds, which in theory should not even be possible. Having a non-cloud perspective on SOA means that you might (potentially) be building infrastructure-coupled Services that are not properly abstracted. While it’s certainly the case that you can build non-cloud SOA just as you can build non-SOA cloud, the reality is that one informs the other to the extent that it changes your thinking on each concept, even if you don’t implement the other. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Designing Services as if they would be implemented in a cloud, even if they are not going to be, helps you to build Services they way they should be built. Likewise, implementing cloud infrastructure as if it would be the core infrastructure for your SOA, replacing your ESB usage helps you to build a properly abstracted and agile cloud infrastructure, even if it never handles a single Service request. And this is why in many ways cloud computing can hold water. The question is, what will the future of cloud computing be? The dark, stormy cloud that is more like fog described in our first ZapFlash, or the silver lining on wispy clouds described here? The choice is not really ours. It’s yours. After all, you can’t buy architecture… you can only do it. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;meta content="text/html; charset=utf-8" http-equiv="Content-Type" /&gt;
&lt;meta content="Word.Document" name="ProgId" /&gt;
&lt;meta content="Microsoft Word 12" name="Generator" /&gt;
&lt;meta content="Microsoft Word 12" name="Originator" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_filelist.xml" rel="File-List" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_themedata.thmx" rel="themeData" /&gt;
&lt;link href="file:///C:\Users\ben\AppData\Local\Temp\msohtmlclip1\01\clip_colorschememapping.xml" rel="colorSchemeMapping" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p style="background: white none repeat scroll 0% 0%; line-height: 15.6pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="MsoNormal"&gt;&lt;em&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;By: Ronald Schmelzer&lt;/span&gt;&lt;/em&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
Posted: Mar. 25, 2009&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://t.ymlp178.com/qhmafauwwakaumqearaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;In our previous ZapFlash&lt;/span&gt;&lt;/a&gt;, ZapThink Managing Partner Jason Bloomberg explored the recent upswing in interest in Cloud Computing and evaluated its merits vis-à-vis Service-Oriented Architecture (SOA). In that ZapFlash, Jason concluded that cloud computing is an ill-defined term that has turned into a bandwagon that vendors, consultants, and end-users alike are jumping on without asking first where they are going. He also complained that there is a broad chasm between the sort of public clouds espoused by organizations like Amazon and the internal do-it-yourself clouds that large vendors would like you to sink your time and money into. But, his biggest bugaboo was that too many well-intentioned individuals and organizations are jumping without doing architecture of any sort, let alone SOA. Lack of an architecture perspective, preferably a Service-oriented one, is sure to doom any cloud computing effort just as much as it has doomed &lt;a href="http://t.ymlp178.com/qhjaiauwwaoaumqeaaaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;Web Services on a Bus efforts branded as “SOA”&lt;/span&gt;&lt;/a&gt;. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;However, that’s not ZapThink’s final word on cloud computing. In this ZapFlash, we’d like to take a different perspective on whether cloud computing holds water with regards to SOA. In particular, there are some aspects of cloud computing that positively inform SOA and vice-versa, and allow us to shift the conversation of SOA beyond what many still consider to be standards-based integration. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Finally… a Reason to Stop Talking about ESBs&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
One of the best reasons to bless the cloud computing movement is that it finally allows us to shift the focus away from the Enterprise Service Bus (ESB). &lt;a href="http://t.ymlp178.com/qhbazauwwacaumqeazaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;As you&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhhaaauwwanaumqeadaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;may recall&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhwaoauwwazaumqeaxaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;from a number&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhqakauwwaxaumqearaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;of previous ZapFlashes&lt;/span&gt;&lt;/a&gt; &lt;a href="http://t.ymlp178.com/qhyaaauwwaoaumqeazaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;on this topic&lt;/span&gt;&lt;/a&gt;, the ESB has been far too central in organization’s discussions about SOA. The logic goes that all you need to do is develop a bunch of Web Services, plop them on an ESB and voila, you have a SOA. Isn’t it amazing that you can get architecture without actually doing architecture? As ridiculous as this might sound, for many organizations, this approach represents fully their SOA strategy. But, the movement to cloud computing throws the ESB “strategy” out the window. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;In the cloud computing world, you have no visibility into the infrastructure, nor do you know where and how it is implemented. Indeed, you can both provide and consume Services without having to give a whit about the stuff in the middle. After all, that’s why it’s called cloud computing and not “vendor A’s bus” computing. Not only can you build a perfectly good SOA using a cloud as your infrastructure, but it might actually be a best practice to do so. In our &lt;a href="http://t.ymlp178.com/qwsavauwwagaumqeadaesyhw/click.php"&gt;&lt;span style="color: rgb(79, 79, 79); text-decoration: none;"&gt;Licensed ZapThink Architect (LZA) boot camps&lt;/span&gt;&lt;/a&gt;, we frequently espouse the position that Services should be designed to be location-independent, implementation-neutral, and distributed (potentially heterogeneous) intermediary based. A good cloud implementation should allow you to do all three. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;With all this cloud goodness, there’s no need to even have to start your SOA planning by buying (or contemplating buying) an ESB. Design your Services to be infrastructure neutral and you can put them in the cloud or on existing infrastructure or on network intermediaries. Does it matter? No. This of course means that you should beware message queues that turned into EAI platforms that turned into ESBs getting turned into “cloud platforms”. Remember that you heard that warning first here, from ZapThink. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;There is a major difference, however, between organizations that might leverage a third-party cloud as their SOA infrastructure from those enterprises that may want to implement their own internal clouds to serve as their SOA infrastructure. For the latter, you’ll still need some sort of infrastructure to make the Services behave in a cloud-like manner. However, odds are that it won’t look like what your current ESB looks like. After all, if a cloud was simply a message bus, then why don’t we call it such? Odds are that an internal cloud will look like more like the old grid-based computing infrastructure with massively redundant systems and virtualized compute infrastructure. In any case, the when the SOA conversation turns to cloud, it will necessarily have to turn away from being ESB-centric since there will be many more options for your SOA infrastructure deployment. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;The Power of Service Virtualization&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
Another benefit of adding cloud computing to the SOA mix is that it allows us to consider the power of virtualization from the outset of designing our Services, rather than as an afterthought. In our previous ZapFlash on this topic, Jason complained that virtualization and SOA, while good in concept to combine, are not done so in practice because the people involved in the virtualization efforts and the SOA team are usually different people addressing different issues. However, that does not need to be the case. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Indeed, planning to use a cloud as your SOA infrastructure will require you to think about how to design, manage, govern, secure, and compose your Services from a virtualized perspective. At a 30,000 foot level, virtualization as a concept requires you to abstract a single instance of a particular resource as multiple. This means that a single storage resource becomes a virtualized many, as does compute and application resources. From a SOA perspective, Service virtualization therefore means that there should not be a single implementation, contract, composition, or process for the Service. Rather, each of these things should be virtualized so as to minimize the impact of failure, improve overall performance, and allow for variability and flexibility when things change. By focusing on movement to cloud computing infrastructures for SOA as an excuse to design virtualized Services, you are doing yourself a favor, even if you don’t end up deploying those Services in a cloud. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;The ZapThink Take&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;&lt;br /&gt;
This brings us to probably the biggest benefit of this whole cloud computing hoopla – a change in the way we think about Services. For those of you who have long considered Services to be location-independent, infrastructure-neutral, network intermediary-based, process-focused, and contract-driven then the cloud computing movement doesn’t really add much color to your SOA vision other than confirm what you have already suspected about SOA: you don’t need Web Services and you don’t need an ESB to make SOA a success. However, for those that have equated SOA with Web Services and ESB, they might see this looming cloud computing movement as the next iteration of their SOA efforts. For these readers, we would say, “finally!” &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;To properly implement SOA, you need to have abstraction as your primary perspective. But this also needs to be your primary perspective when you implement cloud computing initiatives. Service-oriented cloud computing is in many ways a redundant statement. Not having a Service-oriented perspective on cloud computing means you’re building tightly coupled clouds, which in theory should not even be possible. Having a non-cloud perspective on SOA means that you might (potentially) be building infrastructure-coupled Services that are not properly abstracted. While it’s certainly the case that you can build non-cloud SOA just as you can build non-SOA cloud, the reality is that one informs the other to the extent that it changes your thinking on each concept, even if you don’t implement the other. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0.75pt 0.0001pt 0cm; background: white none repeat scroll 0% 0%; line-height: 18pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-size: 15.5pt; color: rgb(69, 69, 69);"&gt;Designing Services as if they would be implemented in a cloud, even if they are not going to be, helps you to build Services they way they should be built. Likewise, implementing cloud infrastructure as if it would be the core infrastructure for your SOA, replacing your ESB usage helps you to build a properly abstracted and agile cloud infrastructure, even if it never handles a single Service request. And this is why in many ways cloud computing can hold water. The question is, what will the future of cloud computing be? The dark, stormy cloud that is more like fog described in our first ZapFlash, or the silver lining on wispy clouds described here? The choice is not really ours. It’s yours. After all, you can’t buy architecture… you can only do it. &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.shanghai-software.com/blog/aggbug/35.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/03/27/soa-and-cloud-computing.aspx</guid>
            <pubDate>Fri, 27 Mar 2009 00:45:00 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/35.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/03/27/soa-and-cloud-computing.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/35.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/35.aspx</trackback:ping>
        </item>
        <item>
            <title>Eventing with and without Topics</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/21/eventing-with-and-without-topics.aspx</link>
            <description>While WS-Eventing has no support for Topics ( see last post) it is almost essential for efficient  processing of messages if you have a large amount of subscriptions. &lt;br /&gt;
&lt;br /&gt;
Consider the case of 10,000 Subscriptions for 10,000 Notification you are looking at 10^8 expensive xPath comparisons which will bring many servers down to its knees. &lt;br /&gt;
&lt;br /&gt;
With EDA we can easily solve this problem ( compare to an overloaded DB) .&lt;br /&gt;
&lt;br /&gt;
Lets say we have a Topicless share pricing feed  something like &lt;br /&gt;
&lt;br /&gt;
&amp;lt;Trades&amp;gt;&lt;br /&gt;
&amp;lt;Trade&amp;gt;&lt;br /&gt;
&amp;lt;Symbol&amp;gt;BHP&amp;lt;/Symbol&amp;gt;&lt;br /&gt;
&amp;lt;Price&amp;gt;38.12&amp;lt;/Price&amp;gt;&lt;br /&gt;
&amp;lt;Volume&amp;gt;10000&amp;lt;/Volume&amp;gt; &lt;br /&gt;
&amp;lt;Exchange&amp;gt;ASX&amp;lt;/Exchange&amp;gt;&lt;br /&gt;
&amp;lt;/Trade&amp;gt;&lt;br /&gt;
&amp;lt;/Trades&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now WS-Eventing has a really nice feature in that subscriptions can force notifications to contain a header this header can be a Topic. Even better the EndTo can be another WS-Eventing server.  With EDAm this is even easier as this subscription can be loaded in the configuration of the Notification server. &lt;br /&gt;
So we create subscriptions and organise the data  eg  by exchange then by group. &lt;br /&gt;
&lt;br /&gt;
What we want is &lt;br /&gt;
&lt;br /&gt;
ShareData&lt;br /&gt;
ShareData.Exchange.Group. Symbol. &lt;br /&gt;
&lt;br /&gt;
That way actual clients can subscribe to the specific information they need ( most likely Symbol or Group )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Main Server (where the original feed enters)  &lt;br /&gt;
Topicless (Default mode) &lt;br /&gt;
&lt;br /&gt;
2nd Server ( Runs in Must have topic and server always loads all subs from Topic) &lt;br /&gt;
Subscriptions in the config file ( or Data ) break the data down&lt;br /&gt;
&lt;br /&gt;
Subscription for Exchange add topic&lt;br /&gt;
&lt;br /&gt;
eg Xpath filter =  /Trades/Trade/Exchange="ASX"   Header in subscription&lt;br /&gt;
 &amp;lt;Topics&amp;gt; ShareData.ASX&amp;lt;/Topics&amp;gt; &lt;br /&gt;
&lt;br /&gt;
we add one subscription for each exchange &lt;br /&gt;
We add subscription for each  group and each code. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
eg Xpath filter =  /Trades/Trade/Exchange/Symbol="BHP"   Header in subscription&lt;br /&gt;
 &amp;lt;Topics&amp;gt; ShareData.ASX.MetalsAndMining&amp;lt;/Topics&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We now have 2 services ( the 2nd one can become many services if the load justifies it  ( not needed for a cloud) )  and people can make a subscription based on the Topic and get just the data they require  Better yet they can make subscription based on a cheap topic filter which would be orders of magnitude faster than xPath ( and is easier for the engine to index) . . &lt;br /&gt;
&lt;br /&gt;
Lets have a look at the data , lets asume all these subscriptions are group subscriptions  ( 20  groups * 500 subscriptions)   , now each Group will have 500 Notifications . The engine now only has to process  each of those notifications for 500 subscriptions  so we have 20 * 500 * 500  = 5,000.000 operations ( a 20 fold reduction) . O ( n* m) vs  O( n * m/log(n) )  . Taking into account the difference in performance between a simple topic filter and Xpath you would be looking at 2-3 orders of magnitude improvement. which could correspond to 1 server instead of 200. &lt;br /&gt;
&lt;br /&gt;
This translates into a simpler , more responsive and more cost effective system. With EDA ( and especially EDAM ) this reconfiguration could be done with no changes in code.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://www.shanghai-software.com/blog/aggbug/34.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/21/eventing-with-and-without-topics.aspx</guid>
            <pubDate>Sat, 21 Feb 2009 12:17:16 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/34.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/21/eventing-with-and-without-topics.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/34.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/34.aspx</trackback:ping>
        </item>
        <item>
            <title>POS or SOA Lite TODO</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/09/pos-or-soa-lite-todo.aspx</link>
            <description>I think Service Orientation has gone the way of J2EE/ EJB and needs to be pulled back like was done with POJO. &lt;br /&gt;
&lt;br /&gt;
I propose POS Plain old Services or POSA for Plain old services architecture. &lt;br /&gt;
&lt;br /&gt;
Rules.&lt;br /&gt;
1) There is only one rule and that is KISS.&lt;img src="http://www.shanghai-software.com/blog/aggbug/31.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/09/pos-or-soa-lite-todo.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 05:34:40 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/31.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/09/pos-or-soa-lite-todo.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/31.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/31.aspx</trackback:ping>
        </item>
        <item>
            <title>Why use Queues ( MSMQ) in services ?</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/09/queues-msmq-in-services.aspx</link>
            <description>Queues love them or hate them seem to be pretty popular.  I'm definetly on the hate side especially persistant queues&lt;br /&gt;
&lt;br /&gt;
Lets look at some recommendations &lt;br /&gt;
&lt;ul type="disc" style="margin-top: 0px; margin-bottom: 0px;"&gt;
    &lt;li&gt;Use private queues. Very few applications need public queues and the performance hit is substantial.&lt;/li&gt;
    &lt;li&gt;Use non-transactional queues. Again, very few applications need transactional queues.&lt;/li&gt;
    &lt;li&gt;System.Messaging is messed up in a lot of ways, but you can work around that.&lt;/li&gt;
    &lt;li&gt;Use the asynchronous methods of System.Messaging (BeginReceive and BeginPeek) where possible.&lt;/li&gt;
    &lt;li&gt;Learn to build your own formatter for System.Messaging. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I agree with all these but is this how queues are used ? No. &lt;br /&gt;
&lt;br /&gt;
Queues tend to be used in 3 scenarios &lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;To capture a critical piece of information ( persistant queues) &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;To handle a slow legacy system. &lt;/li&gt;
    &lt;li&gt;Integrate with non .NET systems &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Integration is better handled by SOAP or REST services.&lt;br /&gt;
&lt;br /&gt;
Slow legacy systems can be handled better with Workflows and &lt;a title="WCF" href="http://74.55.152.210/blog/WCF" rel=""&gt;Windows Communication Foundation&lt;/a&gt; throttling.  &lt;br /&gt;
&lt;br /&gt;
Capturing a critical piece of information is better handled by  Workflows or SQL . eg since you need to record the data in a DB anyway, create the data and workflow and if it fails notify the sender. Note Transactions may be used here. &lt;br /&gt;
&lt;br /&gt;
Why not just use queues ? &lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Its not simple , it looks simple but a real implementation has a number of complex issues ( Poison message and  performance/scaling especially) &lt;/li&gt;
    &lt;li&gt;in scenarios where the the client cant be notified it still not a good idea to use a queue as the code that adds the item to the queue may also fail. &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Poison messages / Journalling . This is probably the worst thing - especially when receiving messages from different systems.  A single message can block the queue and your system as effectively as hitting the power switch.  The solution is to move the message to a new queue increasing complexity and the idea of a simple queue. However you now have a message that the system failed to  understand so you need to handle it  and remember the client thinks you have handled it . Often custom systems or manual intervention needs to be done to handle these.&lt;/li&gt;
    &lt;li&gt;Persistant message Queues use local disk that needs to be managed. Run out of space/quota due to a large number of transactions or poison messages over time and your queue stops. ie More infrastructure to manage , more things that can go wrong. &lt;/li&gt;
    &lt;li&gt;Scaling . Queues do not really scale past the single machine / processor. Most people use persistant/transaction queues which are bound by disk performance of a single machine.  Multi-threaded processing of a queue is possible but requires threadsafe code (which most web or &lt;a title="WCF" href="http://74.55.152.210/blog/WCF" rel=""&gt;Windows Communication Foundation&lt;/a&gt; services do not) . You can use a load balancer and write to multiple services each with their own queue but you break the concept of a single queue ( eg a legacy system  can now receive requests from n services and can become overloaded )  you now have n queues and the queues just become the transport for communicating to each service . Each machine needs to have the queues a and local storage for persistance configured. Lastly poison messages need to be dealt with at each machine.   &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Clustering works, but it is difficult to configure correctly and malfunctions often ( well Microsofts one does) . In addition, to run Microsoft's Cluster Server you must also run Windows Server Enterprise Edition which is costly. Note this tends to be a fallover cluster. &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Default serialization is custom.&lt;/li&gt;
    &lt;li&gt;Many people try to write local and read remote from queues.&lt;/li&gt;
&lt;/ul&gt;
Here is a great article on using MSMQ tips http://www.devx.com/enterprise/Article/22314/0/page/1  note the recomendation is to turn of all the things people use queues for. &lt;br /&gt;
&lt;br /&gt;
So what about the alternatives? &lt;br /&gt;
&lt;br /&gt;
For a start we need to consider the alternative which is a plain WCF tcp service. We get security , scaling performance and transactions. We don't get persitence ( though long running services /WF does give you this ) and the concept of capturing as much critical data as possible even if there is a system fault. .&lt;br /&gt;
&lt;br /&gt;
To handle this I prefer some simple code  (and hence reliable)  that stores critical information like orders immediately in a DB (after some basic validation eg not empty , has a customer etc ) and if successful returns this to the client , if not it will tell the client why and an appropriate error  ( which help the client use and like the system) .  Note this code is similar to the code that would put the information on the queue ( this is normally  pretty simple must work code also  ) .&lt;br /&gt;
&lt;br /&gt;
You can then calls a process function via worker thread ( or in larger systems a seperate service can retrieve the record or workflow from the DB and process it this process can be sequential and  or parallel if needed , note DB maybe a persisted workflow) .   This remains simple , reliable and can scale . Best of all records that fail can be processed as normal eg an Order that fails to process is an order in the db and an order management app can probably bring it up allowing you to see it.   ( All apps including queues need to handle bad user data anyway) &lt;br /&gt;
&lt;br /&gt;
Please note while a Workflow is almost ideal and can contain the data i would not do this and store the data seperately . The main reason for this  is Workflows (up to  3.5 , i dont 4.0 )  uses binary serialization which if you change the assembly version can give you a lot of grief in retrieving a workflow. Its better just to have the data seperate so you can resumbit it for processing if needed. If Workflow had an xml persitance representation id probably consider ( especially for smaller apps) just saving the workflow as you could manually retrieve the information in a meaningful format from the DB . &lt;img src="http://www.shanghai-software.com/blog/aggbug/30.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/09/queues-msmq-in-services.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 02:43:38 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/30.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/09/queues-msmq-in-services.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/30.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/30.aspx</trackback:ping>
        </item>
        <item>
            <title>.Net services message persistance</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/09/.net-services-message-persistance.aspx</link>
            <description>Well looks like .Net services doesn't have persistant messaging ( no queues or persistance of subscriptions ) . This  will probably be address in v2 .  There is a 30 second message buffer for polling replies but this is not the same.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is especially an issue for mobile computing ( PDAs , phones etc which are often offline) and for wrapping  legacy systems.  Though its unlikely that legacy systems will be wrapped by .Net services ( more likely the service bus will redirect it to locally hosted services) .&lt;br /&gt;
&lt;br /&gt;
Im not a big fan of queues however.  See post.&lt;img src="http://www.shanghai-software.com/blog/aggbug/29.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/09/.net-services-message-persistance.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 01:02:58 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/29.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/09/.net-services-message-persistance.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/29.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/29.aspx</trackback:ping>
        </item>
        <item>
            <title>What is Azure Services ?</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/07/what-is-azure-services.aspx</link>
            <description>Are Azure services a cloud or are they an ESB ? &lt;br /&gt;
&lt;br /&gt;
While Azure does not have this it has FAR more than most ESB in terms of connecting clients to services. Sure it has router support &lt;br /&gt;
&lt;br /&gt;
Azure &amp;gt;&amp;gt; ESB  (Internet hosted , with integrated  internet security , scalable) &lt;br /&gt;
Azure &amp;gt;&amp;gt; Cloud computing  ( not just Client - Service routing and hosting but also it has sender-receiver relay , multicast , firewall pass through ,   and enterprise-cloud security integration)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The big thing is people see it as a cloud .. however i think the biggest thing is it can redirect clients requests into your internal systems ( or partners!) in a secure manner with a global logon.  Or facilitate secure communication between clients and companies ( as well as B2B) &lt;br /&gt;
&lt;br /&gt;
A lot of people say the Enterprise will not put services in the cloud - i dispute this.  VPNs are used to drive many branch offices which was not done earlier its a question how comfortable they are with the management and security.  Like outsourcing to india.&lt;img src="http://www.shanghai-software.com/blog/aggbug/28.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/07/what-is-azure-services.aspx</guid>
            <pubDate>Sat, 07 Feb 2009 02:21:46 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/28.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/07/what-is-azure-services.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/28.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/28.aspx</trackback:ping>
        </item>
        <item>
            <title>Windows Azure services - First impressions</title>
            <link>http://www.shanghai-software.com/blog/archive/2009/02/06/windows-azure-services-first-impressions.aspx</link>
            <description> I have been looking at the PDC cast of Windows Azure and all I can say is wow. &lt;br /&gt;
&lt;br /&gt;
At first i thought it was just another cloud but its a new generation compared to other offerings and most important its designed to win corporates. Integrating with current enterprise systems in a secure manner will be the key.  &lt;br /&gt;
&lt;br /&gt;
Will it succeed - certainly ( barring some outage disasters which will hurt them bad) . However it wont succeed just for Web 2.0 ( of which i am sceptical in the long term) but think of corporate laptops ,PDAs , small offices etc . Once resources move to the cloud i suspect a lot of corporate private framerelay /atm links may be replaced by using the cloud though this is years away. &lt;br /&gt;
&lt;br /&gt;
However i think there is a certain amount of FUD involved , i may be mistaken as Microsoft could have put billions into the project  but the feature list seems rich so it maybe a case v1 will be delayed or not feature complete.&lt;img src="http://www.shanghai-software.com/blog/aggbug/27.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ben Kloosterman</dc:creator>
            <guid>http://www.shanghai-software.com/blog/archive/2009/02/06/windows-azure-services-first-impressions.aspx</guid>
            <pubDate>Fri, 06 Feb 2009 00:55:23 GMT</pubDate>
            <wfw:comment>http://www.shanghai-software.com/blog/comments/27.aspx</wfw:comment>
            <comments>http://www.shanghai-software.com/blog/archive/2009/02/06/windows-azure-services-first-impressions.aspx#feedback</comments>
            <wfw:commentRss>http://www.shanghai-software.com/blog/comments/commentRss/27.aspx</wfw:commentRss>
            <trackback:ping>http://www.shanghai-software.com/blog/services/trackbacks/27.aspx</trackback:ping>
        </item>
    </channel>
</rss>