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

<channel>
	<title>Cloud Comedy, Cloud Tragedy &#187; Specs</title>
	<atom:link href="http://stage.vambenepe.com/archives/category/specs/feed" rel="self" type="application/rss+xml" />
	<link>http://stage.vambenepe.com</link>
	<description>William Vambenepe&#039;s stage</description>
	<lastBuildDate>Fri, 03 Feb 2012 04:56:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DMTF publishes draft of Cloud API</title>
		<link>http://stage.vambenepe.com/archives/1853</link>
		<comments>http://stage.vambenepe.com/archives/1853#comments</comments>
		<pubDate>Mon, 19 Sep 2011 06:50:13 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Portability]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtual appliance]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1853</guid>
		<description><![CDATA[Note to anyone who still cares about IaaS standards: the DMTF has published a work in progress. There was a lot of interest in the topic in 2009 and 2010. Some heated debates took place during Cloud conferences and a few symposiums were organized to try to coordinate various standard efforts. The DMTF started an [...]]]></description>
			<content:encoded><![CDATA[<p>Note to anyone who still cares about IaaS standards: the DMTF has published a work in progress.</p>
<p>There was a lot of interest in the topic in 2009 and 2010. Some <a href="http://stage.vambenepe.com/archives/1344">heated</a> <a href="http://stage.vambenepe.com/archives/1549">debates</a> took place during Cloud conferences and a few symposiums were organized to try to coordinate various standard efforts. The <a href="http://stage.vambenepe.com/archives/715">DMTF started an &#8220;incubator&#8221;</a> on the topic. Many companies brought submissions to the table, in various levels of maturity: <a href="http://stage.vambenepe.com/archives/936">VMware</a>, <a href="http://stage.vambenepe.com/archives/1108">Fujitsu</a>, <a href="http://stage.vambenepe.com/archives/1295">HP</a>, <a href="http://www.tid.es/files/doc/apis/TCloud_API_Spec_v0.9.pdf ">Telefonica</a>, <a href="http://stage.vambenepe.com/archives/1538">Oracle</a> and <a href="http://www.computerworld.com/s/article/9181919/Red_Hat_offers_Deltacloud_platform_to_standards_group">RedHat</a>. IBM and Microsoft might also have submitted something, I can&#8217;t remember for sure.</p>
<p>The DMTF has been chugging along. The incubator turned into a working group. Unfortunately (but unsurprisingly), it limited itself to the usual suspects (and not all the <a href="http://stage.vambenepe.com/archives/1261">independent Cloud experts</a> out there) and kept the process confidential. But this week it partially lifted the curtain by publishing two work-in-progress documents.</p>
<p>They can be found at <a href="http://dmtf.org/standards/cloud">http://dmtf.org/standards/cloud</a> but if you read this after March 2012 they won&#8217;t be there anymore, as DMTF likes to &#8220;expire&#8221; its work-in-progress documents. The two docs are:</p>
<ul>
<li><a href="http://dmtf.org/sites/default/files/standards/documents/DSP0263_1.0.0a.pdf">Cloud Infrastructure Management Interface (CIMI) Model and REST Interface Specification</a>, and</li>
<li><a href="http://dmtf.org/sites/default/files/standards/documents/DSP0264_1.0.0a.pdf">Cloud Infrastructure Management Interface – Common Information Model (CIMI-CIM) Specification</a></li>
</ul>
<p>The first one is the interesting one, and the one you should read if you want to see where the DMTF is going. It&#8217;s a RESTful specification (at the cost of some contortions, e.g. section 4.2.1.3.1). It supports both JSON and XML (<a href="http://stage.vambenepe.com/archives/1311">bad idea</a>). It plans to use RelaxNG instead of XSD (good idea). And also CIM/MOF (not a joke, see the second document for proof). The specification is pretty ambitious (it covers not just lifecycle operations but also monitoring and events) and well written, especially for a work in progress (props to <a href="http://blogs.oracle.com/wsinterop/">Gil Pilz</a>).</p>
<p>I am surprised by how little reaction there has been to this publication considering how hotly debated the topic used to be. Why is that?</p>
<p>A cynic would attribute this to people having given up on DMTF providing a Cloud API that has any chance of wide adoption (the adjoining CIM document sure won&#8217;t help reassure DMTF skeptics).</p>
<p>To the contrary, an optimist will see this low-key publication as a sign that the passions have cooled, that the trusted providers of enterprise software are sitting at the same table and forging consensus, and that the industry is happy to defer to them.</p>
<p>More likely, I think people have, by now, enough Cloud experience to understand that standardizing IaaS APIs is a minor part of the problem of interoperability (not to mention the even harder goal of portability). The serialization and plumbing aspects don&#8217;t matter much, and if they do to you then there are some good libraries that provide mappings for your favorite language. What matters is the diversity of resources and services exposed by Cloud providers. Those choices strongly shape the design of your application, much more than the choice between JSON and XML for the control API. And nobody is, at the moment, in position to standardize these services.</p>
<p>So congrats to the DMTF Cloud Working Group for the milestone, and please get the API finalized. Hopefully it will at least achieve the goal of narrowing down the plumbing choices to three (AWS, OpenStack and DMTF). But that&#8217;s not going to solve the hard problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1853/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perspectives on Cloud.com acquisition</title>
		<link>http://stage.vambenepe.com/archives/1839</link>
		<comments>http://stage.vambenepe.com/archives/1839#comments</comments>
		<pubDate>Thu, 11 Aug 2011 20:47:57 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1839</guid>
		<description><![CDATA[Interesting analysis (by Gartner&#8217;s Lydia Leong) on the acquisition of Cloud.com by Citrix (apparently for 100x revenues) and its position as a cheaper alternative for vCloud (at least until OpenStack Nova becomes stable). Great read, even though that part: &#8220;[Zygna] uses Cloud.com to provide Amazon-compatible (and thus Rightscale-compatible) infrastructure internally, letting it easily move workloads [...]]]></description>
			<content:encoded><![CDATA[<p>Interesting <a href="http://blogs.gartner.com/lydia_leong/2011/08/11/citrix-buys-cloud-com/">analysis</a> (by Gartner&#8217;s Lydia Leong) on the acquisition of Cloud.com by Citrix (apparently for 100x revenues) and its position as a cheaper alternative for vCloud (at least until OpenStack Nova becomes stable).</p>
<p>Great read, even though that part:</p>
<p style="padding-left: 30px;"><em>&#8220;[Zygna] uses Cloud.com to provide Amazon-compatible (and thus Rightscale-compatible) infrastructure internally, letting it easily move workloads across their own infrastructure and Amazon’s.&#8221;</em></p>
<p>is <a href="http://broadcast.oreilly.com/2011/08/the-ec2-api-as-a-defacto-standard.html">a bit of a simplification</a>.</p>
<p>While I&#8217;m at it, here&#8217;s <a href="http://www.virtualizationpractice.com/blog/?p=6683">another take on Cloud.com</a>, this time from an OSS license perspective. Namely, the difference between building your business on GPL (like Eucalyptus) or Apache 2 (like the more community-driven open source projects such as OpenStack).</p>
<p>Towards the end, there&#8217;s also a nice nod to the Oracle Cloud API:</p>
<p style="padding-left: 30px;"><em>&#8220;DMTF has been receiving other submissions for an API standard. Oracle has made its submission public.  It is based on an earlier Sun proposal, and it is the best API we have yet seen. Furthermore, Oracle has identified a core subset to allow initial early  adoption, as well as areas where vendors (including themselves and  crucially VMware<a title="VMware" href="http://www.virtualizationpractice.com/blog/?s=vmware"></a>) may continue to extend to allow differentiation.&#8221;</em></p>
<p>Here&#8217;s <a href="http://stage.vambenepe.com/archives/1538">more on the Oracle Cloud API</a>, including an explanation of the &#8220;core/extension&#8221; split mentioned above.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1839/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yoga framework for REST-like partial resource access</title>
		<link>http://stage.vambenepe.com/archives/1787</link>
		<comments>http://stage.vambenepe.com/archives/1787#comments</comments>
		<pubDate>Wed, 22 Jun 2011 07:14:26 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[CMDBf]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Graph query]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SOAP header]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[WS-Management]]></category>
		<category><![CDATA[WS-ResourceCatalog]]></category>
		<category><![CDATA[WS-ResourceTransfer]]></category>
		<category><![CDATA[WS-Transfer]]></category>
		<category><![CDATA[XMLFrag]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1787</guid>
		<description><![CDATA[A tweet by Stefan Tilkov brought Yoga to my attention, &#8220;a framework for supporting REST-like URI requests with field selectors&#8221;. As the name suggests, &#8220;Yoga&#8221; lets you practice some contortions that would strain a run-of-the-mill REST programmer. Basically, you can use a request like GET /teams/4234.json?selector=:(members:(id,name,birthday) to retrieve the id, name and birthday of all [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="https://twitter.com/stilkov/status/83241462774509568">tweet by Stefan Tilkov</a> brought <a href="https://github.com/skyscreamer/yoga">Yoga</a> to my attention, <em>&#8220;a framework for supporting REST-like URI requests with field selectors&#8221;</em>.</p>
<p>As the name suggests, &#8220;Yoga&#8221; lets you practice some contortions that would strain a run-of-the-mill REST programmer. Basically, you can use a request like</p>
<pre>GET /teams/4234.json?selector=:(members:(id,name,birthday)</pre>
<p>to retrieve the id, name and birthday of all members of a softball team, rather than having to retrieve the team roaster and then do a GET on each and every team member to retrieve their name and birthday (and lots of other information you don&#8217;t care about).</p>
<p>Where have I seen this before? That use case came up over and over again when we were using SOAP Web services for resource management. I have personally crafted support for it a few times. Using this blog to support my memory, here is the list of SOAP-related management efforts listed in the <a href="http://stage.vambenepe.com/archives/700">&#8220;post-mortem on the previous IT management revolution&#8221;</a>:</p>
<p><a href="http://xml.coverpages.org/ni2003-07-21-a.html">WSMF</a>, <a href="http://www.ibm.com/developerworks/library/specification/ws-manage/">WS-Manageability</a>, <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsdm">WSDM</a>, <a href="http://www.ggf.org/documents/GFD.15.pdf">OGSI</a>, <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrf">WSRF</a>, <a href="http://www.dmtf.org/standards/wsman">WS-Management</a>, <a href="http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer/WS-ResourceTransfer.pdf">WS-ResourceTransfer</a>, <a href="http://www.w3.org/2002/ws/ra/">WSRA</a>, <a href="http://schemas.xmlsoap.org/ws/2007/05/ResourceCatalog/WS-ResourceCatalog.pdf">WS-ResourceCatalog</a>, <a href="http://www.dmtf.org/standards/published_documents/DSP0252_1.0.0c.pdf">CMDBf</a></p>
<p>Each one of them supports this &#8220;partial access&#8221; use case: WS-Management has :</p>
<p><a href="http://xml.coverpages.org/ni2003-07-21-a.html">WSMF</a>, <a href="http://www.ibm.com/developerworks/library/specification/ws-manage/">WS-Manageability</a>, <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsdm">WSDM</a>, <a href="http://www.ggf.org/documents/GFD.15.pdf">OGSI</a>, <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrf">WSRF</a>, <a href="http://www.dmtf.org/standards/wsman">WS-Management</a>, <a href="http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer/WS-ResourceTransfer.pdf">WS-ResourceTransfer</a>, <a href="http://www.w3.org/2002/ws/ra/">WSRA</a>, <a href="http://schemas.xmlsoap.org/ws/2007/05/ResourceCatalog/WS-ResourceCatalog.pdf">WS-ResourceCatalog</a>, <a href="http://www.dmtf.org/standards/published_documents/DSP0252_1.0.0c.pdf">CMDBf</a></p>
<p>Each one of them supports this &#8220;partial access&#8221; use case: WS-Management has <em>SelectorSet</em>, WSRF has <em>ResourceProperties</em>, CMDBf has <em>ContentSelector</em>, WSRA has <em>Fragments</em>, etc.</p>
<p>Years ago, I also created the <a href="http://stage.vambenepe.com/archives/114"><em>XMLFrag</em> SOAP header</a> to attack a more general version of this problem. There may be something to salvage in all this for people willing to break REST orthodoxy (with the full knowledge of what they gain and what they loose).</p>
<p>I&#8217;m not being sarcastic when I ask &#8220;where have I seen this before&#8221;. The problem hasn&#8217;t gone away just because we failed to solve it in a pragmatic way with SOAP. If the industry is moving towards HTTP+JSON then we&#8217;ll need to solve it again on that ground and it&#8217;s no surprise if the solution looks similar.</p>
<p>I have a sense of what&#8217;s coming next. XPath-for-JSON-over-the-wire. See, getting individual properties is nice, but sometimes you want more. You want to select only the members of the team who are above 14 years old. Or you just want to count these members rather than retrieve specific information about them individually. Or you just want a list of all the cities they live in. Etc.</p>
<p>But even though we <em>want</em> this, I am not convinced (anymore) that we <em>need</em> it.</p>
<p>What I know we need is better support for graph queries. Kingsley Idehen once provided a good explanation of why that is and <a href="http://stage.vambenepe.com/archives/173">how SPARQL and XML query languages (or now JSON query languages) complement one another</a> (wouldn&#8217;t that be a nice trifecta: RDF/OWL&#8217;s precise modeling, JSON&#8217;s friendly syntax and SPARQL&#8217;s graph support &#8211; but I digress).</p>
<p>Going back to partial resource access, the last feature is the biggie: <a href="http://stage.vambenepe.com/archives/1665">a fine-grained mechanism to update resource properties</a>. That one is extra-hard.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1787/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Comments on &#8220;The Good, the Bad, and the Ugly of REST APIs&#8221;</title>
		<link>http://stage.vambenepe.com/archives/1777</link>
		<comments>http://stage.vambenepe.com/archives/1777#comments</comments>
		<pubDate>Tue, 07 Jun 2011 04:29:15 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1777</guid>
		<description><![CDATA[A survivor of intimate contact with many Cloud APIs, George Reese shared his thoughts about the experience in a blog post titled &#8220;The Good, the Bad, and the Ugly of REST APIs&#8220;. Here are the highlights of his verdict, with some comments. &#8220;Supporting both JSON and XML [is good]&#8220; I disagree: Two versions of a [...]]]></description>
			<content:encoded><![CDATA[<p>A survivor of intimate contact with many Cloud APIs, George Reese shared his thoughts about the experience in a blog post titled &#8220;<a href="http://broadcast.oreilly.com/2011/06/the-good-the-bad-the-ugly-of-rest-apis.html">The Good, the Bad, and the Ugly of REST APIs</a>&#8220;.</p>
<p>Here are the highlights of his verdict, with some comments.</p>
<p><strong>&#8220;Supporting both JSON and XML [is good]&#8220;</strong></p>
<p>I disagree: <a href="http://stage.vambenepe.com/archives/1311 ">Two versions of a protocol is one too many</a> (the post behind this link doesn&#8217;t specifically discuss the JSON/XML dichotomy but its logic applies to that situation, as Tim Bray <a href="http://stage.vambenepe.com/archives/1311#comment-103301">pointed out in a comment</a>).</p>
<p><strong>&#8220;REST is good, SOAP is bad&#8221;</strong></p>
<p>Not necessarily true for all integration projects, but in the context of Cloud APIs, I agree. As long as it&#8217;s &#8220;pragmatic REST&#8221;, not the kind that involves <a href="http://stage.vambenepe.com/archives/1300">silly contortions to please the REST police</a>.</p>
<p><strong>&#8220;Meaningful error messages help a lot&#8221;</strong></p>
<p>True <a href="http://stage.vambenepe.com/archives/1504">and yet rarely done properly</a>.</p>
<p><strong>&#8220;Providing solid API documentation reduces my need for your help&#8221;</strong></p>
<p>Goes without saying (for a good laugh, check out the commenter on George&#8217;s blog entry who wrote that &#8220;if you document an API, you API immediately ceases to have anything to do with REST&#8221; which I want to believe was meant as a joke but appears written in earnest).</p>
<p><strong>&#8220;Map your API model to the way your data is consumed, not your data/object model&#8221;</strong></p>
<p>Very important. This is a core part of <a href="http://stage.vambenepe.com/archives/42">Humble Architecture</a>.</p>
<p><strong>&#8220;Using OAuth authentication doesn&#8217;t map well for system-to-system interaction&#8221;</strong></p>
<p>Agreed.</p>
<p><strong>&#8220;Throttling is a terrible thing to do&#8221;</strong></p>
<p>I don&#8217;t agree with that sweeping statement, but when George expands on this thought what he really seems to mean is more along the lines of &#8220;if you&#8217;re going to throttle, do it smartly and responsibly&#8221;, which I can&#8217;t disagree with.</p>
<p><strong>&#8220;And while we&#8217;re at it, chatty APIs suck&#8221;</strong></p>
<p>Yes. And one of the main causes of API chattiness is fear of angering the REST gods by violating the sacred ritual. Either ignore that fear or, if you can&#8217;t, hire an expensive REST consultant to rationalize a less-chatty design with some media-type black magic and REST-bless it.</p>
<p>Finally George ends by listing three &#8220;ugly&#8221; aspects of bad APIs (&#8220;returning HTML in your response body&#8221;, &#8220;failing to realize that a 4xx error means I messed up and a 5xx means you messed up&#8221; and &#8220;side-effects to 500 errors are evil&#8221;) which I agree on but I see those as a continuation of the earlier point about paying attention to the error messages you return (because that&#8217;s what the developers who invoke your API will be staring at most of the time, even if they represents only 0.01% of the messages you return).</p>
<p>What&#8217;s most interesting is what&#8217;s NOT in George&#8217;s list. No nit-picking about REST purity. That tells you something about what matters to implementers.</p>
<p>If I haven&#8217;t yet exhausted my quota of self-referential links, you can read <a href="http://stage.vambenepe.com/archives/1161">REST in practice for IT and Cloud management</a> for more on the topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1777/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CloudFormation in context</title>
		<link>http://stage.vambenepe.com/archives/1750</link>
		<comments>http://stage.vambenepe.com/archives/1750#comments</comments>
		<pubDate>Sun, 27 Feb 2011 08:37:08 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1750</guid>
		<description><![CDATA[I&#8217;ve been very positive about AWS CloudFormation (both in tweet and blog form) since its announcement . I want to clarify that it&#8217;s not the technology that excites me. There&#8217;s nothing earth-shattering in it. CloudFormation only covers deployment and doesn&#8217;t help you with configuration, monitoring, diagnostic and ongoing lifecycle. It&#8217;s been done before (including probably [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been very positive about AWS CloudFormation (both in <a href="http://twitter.com/vambenepe/status/41193764479451136">tweet</a> and <a href="http://stage.vambenepe.com/archives/1745">blog</a> form) since its <a href="http://www.allthingsdistributed.com/2011/02/aws_cloudformation.html">announcement</a> . I want to clarify that it&#8217;s not the technology that excites me. There&#8217;s nothing earth-shattering in it. CloudFormation only covers deployment and doesn&#8217;t help you with configuration, monitoring, diagnostic and ongoing lifecycle. It&#8217;s been done before (including probably a half-dozen times within IBM alone, I would guess). We&#8217;ve had much more powerful and flexible frameworks for a long time (I can&#8217;t even remember when <a href="http://smartfrog.org">SmartFrog</a> first came out). And we&#8217;ve had frameworks with better tools (though history suggests that tools for CloudFormation are already in the works, not necessarily inside Amazon).</p>
<p>Here are some non-technical reasons why I <a href="http://twitter.com/vambenepe/status/41048489345417216 ">tweeted</a> that <em>&#8220;I have a feeling that the AWS CloudFormation format might become an even more fundamental de-facto standard than the EC2 API&#8221;</em> even before trying it out.</p>
<p><strong>It&#8217;s simple to use</strong>. There are two main reasons for this (and the fact that it uses JSON rather than XML is not one of them):<br />
- It only support a small set of features<br />
- It &#8220;hard-codes&#8221; resource types (e.g. EC2, Beanstalk, RDS&#8230;) rather than focusing on an abstract and extensible mechanism</p>
<p><strong>It combines a format and an API</strong>. You&#8217;d think it&#8217;s obvious that the two are complementary. What can you do with a format if you don&#8217;t have an API to exchange documents in that format? Well, turns out there are lots of free-floating model formats out there for which there is no defined API. And they are still wondering why they never saw any adoption.</p>
<p><strong>It merges IaaS and PaaS</strong>. AWS has always defied the &#8220;IaaS vs. PaaS&#8221; view of the Cloud. By bridging both, CloudFormation is a great way to provide a smooth transition. I expect most of the early templates to be very EC2-centric (are as most AWS deployments) and over time to move to a pattern in which EC2 resources are just used for what doesn&#8217;t fit in more specialized containers).</p>
<p><strong>It comes at the right time</strong>. It picks the low-hanging fruits of the AWS automation ecosystem. The evangelism and proof of concept for templatized deployments have already taken place.</p>
<p><strong>It provides a natural grouping</strong> of the various AWS resources you are currently consuming. They are now part of an explicit deployment context.</p>
<p><strong>It&#8217;s free</strong> (the resources provisioned are not free, of course, but the fact that they came out of a CloudFormation deployment doesn&#8217;t change the cost).</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1750/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AWS CloudFormation is the iPhone of Cloud services</title>
		<link>http://stage.vambenepe.com/archives/1745</link>
		<comments>http://stage.vambenepe.com/archives/1745#comments</comments>
		<pubDate>Sun, 27 Feb 2011 07:08:26 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Portability]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtual appliance]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1745</guid>
		<description><![CDATA[Expanding on tweet that I wrote soon after the announcement of AWS CloudFormation. The iPhone unifies the GPS, phone, PDA, camera and camcorder. CloudFormation does the same for infrastructure services (VMs, volumes, network&#8230;) and some platform services (Beanstalk, RDS, SimpleDB, SQS, SNS&#8230;). You don&#8217;t think about whether you should grab a phone or a PDA, [...]]]></description>
			<content:encoded><![CDATA[<p>Expanding on <a href="https://twitter.com/vambenepe/status/41054592011608064">tweet</a> that I wrote soon after the <a href="http://aws.typepad.com/aws/2011/02/cloudformation-create-your-aws-stack-from-a-recipe.html">announcement of AWS CloudFormation</a>.</p>
<p>The iPhone unifies the GPS, phone, PDA, camera and camcorder. CloudFormation does the same for infrastructure services (VMs, volumes, network&#8230;) and some platform services (Beanstalk, RDS, SimpleDB, SQS, SNS&#8230;). You don&#8217;t think about whether you should grab a phone or a PDA, you grab an iPhone and start using the feature you need. It&#8217;s the default tool. Similarly with CloudFormation, you won&#8217;t start by thinking about what AWS service you want to use. Rather, you grab a CloudFormation template and modify it as needed. The template (or the template editor) is the default tool.</p>
<p>The iPhone doesn&#8217;t just group features that used to be provided by many devices. It also allows these features to collaborate. It&#8217;s not that you get a PDA and a phone side-by-side in one device. You can press the &#8220;call&#8221; button from the &#8220;PDA&#8221; feature. CloudFormation doesn&#8217;t just bundle deployments to various AWS services, it wires them together.</p>
<p>Anyone can write apps for the iPhone. Anyone can write apps that use CloudFormation.</p>
<p>There&#8217;s an App Store for iPhone apps. On the CloudFormation side, it will probably come soon (right now Amazon has made templates available on S3, but that&#8217;s not a real store). Amazon has developed example templates for a set of common applications, but expect application authors to take ownership of that task soon. They&#8217;ll consider it one of their deliverables. Right next to the &#8220;download&#8221; button you&#8217;ll start seeing a &#8220;deploy to AWS&#8221; button. Guess which one will eventually be used the most?</p>
<p>It&#8217;s Apple&#8217;s platform and your applications have to comply with their policy. AWS is not as much of a control freak as Apple and doesn&#8217;t have an upfront approval process, but it has its terms of service and they too can get you <a href="http://aws.amazon.com/message/65348/">kicked out</a>.</p>
<p>The iPhone is not a standard platform (though you may consider it a de-facto standard). Same for AWS CloudFormation.</p>
<p>There are alternatives to the iPhone that define themselves primarily as being more open than it, mainly Android. Same for AWS with OpenStack (which probably will soon have its CloudFormation equivalent).</p>
<p>The iPhone infiltrated itself into corporations at the ground level, even if the CIO initially saw no reason to look beyond BlackBerry for corporate needs. Same with AWS.</p>
<p>Any other parallel? Any fundamental difference I missed?</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1745/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cloud APIs are like military parades</title>
		<link>http://stage.vambenepe.com/archives/1712</link>
		<comments>http://stage.vambenepe.com/archives/1712#comments</comments>
		<pubDate>Tue, 25 Jan 2011 05:39:46 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1712</guid>
		<description><![CDATA[The previous post (&#8220;Amazon proves that REST doesn’t matter for Cloud APIs&#8221;) attracted some interesting comments on the blog itself, on Hacker News and in a response post by Mike Pearce (where I assume the photo is supposed to represent me being an AWS fanboy). I failed to promptly follow-up on it and address the [...]]]></description>
			<content:encoded><![CDATA[<p>The previous post (<a href="http://stage.vambenepe.com/archives/1700">&#8220;Amazon proves that REST doesn’t matter for Cloud APIs&#8221;</a>) attracted some interesting comments on the blog itself, on <a href="http://news.ycombinator.com/item?id=1978379">Hacker News</a> and in a <a href="http://blog.mikepearce.net/2010/12/07/in-response-to-amazon-proves-that-rest-doesn%E2%80%99t-matter-for-cloud-apis/">response post</a> by Mike Pearce (where I assume the photo is supposed to represent me being an AWS fanboy). I failed to promptly follow-up on it and address the response, then the holidays came. But Mark Little was kind enough to pick the entry up <a href="http://www.infoq.com/news/2011/01/rest-cloud">for discussion on InfoQ</a> yesterday which brought new readers and motivated me to write a follow-up.</p>
<p>Mark did a very good job at summarizing my point and he understood that I wasn&#8217;t talking about the value (or lack of value) of REST in general. Just about whether it is useful and important in the very narrow field of Cloud APIs. In that context at least, what seems to matter most is simplicity. And REST is not intrinsically simpler.</p>
<p>It isn&#8217;t a controversial statement in most places that RPC is easier than REST for developers performing simple tasks. But on the blogosphere I guess it needs to be argued.</p>
<p>Method calls is how normal developers write normal code. Doing it over the wire is the smallest change needed to invoke a remote API. The complexity with RPC has never been conceptual, it&#8217;s been in the plumbing. How do I serialize my method call and send it over? CORBA, RMI and SOAP tried to address that, none of them fully succeeded in keeping it simple and yet generic enough for the Internet. XML-RPC somehow (and unfortunately) got passed over in the process.</p>
<p>So what did AWS do? They pretty much solved that problem by using parameters in the URL as a dead-simple way to pass function parameters. And you get the response as an XML doc. In effect, it&#8217;s one-half of XML-RPC. Amazon did not invent this pattern. And the mechanism has some shortcomings. But it&#8217;s a pragmatic approach. You get the conceptual simplicity of RPC, without the need to agree on an RPC framework that tries to address way more than what you need. Good deal.</p>
<p>So, when Mike <a href="http://blog.mikepearce.net/2010/12/07/in-response-to-amazon-proves-that-rest-doesn%E2%80%99t-matter-for-cloud-apis/">asks</a> &#8220;<em>Does the fact that AWS use their own implementation of an API instead of a standard like, oh, I don’t know, REST, frustrate developers who really don’t want to have to learn another method of communicating with AWS?</em>&#8221; and goes on to answer &#8220;Yes&#8221;, I scratch my head. I&#8217;ve met many developers struggling to understand REST. I&#8217;ve never met a developer intimidated by RPC. As to the claim that REST is a &#8220;standard&#8221;, I&#8217;d like to read the spec. Please don&#8217;t point me to a PhD dissertation.</p>
<p>That being said, I am very aware that simplicity can come back to bite you, when it&#8217;s not just simple but simplistic and the task at hand demands more. <a href="http://linkednotbound.net/">Andrew Wahbe</a> hit the nail on the head in a <a href="http://stage.vambenepe.com/archives/1700#comment-116816">comment</a> on my original post:</p>
<p style="padding-left: 30px;"><em>Exposing an API for a unique service offered by a single vendor is not going to get much benefit from being RESTful.</em></p>
<p style="padding-left: 30px;"><em>Revisit the issue when you are trying to get a single client to work across a wide range of cloud APIs offered by different vendors; I’m willing to bet that REST would help a lot there. If this never happens — the industry decides that a custom client for each Cloud API is sufficient (e.g. not enough offerings on the market, or whatever), then REST may never be needed.</em></p>
<p>Andrew has the right perspective. The usage patterns for Cloud APIs may evolve to the point where the benefits of following the rules of REST become compelling. I just don&#8217;t think we&#8217;re there and frankly I am not holding my breath. There are lots of functional improvements needed in Cloud services before the burning issue becomes one of orchestrating between Cloud providers. And while a shared RESTful API would be the easiest to orchestrate, a shared RPC API will still be very reasonably manageable. The issue will mostly be one of shared semantics more than protocol.</p>
<p>Mike&#8217;s second retort was that it was illogical for me to say that software developers are mostly isolated from REST because they use Cloud libraries. Aren&#8217;t these libraries written by developers? What about these, he asks. Well, one of them, <a href="http://boto.cloudhackers.com/">Boto</a>&#8216;s <a href="http://elastician.com/">Mitch Garnaat</a> left a <a href="http://stage.vambenepe.com/archives/1700#comment-116733">comment</a>:</p>
<p style="padding-left: 30px;"><em>Good post. The vast majority of AWS (or any cloud provider’s) users never see the API. They interact through language libraries or via web-based client apps. So, the only people who really care are RESTafarians, and library developers (like me).</em></p>
<p style="padding-left: 30px;"><em>Perhaps it’s possible to have an API that’s so bad it prevents people from using it but the AWS Query API is no where near that bad. It’s fairly consistent and pretty easy to code to. It’s just not REST.</em></p>
<p>Yup. If REST is the goal, then this API doesn&#8217;t reach it. If usefulness is the goal, then it does just fine.</p>
<p>Mike&#8217;s third retort was to take issue with that statement I made:</p>
<p style="padding-left: 30px;"><em>The Rackspace people are technically right when they point out the <a href="http://www.rackspacecloud.com/blog/2010/06/15/a-close-look-at-the-rackspace-cloud-servers-api-and-how-it-compares-to-amazons-ec2-api/">benefits of their API compared to Amazon’s</a>. But it’s a rounding error compared to the innovation, pragmatism and frequency of iteration that distinguishes the services provided by Amazon. It’s the content that matters.</em></p>
<p>Mike thinks that</p>
<p style="padding-left: 30px;"><em>If Rackspace are ‘technically’ right, then they’re right. There’s no gray area. Morally, they’re also right and mentally, physically and spiritually, they’re right.</em></p>
<p>Sure. They&#8217;re technically, mentally, physically and spiritually right. They may even be legally, ethically, metaphysically and scientifically right. Amazon is only practically right.</p>
<p>This is not a ding on Rackspace. They&#8217;ll have to compete with Amazon on service (and price), not on API, as they well know and as they are doing. But they are racing against a fast horse.</p>
<p>More generally, the debate about how much the technical merits of an API matters (beyond the point where it gets the job done) is a recurring one. I am talking as a recovering over-engineer.</p>
<p>In a post almost a year ago, James Watters <a href="http://wattersjames.posterous.com/cloud-apis-vital-and-strategic-or-geeky-unuse-4">declared that it matters</a>. Mitch Garnaat weighed on the other side: <a href="http://twitter.com/garnaat/status/10104065239">&#8220;<em>given how few people use the raw API we probably spend too much time worrying about details</em>&#8220;</a>, <a href="http://twitter.com/garnaat/status/10104461499">&#8220;<em>maybe we worry too much about aesthetics</em>&#8220;</a>, <a href="http://twitter.com/garnaat/status/10132735252">&#8220;<em>I still wonder whether we obsess over the details of the API&#8217;s a bit too much</em>&#8220;</a> (in case you can&#8217;t tell, I&#8217;m a big fan of Mitch).</p>
<p>Speaking of people I admire, Shlomo Swidler (<a href="https://twitter.com/ShlomoSwidler/statuses/12503407532">&#8220;<em>in general, only library developers use the raw HTTP. Everyone else uses a library</em>&#8220;</a>) and Joe Arnold (<a href="https://twitter.com/joearnold/statuses/13922581388">&#8220;<em>library integration (fog / jclouds / libcloud) is more important for new #IaaS providers than an API</em>&#8220;</a>) make the right point. Rather than spending hours obsessing about the finer points of your API, spend the time writing love letters to <a href="http://twitter.com/garnaat">Mitch</a> and <a href="https://twitter.com/adrianfcole">Adrian</a> so they support you in their libraries (also, allocate less of your design time to RESTfulness and more to the less glamorous subject of <a href="http://stage.vambenepe.com/archives/1504">error handling</a>).</p>
<p>OK, I&#8217;ll pile on two more expert testimonies. Righscale&#8217;s Thorsten von Eicken (<a href="http://blog.rightscale.com/2010/05/04/vmops-rebrands-to-cloud-com-and-open-sources/">&#8220;<em>the API itself is more a programming exercise than a fundamental issue, it’s the semantics of the resources behind the API that really matter</em>&#8220;</a>) and F5&#8242;s Lori MacVittie (<a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/07/27/the-world-doesnrsquot-care-about-apis.aspx">&#8220;<em>the World Doesn’t Care About APIs</em>&#8220;</a>).</p>
<p>Bottom line, I see APIs a bit like military parades. Soldiers know better than to walk in tight formation, wearing bright colors and to the sound of fanfare into the battlefield. So why are parade exercises so prevalent in all armies? My guess is that they are used to impress potential enemies, reassure citizens and reflect on the strength of the country&#8217;s leaders. But military parades are also a way to ensure internal discipline. You may not need to use parade moves on the battlefield, but the fact that the unit is disciplined enough to perform them means they are also disciplined enough for the tasks that matter. Let&#8217;s focus on that angle for Cloud APIs. If your RPC API is consistent enough that its underlying model could be used as the basis for a REST API, you&#8217;re probably fine. You don&#8217;t need the drum rolls, stiff steps and the silly hats. And no need to salute either.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1712/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Amazon proves that REST doesn&#8217;t matter for Cloud APIs</title>
		<link>http://stage.vambenepe.com/archives/1700</link>
		<comments>http://stage.vambenepe.com/archives/1700#comments</comments>
		<pubDate>Tue, 07 Dec 2010 05:58:32 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1700</guid>
		<description><![CDATA[Every time a new Cloud API is announced, its &#8220;RESTfulness&#8221; is heralded as if it was a MUST HAVE feature. And yet, the most successful of all Cloud APIs, the AWS API set, is not RESTful. We are far enough down the road by now to conclude that this isn&#8217;t a fluke. It proves that [...]]]></description>
			<content:encoded><![CDATA[<p>Every time a new Cloud API is announced, its &#8220;RESTfulness&#8221; is heralded as if it was a MUST HAVE feature. And yet, the most successful of all Cloud APIs, the AWS API set, is not RESTful.</p>
<p>We are far enough down the road by now to conclude that this isn&#8217;t a fluke. It proves that REST doesn&#8217;t matter, at least for Cloud management APIs (there are web-scale applications of an entirely different class for which it does). By &#8220;doesn&#8217;t matter&#8221;, I don&#8217;t mean that it&#8217;s a bad choice. Just that it is not significantly different from reasonable alternatives, like RPC.</p>
<p>AWS mostly uses RPC over HTTP. You send HTTP GET requests, with instructions like <em>?Action=CreateKeyPair</em> added in the URL. Or <em>DeleteKeyPair</em>. Same for any other resource (<em>volume</em>, <em>snapshot</em>, <em>security group</em>&#8230;). Amazon doesn&#8217;t pretend it&#8217;s RESTful, they just call it &#8220;Query API&#8221; (except for the DevPay API, where they call it &#8220;REST-Query&#8221; for unclear reasons).</p>
<p>Has this lack of REStfulness stopped anyone from using it? Has it limited the scale of systems deployed on AWS? Does it limit the flexibility of the Cloud offering and somehow force people to consume more resources than they need? Has it made the Amazon Cloud less secure? Has it restricted the scope of platforms and languages from which the API can be invoked? Does it require more experienced engineers than competing solutions?</p>
<p>I don&#8217;t see any sign that the answer is &#8220;yes&#8221; to any of these questions. Considering the scale of the service, it would be a multi-million dollars blunder if indeed one of them had a positive answer.</p>
<p>Here&#8217;s a rule of thumb. If most invocations of your API come via libraries for object-oriented languages that more or less map each HTTP request to a method call, it probably doesn&#8217;t matter very much how RESTful your API is.</p>
<p>The Rackspace people are technically right when they point out the <a href="http://www.rackspacecloud.com/blog/2010/06/15/a-close-look-at-the-rackspace-cloud-servers-api-and-how-it-compares-to-amazons-ec2-api/">benefits of their API compared to Amazon&#8217;s</a>. But it&#8217;s a rounding error compared to the innovation, pragmatism and frequency of iteration that distinguishes the services provided by Amazon. It&#8217;s the content that matters.</p>
<p>If you think it&#8217;s rich, for someone who wrote a series of post examining &#8220;<em>REST in practice for IT and Cloud management</em>&#8221; (<a href="http://stage.vambenepe.com/archives/863">part 1</a>, <a href="http://stage.vambenepe.com/archives/894">part 2</a> and <a href="http://stage.vambenepe.com/archives/1161">part 3</a>), to now declare that REST doesn&#8217;t matter, well go back to these posts. I explicitly set them up as an effort to investigate whether (and in what way) it mattered and made it clear that my intuition was that actual RESTfulness didn&#8217;t matter as much as simplicity. The AWS API being an example of the latter without the former. As I wrote in my <a href="http://stage.vambenepe.com/archives/632">review of the Sun Cloud API</a>, &#8220;it’s not REST that matters, it’s the rest&#8221;. One and a half years later, I think the case is closed.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1700/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Partial resource update, one more time</title>
		<link>http://stage.vambenepe.com/archives/1665</link>
		<comments>http://stage.vambenepe.com/archives/1665#comments</comments>
		<pubDate>Fri, 05 Nov 2010 19:32:32 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WS-Management]]></category>
		<category><![CDATA[WS-ResourceTransfer]]></category>
		<category><![CDATA[WS-Transfer]]></category>
		<category><![CDATA[XMLFrag]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1665</guid>
		<description><![CDATA[Alex Scordellis has a good blog post about how to handle partial PUT in REST. It starts by explaining why partial PUT is needed in the first place. And then (including in the comments) it runs into the issues this brings and proposes some solutions. I have bad news. There are many more issues. Let&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alexscordellis.blogspot.com/">Alex Scordellis</a> has a good <a href="http://alexscordellis.blogspot.com/2010/11/restful-architecture-what-should-we-put.html">blog post</a> about how to handle partial PUT in REST. It starts by explaining why partial PUT is needed in the first place. And then (including in the comments) it runs into the issues this brings and proposes some solutions.</p>
<p>I have bad news. There are many more issues.</p>
<p>Let&#8217;s pick a simple example. What does it mean if an element is not present in a partial update? Is it an explicit omission, intended to represent the need to remove this element in the representation? Or does it mean &#8220;don&#8217;t change its current value&#8221;. If the latter, then how do I do removal? Do I need partial DELETE like I have partial PUT? Hopefully not, but then I have to have a mechanism to remove elements as part of a PUT. Empty value? That doesn&#8217;t necessarily mean the same thing as an absent element. Nil value? And how do I handle this with JSON?</p>
<p>And how do you deal with repeating elements? If you PUT an element of that type, is it an addition or a replacement? If replacement, which one(s) are you replacing? Or do you force me to PUT the entire list? No matter how long it is? Even if it increases the risk of concurrency issues?</p>
<p>Lots of similar issues. These two are just off the top of my head, memories from hours locked in a room with my HP, IBM, Intel and Microsoft accomplices.</p>
<p>You know what you end up with? You end up with <a href="http://www.w3.org/TR/ws-resource-transfer/#put">this</a>. Partial Put in WS-RT. I can hear you scream from here.</p>
<p><em>I am the ghost of dead partial update mechanisms, coming back to haunt you&#8230;</em></p>
<p>As much as WS-* was criticized for re-inventing HTTP, what we see here is HTTP people re-inventing partial resource update mechanisms like those in WSDM, WS-Management and WS-ResourceTransfer. Which is fine, I am in no way advocating that they should re-use these specs.</p>
<p>But let&#8217;s realize that while a lot of the complexity in WS-* was unnecessary, some of it actually was a reflection of the complexity of the task at hand. And that complexity doesn&#8217;t go away because you get rid of a SOAP envelope and of stupid WS-Addressing headers.</p>
<p>The good news is that we&#8217;ve made a lot of the mistakes already and we&#8217;ve learned some lessons (see this <a href="http://stage.vambenepe.com/archives/224">technical rant</a>, this <a href="http://stage.vambenepe.com/archives/700">post-mortem</a> or this <a href="http://stage.vambenepe.com/archives/114">experiment</a>). The bad news is that there are plenty of new mistakes waiting to be made.</p>
<p>Good luck. I mean it sincerely.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1665/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Redeeming the service description document</title>
		<link>http://stage.vambenepe.com/archives/1629</link>
		<comments>http://stage.vambenepe.com/archives/1629#comments</comments>
		<pubDate>Fri, 15 Oct 2010 05:47:08 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mashup]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SML]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1629</guid>
		<description><![CDATA[A bicycle is a convenient way to go buy cigarettes. Until one day you realize that buying cigarettes is a bad idea. At which point you throw away your bicycle. Sounds illogical? Well, that&#8217;s pretty much what the industry has done with service descriptions. It went this way: people used WSDL (and stub generation tools [...]]]></description>
			<content:encoded><![CDATA[<p>A bicycle is a convenient way to go buy cigarettes. Until one day you realize that buying cigarettes is a bad idea. At which point you throw away your bicycle.</p>
<p>Sounds illogical? Well, that&#8217;s pretty much what the industry has done with service descriptions. It went this way: people used WSDL (and stub generation tools built around it) to build distributed applications that shared too much. Some people eventually realized that was a bad approach. So they threw out the whole idea of a service description. And now, in the age of APIs, we are no more advanced than we were 15 years ago in terms of documenting application contracts. It&#8217;s tragic.</p>
<p>The main fallacies involved in this stagnation are:</p>
<ul>
<li>Assuming that service descriptions are meant to auto-generate all-encompassing program stubs,</li>
<li>Looking for the One True Description for a given service,</li>
<li>Automatically validating messages based on the service description.</li>
</ul>
<p>I&#8217;ll leave the first one aside, it&#8217;s been widely covered. Let&#8217;s drill in a bit into the other two.</p>
<p><strong>There is NOT One True Description for a given service</strong></p>
<p>Many years ago, in the same galaxy where we live today (only a few miles from here, actually), was a development team which had to implement a web service for a specific WSDL. They fed the WSDL to their SOAP stack. This was back in the days when WSDL interoperability was a &#8220;promise&#8221; in the &#8220;political campaign&#8221; sense of the term so of course it didn&#8217;t work. As a result, they gave up on their SOAP stack and implemented the service as a servlet. Which, for a team new to XML, meant a long delay and countless bugs. I&#8217;ll always remember the look on the dev lead&#8217;s face when I showed him how 2 minutes and a text editor were all you needed to turn the offending WSDL in to a completely equivalent WSDL (from the point of view of on-the-wire messages) that their toolkit would accept.</p>
<p>(I forgot what the exact issue was, maybe having operations with different exchange patterns within the same PortType; or maybe it used an XSD construct not supported by the toolkit, and it was just a matter of removing this constraint and moving it from schema to code. In any case something that could easily be changed by editing the WSDL and the consumer of the service wouldn&#8217;t need to know anything about it.)</p>
<p>A service description is not the literal word of God. That&#8217;s true no matter where you get it from (unless it&#8217;s hand-delivered by an angel, I guess). Just because adding &#8220;?wsdl&#8221; to the URL of a Web service returns an XML document doesn&#8217;t mean it&#8217;s The One True Description for that service. It&#8217;s just the most convenient one to generate for the app server on which the service is deployed.</p>
<p>One of the things that most hurts XML as an on-the-wire format is XSD. But not in the sense that &#8220;XSD is bad&#8221;. Sure, it has plenty of warts, but what really hurts XML is not XSD per se as much as the all-too-common assumption that if you use XML you need to have an XSD for it (see <a href="http://stage.vambenepe.com/archives/100">fat-bottomed specs</a>, the key message of which I believe is still true even though SML and SML-IF are now dead).</p>
<p>I&#8217;ve had several conversations like this one:</p>
<p>- The best part about using JSON and REST was that we didn&#8217;t have to deal with XSD.<br />
- So what do you use as your service contract?<br />
- Nothing. Just a human-readable wiki page.<br />
- If you don&#8217;t need a service contract, why did you feel like you had to write an XSD when you were doing XML? Why not have a similar wiki page describing the XML format?<br />
- &#8230;</p>
<p>It&#8217;s perfectly fine to have service descriptions that are optimized to meet a specific need rather than automatically focusing on syntax validation. Not all consumers of a service contract need to be using the same description. It&#8217;s ok to have different service descriptions for different users and/or purposes. Which takes us to the next fallacy. What are service descriptions for if not syntax validation?</p>
<p><strong>A service description does NOT mean you have to validate messages</strong></p>
<p>As helpful as &#8220;validation&#8221; may seem as a concept, it often boils down to rejecting messages that could otherwise be successfully processed. Which doesn&#8217;t sound quite as useful, does it?</p>
<p>There are many other ways in which service descriptions could be useful, but they have been largely neglected because of the focus on syntactic validation and stub generation. Leaving aside development use cases and looking at my area of focus (application management), here are a few use cases for service descriptions:</p>
<p><em>Creating test messages (aka &#8220;synthetic transactions&#8221;)</em></p>
<p>A common practice in application management is to send test messages at regular intervals (often from various locations, e.g. branch offices) to measure the availability and response time of an application from the consumer&#8217;s perspective. If a WSDL is available for the service, we use this to generate the skeleton of the test message, and let the admin fill in appropriate values. Rather than a WSDL we&#8217;d much rather have a &#8220;ready-to-use&#8221; (possibly after admin review) test message that would be provided as part of the service description. Especially as it would be defined by the application creator, who presumably knows a lot more about that makes a safe and yet relevant message to send to the application as a ping.</p>
<p><em>Attaching policies and SLAs</em></p>
<p>One of the things that WSDLs are often used for, beyond syntax validation and stub generation, is to attach policies and SLAs. For that purpose, you really don&#8217;t need the XSD message definition that makes up so much of the WSDL. You really just need a way to identify operations on which to attach policies and SLAs. We could use a much simpler description language than WSDL for this. But if you throw away the very notion of a description language, you&#8217;ve thrown away the baby (a classification of the requests processed by the service) along with the bathwater (a syntax validation mechanism).</p>
<p><em>Governance / versioning</em></p>
<p>One benefit of having a service description document is that you can see when it changes. Even if you reduce this to a simple binary value (did it change since I last checked, y/n) there&#8217;s value in this. Even better if you can introspect the description document to see which requests are affected by the change. And whether the change is backward-compatible. Offering the &#8220;before&#8221; XSD and the &#8220;after&#8221; XSD is almost useless for automatic processing. It&#8217;s unlikely that some automated XSD inspection can tell me whether I can keep using my previous messages or I need to update them. A simple machine-readable declaration of that fact would be a lot more useful.</p>
<p>I just listed three, but there are other application management use cases, like governance/auditing, that need a service description.</p>
<p>In the SOAP world, we usually make do with WSDL for these tasks, not because it&#8217;s the best tool (all we really need is a way to classify requests in &#8220;buckets&#8221; &#8211; call them &#8220;operations&#8221; if you want &#8211; based on the content of the message) but because WSDL is the only understanding that is shared between the caller and the application.</p>
<p>By now some of you may have already drafted in your head the comment you are going to post explaining why this is not a problem if people just use REST. And it&#8217;s true that with REST there is a default categorization of incoming messages. A simple matrix with the various verbs as columns (GET, POST&#8230;) and the various resource types as rows. Each message can be unambiguously placed in one cell of this matrix, so I don&#8217;t need a service description document to have a request classification on which I can attach SLAs and policies. Granted, but keep these three things in mind:</p>
<ul>
<li>This default categorization by verb and resource type can be a quite granular. Typically you wouldn&#8217;t have that many different policies on your application. So someone who understands the application still needs to group the invocations into message categories at the right level of granularity.</li>
<li>This matrix is only meaningful for the subset of &#8220;RESTful&#8221; apps that are truly&#8230; RESTful. Not for all the apps that use REST where it&#8217;s an easy mental mapping but then define resource types called &#8220;operations&#8221; or &#8220;actions&#8221; that are just a REST veneer over RPC.</li>
<li>Even if using REST was a silver bullet that eliminated the need for service definitions, as an application management vendor I don&#8217;t get to pick the applications I manage. I have to have a solution for what customers actually do. If I restricted myself to only managing RESTful applications, I&#8217;d shrink my addressable market by a few orders of magnitude. I don&#8217;t have an MBA, but it sounds like a bad idea.</li>
</ul>
<p>This is not a SOAP versus REST post. This is not a XML versus JSON post. This is not a WSDL versus WADL post. This is just a post lamenting the fact that the industry seems to have either boxed service definitions into a very limited use case, or given up on them altogether. It I wasn&#8217;t recovering from standards burnout, I&#8217;d look into a versatile mechanism for describing application services in a way that is geared towards message classification more than validation.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1629/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updates on Microsoft Oslo and &#8220;SSH on Windows&#8221;</title>
		<link>http://stage.vambenepe.com/archives/1565</link>
		<comments>http://stage.vambenepe.com/archives/1565#comments</comments>
		<pubDate>Fri, 06 Aug 2010 06:40:47 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[SML]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WS-Management]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1565</guid>
		<description><![CDATA[I&#8217;ve been tracking the modeling technology previously known as &#8220;Microsoft Oslo&#8221; with a sympathetic eye for the almost three years since it&#8217;s been introduced. I look at it from the perspective of model-driven IT management but the news hadn&#8217;t been good on that front lately (except for Douglas Purdy&#8217;s encouraging hint). The prospects got even [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been tracking the modeling technology previously known as &#8220;Microsoft Oslo&#8221; <a href="http://stage.vambenepe.com/archives/category/oslo">with a sympathetic eye</a> for the almost three years since it&#8217;s been <a href="http://stage.vambenepe.com/archives/131">introduced</a>. I look at it from the perspective of model-driven IT management but the news <a href="http://stage.vambenepe.com/archives/910">hadn&#8217;t been good on that front</a> lately (except for <a href="http://www.douglaspurdy.com/2009/08/28/oslo-and-dsidynamic-it/">Douglas Purdy&#8217;s encouraging hint</a>).</p>
<p>The prospects got even bleaker today, at least <a href="http://www.zdnet.com/blog/microsoft/another-piece-of-microsofts-oslo-modeling-puzzle-disappears/7014">according to the usually-well-informed Mary Jo Foley</a>, who writes: <em>&#8220;Multiple contacts of mine are telling me that Microsoft has decided to shelve Quadrant and &#8216;refocus&#8217; M.&#8221;</em> Is &#8220;M&#8221; the end of the SDM/SML/M model-driven management approach at Microsoft? Or is the &#8220;refocus&#8221; a hint that M is returning &#8220;home&#8221; to address IT management use cases? Time (or Doug) will tell&#8230;</p>
<p>While we&#8217;re talking about Microsoft and IT automation, I have one piece of free advice for the Microsofties: people *really* want to SSH into Windows servers. Here&#8217;s how I know. This blog rarely talks about Microsoft but over the course of two successive weekends over a year ago I toyed with ways to remotely manage Windows machines using publicly documented protocols. In effect, showing what to send on the wire (from Linux or any platform) to leverage the SOAP-based management capabilities in recent versions of Windows. To my surprise, these posts (<a href="http://stage.vambenepe.com/archives/816">1</a>, <a href="http://stage.vambenepe.com/archives/837">2</a>, <a href="http://stage.vambenepe.com/archives/844">3</a>) still draw a disproportionate amount of traffic. And whenever I look at my httpd logs, I can count on seeing search engine queries related to &#8220;windows native ssh&#8221; or similar keywords.</p>
<p>If heterogeneous Cloud is something Microsoft cares about they need to better leverage the potential of the <a href="http://msdn.microsoft.com/en-us/library/dd357801%28PROT.10%29.aspx">PowerShell Remoting Protocol</a>. They can release open-source Python, Java and Ruby client-side libraries. Alternatively, they can drastically simplify the protocol, rather than its current &#8220;binary over SOAP&#8221; (you read this right) incarnation. Because the poor Kridek who is <a href="http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/aaa0ccfd-9c28-450a-ab10-88d5d25f4b32">looking for</a> the &#8220;WSDL for WinRM / Remote Powershell&#8221; is in for a nasty surprise if he finds it and thinks he&#8217;ll get a ready-to-use stub out of it.</p>
<p>That being said, a brave developer willing to suck it up and create such a Python/Ruby/Java library would probably make some people very grateful.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1565/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Introducing the Oracle Cloud API</title>
		<link>http://stage.vambenepe.com/archives/1538</link>
		<comments>http://stage.vambenepe.com/archives/1538#comments</comments>
		<pubDate>Mon, 19 Jul 2010 06:12:02 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Portability]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtual appliance]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1538</guid>
		<description><![CDATA[Oracle recently published a Cloud management API on OTN and also submitted a subset of the API to the new DMTF Cloud Management working group. The OTN specification, titled &#8220;Oracle Cloud Resource Model API&#8221;, is available here. In typical DMTF fashion, the DMTF-submitted specification is not publicly available (if you have a DMTF account and [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle recently published a Cloud management API on <a href="http://www.oracle.com/technetwork/index.html">OTN</a> and also submitted a subset of the API to the new DMTF Cloud Management working group. The OTN specification, titled <em>&#8220;Oracle Cloud Resource Model API&#8221;</em>, is available <a href="http://www.oracle.com/technetwork/topics/cloud/oracle-cloud-resource-model-api-154279.pdf">here</a>. In typical DMTF fashion, the DMTF-submitted specification is not publicly available (if you have a DMTF account and are a member of the right group you can find it <a href="http://www.dmtf.org/apps/org/workgroup/technical/download.php/54501/OracleCloudElementalResourceModelAPI.pdf">here</a>). It is titled the <em>&#8220;Oracle Cloud Elemental Resource Model&#8221;</em> and is essentially the same as the OTN version, minus sections 9.2, 9.4, 9.6, 9.8, 9.9 and 9.10 (I&#8217;ll explain below why these sections have been removed from the DMTF submission). Here is also a <a href="http://stage.vambenepe.com/wp-content/uploads/CloudResourceModels_CMF2F.pdf">slideset</a> that was recently used to present the submitted specification at a DMTF meeting.</p>
<p>So why two documents? Because they serve different purposes. The Elemental Resource Model, submitted to DMTF, represents the technical foundation for the IaaS layer. It&#8217;s not all of IaaS, just its core. You can think of its scope as that of the base EC2 service (boot a VM from an image, attach a volume, connect to a network). It&#8217;s the part that appears in all the various IaaS APIs out there, and that looks very similar, in its model, across all of them. It&#8217;s the part that&#8217;s ripe for a simple standard, hopefully free of much of the drama of a more open-ended and speculative effort. A standard that can come out quickly and provide interoperability right out of the gate (for the simple use cases it supports), not after years of plugfests and profiles. This is the narrow scope I described in an <a href="http://stage.vambenepe.com/archives/1344">earlier rant about Cloud standards</a>:</p>
<p style="padding-left: 30px;"><em>I understand the pain of customers today who just want to have a bit more flexibility and portability within the limited scope of the VM/Volume/IP offering. If we really want to do a standard today, fine. Let’s do a very small and pragmatic standard that addresses this. Just a subset of the EC2 API. Don’t attempt to standardize the virtual disk format. Don’t worry about application-level features inside the VM. Don’t sweat the REST or SOA purity aspects of the interface too much either. Don’t stress about scalability of the management API and batching of actions. Just make it simple and provide a reference implementation. A few HTTP messages to provision, attach, update and delete VMs, volumes and IPs. That would be fine. Anything else (and more is indeed needed) would be vendor extensions for now.</em></p>
<p>Of course IaaS goes beyond the scope of the Elemental Resource Model. We&#8217;ll need load balancing. We&#8217;ll need tunneling to the private datacenter. We&#8217;ll need low-latency sub-networks. We&#8217;ll need the ability to map multi-tier applications to different security zones. Etc. Some Cloud platforms support some of these (e.g. Amazon has an answer to all but the last one), but there is a lot more divergence (both in the &#8220;what&#8221; and the &#8220;how&#8221;) between the various Cloud APIs on this. That part of IaaS is not ready for standardization.</p>
<p>Then there are the extensions that attempt to make the IaaS APIs more application-aware. These too exist in some Cloud APIs (e.g. vCloud vApp) but not others. They haven&#8217;t naturally converged between implementations. They haven&#8217;t seen nearly as much usage in the industry as the base IaaS features. It would be a mistake to overreach in the initial phase of IaaS standardization and try to tackle these questions. It would not just delay the availability of a standard for the base IaaS use cases, it would put its emergence and adoption in jeopardy.</p>
<p>This is why Oracle withheld these application-aware aspects from the DMTF submission, though we are sharing them in the specification published on OTN. We want to expose them and get feedback. We&#8217;re open to collaborating on them, maybe even in the scope of a standard group if that&#8217;s the best way to ensure an open IP framework for the work. But it shouldn&#8217;t make the upcoming DMTF IaaS specification more complex and speculative than it needs to be, so we are keeping them as separate extensions. Not to mention that DMTF as an organization has a lot more infrastructure expertise than middleware and application expertise.</p>
<p>Again, the &#8220;Elemental Resource Model&#8221; specification submitted to DMTF is the same as the &#8220;Oracle Cloud Resource Model API&#8221; on OTN except that it has a different license (a license grant to DMTF instead of the usual OTN license) and is missing some resources in the list of resource types (section 9).</p>
<p>Both specifications share the exact same protocol aspects. It&#8217;s pretty cleanly RESTful and uses a JSON serialization. The credit for the nice RESTful protocol goes to the folks who created the original <a href="http://kenai.com/projects/suncloudapis/pages/Home">Sun Cloud API</a> as this is pretty much what the Oracle Cloud API adopted in its entirety. <a href="https://twitter.com/timbray">Tim Bray</a> described the <a href="http://www.tbray.org/ongoing/When/200x/2009/03/16/Sun-Cloud">genesis and design philosophy of the Sun Cloud API</a> last year. He also described his role and explained that &#8220;most of the heavy lifting was done by Craig McClanahan with guidance from <a href="https://twitter.com/lewtucker">Lew Tucker</a>&#8220;. It&#8217;s a shame that the Oracle specification fails to credit the Sun team and I kick myself for not noticing this in my reviews. This heritage was noted from the get go in the <a href="http://stage.vambenepe.com/wp-content/uploads/CloudResourceModels_CMF2F.pdf">slides</a> and is, in my mind, a selling point for the specification. When I <a href="http://stage.vambenepe.com/archives/863">reviewed the main Cloud APIs</a> available last summer (the first part in a <a href="http://stage.vambenepe.com/archives/1161">&#8220;REST in practice for IT and Cloud management&#8221;</a> series), I liked Sun&#8217;s protocol design the best.</p>
<p>The resource model, while still based on the Sun Cloud API, has seen many more changes. That&#8217;s where our tireless editor, <a href="http://twitter.com/yujack">Jack Yu</a>, with help from <a href="http://twitter.com/macsun">Mark Carlson</a>, has spent most of the countless hours he devoted to the specification. I won&#8217;t do a point to point comparison of the Sun model and the Oracle model, but in general most of the changes and additions are motivated by use cases that are more heavily tilted towards private clouds and compatibility with existing application infrastructure. For example, the semantics of a <em>Zone</em> have been relaxed to allow a private Cloud administrator to choose how to partition the Cloud (by location is an obvious option, but it could also by security zone or by organizational ownership, as heretic as this may sound to Cloud purists).</p>
<p>The most important differences between the DMTF and OTN versions relate to the support for assemblies, which are groups of VMs that jointly participate in the delivery of a composite application. This goes hand-in-hand with the recently-released <a href="http://www.oracle.com/us/products/middleware/application-server/virtual-assembly-builder-067878.html">Oracle Virtual Assembly Builder</a>, a framework for creating, packing, deploying and configuring multi-tier applications. To support this approach, the Cloud Resource Model (but not the Elemental Model, as explained above) adds resource types such as <em>AssemblyTemplate</em>, <em>AssemblyInstance</em> and <em>ScalabilityGroup</em>.</p>
<p>So what now? The DMTF working group has received a large number of IaaS APIs as submissions (though not <a href="http://docs.amazonwebservices.com/AWSEC2/2010-06-15/APIReference/">the one that matters most</a> or <a href="http://openstack.org/">the one that may well soon matter a lot too</a>). If all goes well it will succeed in delivering a simple and useful standard for the base IaaS use cases, and we&#8217;ll be down to a somewhat manageable triplet (EC2, RackSpace/OpenStack and DMTF) of IaaS specifications. If not (either because the DMTF group tries to bite too much or because it succumbs to infighting) then DMTF will be out of the game entirely and it will be between EC2, OpenStack and a bunch of private specifications. It will be the reign of toolkits/library/brokers and hell on earth for all those who think that such a bridging approach is as good as a standard. And for this reason it will have to coalesce at some point.</p>
<p>As far as the more application-centric approach to hypervisor-based Cloud, well, the interesting things are really just starting. Let&#8217;s experiment. And let&#8217;s talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1538/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dear Cloud API, your fault line is showing</title>
		<link>http://stage.vambenepe.com/archives/1504</link>
		<comments>http://stage.vambenepe.com/archives/1504#comments</comments>
		<pubDate>Wed, 26 May 2010 04:10:08 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1504</guid>
		<description><![CDATA[Most APIs are like hospital gowns. They seem to provide good coverage, until you turn around. I am talking about the dreadful state of fault reporting in remote APIs, from Twitter to Cloud interfaces. They are badly described in the interface documentation and the implementations often don&#8217;t even conform to what little is documented. If, [...]]]></description>
			<content:encoded><![CDATA[<p>Most APIs are like hospital gowns. They seem to provide good coverage, until you turn around.</p>
<p>I am talking about the dreadful state of fault reporting in remote APIs, from Twitter to Cloud interfaces. They are badly described in the interface documentation and the implementations often don&#8217;t even conform to what little is documented.</p>
<p>If, when reading a specification, you get the impression that the &#8220;normal&#8221; part of the specification is the result of hours of whiteboard debate but that the section that describes the faults is a stream-of-consciousness late-night dump that no-one reviewed, well&#8230; you&#8217;re most likely right. And this is not only the case for standard-by-committee kind of specifications. Even when the specification is written to match the behavior of an existing implementation, error handling is often incorrectly and incompletely described. In part because developers may not even know what their application returns in all error conditions.</p>
<p>After learning the lessons of SOAP-RPC, programmers are now more willing to acknowledge and understand the on-the-wire messages received and produced. But when it comes to faults, there is still a tendency to throw their hands in the air, write to the application log and then let the stack do whatever it does when an unhandled exception occurs, on-the-wire compliance be damned. If that means sending an HTML error message in response to a request for a JSON payload, so be it. After all, it&#8217;s just a fault.</p>
<p>But even if fault messages may only represent 0.001% of the messages your application sends, they still represent 85% of those that the client-side developers will look at.</p>
<p>Client developers can&#8217;t even reverse-engineer the fault behavior by hitting a reference implementation (whether official or de-facto) the way they do with regular messages. That&#8217;s because while you can generate response messages for any successful request, you don&#8217;t know what error conditions to simulate. You can&#8217;t tell your Cloud provider &#8220;please bring down your user account database for five minutes so I can see what faults you really send me when that happens&#8221;. Also, when testing against a live application you may get a different fault behavior depending on the time of day. A late-night coder (or a daytime coder in another time zone) might never see the various faults emitted when the application (like Twitter) is over capacity. And yet these will be quite common at peak time (when the coder is busy with his day job&#8230; or sleeping).</p>
<p>All these reasons make it even more important to carefully (and accurately) document fault behavior.</p>
<p>The move to REST makes matters even worse, in part because it removes SOAP faults. There&#8217;s nothing magical about SOAP faults, but at least they force you to think about providing an information payload inside your fault message. Many REST APIs replace that with HTTP error codes, often accompanied by a one-line description with a sometimes unclear relationship with the semantics of the application. Either it&#8217;s a standard error code, which by definition is very generic or it&#8217;s an application-defined code at which point it most likely overlaps with one or more standard codes and you don&#8217;t know when you should expect one or the other. Either way, there is too much faith put in the HTTP code versus the payload of the error. Let&#8217;s be realistic. There are very few things most applications can do automatically in response to a fault. Mainly:</p>
<ul>
<li>Ask the user to re-enter credentials (if it&#8217;s an authentication/permission issue)</li>
<li>Retry (immediately or after some time)</li>
<li>Report a problem and fail</li>
</ul>
<p>So make sure that your HTTP errors support this simple decision tree. Beyond that point, listing a panoply of application-specific error codes looks like an attempt to look &#8220;RESTful&#8221; by overdoing it. In most cases, application-specific error codes are too detailed for most automated processing and not detailed enough to help the developer understand and correct the issue. I am not against using them but what matters most is the payload data that comes along.</p>
<p>On that aspect, implementations generally fail in one of two extremes. Some of them tell you nothing. For example the payload is a string that just repeats what the documentation says about the error code. Others dump the kitchen sink on you and you get a full stack trace of where the error occurred in the server implementation. The former is justified as a security precaution. The latter as a way to help you debug. More likely, they both just reflect laziness.</p>
<p>In the ideal world, you&#8217;d get a detailed error payload telling you exactly which of the input parameters the application choked on and why. Not just vague words like &#8220;invalid&#8221;. Is parameter &#8220;foo&#8221; invalid for syntactical reasons? Is it invalid because inconsistent with another parameter value in the request? Is it invalid because it doesn&#8217;t match the state on the server side? Realistically, implementations often can&#8217;t spend too many CPU cycles analyzing errors and generating such detailed reports. That&#8217;s fine, but then they can include a link to a wiki a knowledge base where more details are available about the error, its common causes and the workarounds.</p>
<p>Your API should document all messages accurately and comprehensively. Faults are messages too.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1504/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Enterprise application integration patterns for IT management: a blast from the past or from the future?</title>
		<link>http://stage.vambenepe.com/archives/1383</link>
		<comments>http://stage.vambenepe.com/archives/1383#comments</comments>
		<pubDate>Fri, 02 Apr 2010 08:11:30 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[CA]]></category>
		<category><![CDATA[CMDB]]></category>
		<category><![CDATA[CMDB Federation]]></category>
		<category><![CDATA[CMDBf]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[WS-Management]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1383</guid>
		<description><![CDATA[In a recent blog post, Don Ferguson (CTO at CA) describes CA Catalyst, a major architectural overhaul which &#8220;applies enterprise application integration patterns to the problem of integrating IT management systems&#8221;. Reading this was fascinating to me. Not because the content was some kind of revelation, but exactly for the opposite reason. Because it is [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://community.ca.com/blogs/ctoblog/archive/2010/03/22/what-are-ca-catalyst-and-the-unified-service-model.aspx">recent blog post</a>, Don Ferguson (CTO at CA) describes CA Catalyst, a major architectural overhaul which <em>&#8220;applies enterprise application integration patterns to the problem of integrating IT management systems&#8221;</em>. Reading this was fascinating to me. Not because the content was some kind of revelation, but exactly for the opposite reason. Because it is so familiar.</p>
<p>For the better part of the last decade, I tried to build just this at HP. In the process, I worked with (and sometimes against) Don&#8217;s colleague at IBM, who were on the same mission. Both companies wanted a flexible and reliable integration platform for all aspects of IT management. We had decided to use Web services and SOA to achieve it. The Web services management protocols that I worked on (WSMF, WSDM, WS-Management and the &#8220;reconciliation stack&#8221;) were meant for this. We were after <a href="http://stage.vambenepe.com/archives/138">management integration more than manageability</a>. Then came CMDBf, another piece of the puzzle. From what I could tell, the focus on SOA and Web services had made Don (who was then Mr. WebSphere) the spiritual father of this effort at IBM, even though he wasn&#8217;t at the time focused on IT management.</p>
<p>As far as I know, neither IBM nor HP got there. I covered some of the reasons in this <a href="http://stage.vambenepe.com/archives/700">post-mortem</a>. The standards bickering. The focus on protocols rather than models. The confusion between the CMDB as a tool for process/service management versus a tool for software integration. Within HP, the turmoil from the many software acquisitions didn&#8217;t help, and there were other reasons. I am not sure at this point whether either company is still aiming for this vision or if they are taking a different approach.</p>
<p>But apparently CA is still on this path, and got somewhere. At least according to Don&#8217;s post. I have no insight into what was built beyond what&#8217;s in the post. I am not endorsing CA Catalyst, just agreeing with the design goals listed by Don. If indeed they have built it, and the integration framework resists the test of time, that&#8217;s impressive. And exciting. It apparently even uses some the same pieces we were planning to use, namely WS-Management and CMDBf (I am reluctantly associated with the first and proudly with the second).</p>
<p>While most readers might not share my historical connection with this work, this is still relevant and important to anyone who cares about IT management in the enterprise. If you&#8217;re planning to be at <a href="http://www.ca.com/caworld/">CA World</a>, go listen to Don. Web services may have a bad name, but the technical problems of IT management integration remain. There are only a few routes to IT management automation (<a href="http://stage.vambenepe.com/archives/773">I count seven</a>, the one taken by CA is #2). You can throw away SOAP if you want, you still need to deal with protocol compatibility, model alignment and instance reconciliation. You need to centralize or orchestrate the management operations performed. You need to be able to integrate with complementary products or at the very least to effectively incorporate your acquisitions. It&#8217;s hard stuff.</p>
<p>Bonus point to Don for not forcing a &#8220;Cloud&#8221; angle for extra sparkle. This is core IT management.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1383/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two versions of a protocol is one too many</title>
		<link>http://stage.vambenepe.com/archives/1311</link>
		<comments>http://stage.vambenepe.com/archives/1311#comments</comments>
		<pubDate>Tue, 02 Mar 2010 05:47:34 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[CMDB]]></category>
		<category><![CDATA[CMDBf]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1311</guid>
		<description><![CDATA[There is always a temptation, when facing a hard design decision in the process of creating an interface or a protocol, to produce two (or more) versions. It&#8217;s sometimes a good idea, as a way to explore where each one takes you so you can make a more informed choice. But we know how this [...]]]></description>
			<content:encoded><![CDATA[<p>There is always a temptation, when facing a hard design decision in the process of creating an interface or a protocol, to produce two (or more) versions. It&#8217;s sometimes a good idea, as a way to explore where each one takes you so you can make a more informed choice. But we know how this invariably ends up. Documents get published that arguably should not. It&#8217;s even harder in a standard working group, where someone was asked (or at least encouraged) by the group to create each of the alternative specifications. Canning one is at best socially awkward (despite the appearances, not everyone in standards is a psychopath or a sadist) and often politically impossible.</p>
<p>And yet, it has to be done. Compare the alternatives, then pick one and commit. Don&#8217;t confuse being accommodating with being weak.</p>
<p>The typical example these days is of course SOAP versus REST: the temptation is to support both rather than make a choice. This applies to standards and to proprietary interfaces. When a standard does this, it hurts rather than promote interoperability. Vendors have a bit more of an excuse when they offer a choice (&#8220;the customer is always right&#8221;) but in reality it forces customers to play Russian roulette whether they want it or not. Because one of the alternatives will eventually be left behind (either discarded or maintained but not improved). If you balance the small immediate customer benefit of using the interface style they are most used to with the risk of redoing the integration down the road, the value proposition of offering several options crumbles.</p>
<p>[Pedantic disclaimer: I use the term "REST" in this post the way it is often (incorrectly) used, to mean pretty much anything that uses HTTP without a SOAP wrapper. The technical issues are a topic for <a href="http://stage.vambenepe.com/archives/1161">other</a> <a href="http://stage.vambenepe.com/archives/1300">posts</a>.]</p>
<p><strong>CMDBf</strong></p>
<p>CMDBf v1 is a <a href="http://www.dmtf.org/standards/cmdbf/">DMTF standard</a>. It is a SOAP-based protocol. For v2, it has been suggested that there should a REST version. I don&#8217;t know what the CMDBf group (in which I participate) will end up doing but I&#8217;ve made my position clear: I could go either way (remain with SOAP or dump it) but I do not want to have two versions of the protocol (one SOAP one REST). If we think we&#8217;re better off with a REST version, then let&#8217;s make v2 REST-only. Supporting both mechanisms in v2 would be stupid. They would address the same use cases and only serve to provide political ass-coverage. There is no functional need for both. The argument that we need to keep supporting SOAP for the benefit of those who implemented v1 doesn&#8217;t fly. As an implementer, nobody is saying that you need to turn off your v1 services the second you launch the v2 version.</p>
<p><strong>DMTF Cloud</strong></p>
<p>Between the specifications submitted directly to DMTF, the specifications developed by DMTF &#8220;partner&#8221; organizations and the existing DMTF protocols, the DMTF Cloud effort is presented with a mix of SOAP, RESTful and XML-RPC-over-HTTP options. In the process of deciding what to create or adopt I am sure that the temptation will be high to take the easy route of supporting several versions to placate everyone. But such a &#8220;consensus&#8221; would be achieved on the back of the implementers so I very much hope it won&#8217;t be the case.</p>
<p><strong>When it is appropriate</strong></p>
<p>There are cases where supporting alternatives options is worth the cost. But it typically happens when they serve very different use cases. Think of SAX versus DOM, which have clearly differentiated sweetspots. In the Cloud world, Amazon S3 gives us interesting examples of both justified and extraneous alternatives. The extraneous one is the choice between REST and SOAP for the <a href="http://docs.amazonwebservices.com/AmazonS3/latest/API/">S3 API</a>. I often praise AWS for its innovation and pragmatism, but this is an example of something that only looks pragmatic. On the other hand, the <a href="http://aws.amazon.com/importexport/">AWS import/export</a> mechanism is a useful alternative. It allows you to physically ship a device with a few terabytes of data to Amazon. This is technically an alternative to the S3 programmatic interface, but one with obviously differentiated use cases. I recommend you reserve the use of &#8220;alternative APIs&#8221; for such scenarios.</p>
<p>If it didn&#8217;t work for Tiger Woods, it won&#8217;t work for your Cloud API either. Learn to commit.</p>
<p>[CLARIFICATION: based on some of the early Twitter feedback on this entry, I want to clarify that it's alternative versions that I am against, not successive versions (i.e. an evolution of the interface over time). How to manage successive versions properly is a whole other debate.] </p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1311/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HP has submitted a specification to the DMTF Cloud incubator</title>
		<link>http://stage.vambenepe.com/archives/1295</link>
		<comments>http://stage.vambenepe.com/archives/1295#comments</comments>
		<pubDate>Fri, 19 Feb 2010 20:55:30 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1295</guid>
		<description><![CDATA[When I lamented, in a previous post, that I couldn&#8217;t tell you about recent submissions to the DMTF Cloud incubator, one of those I had in mind was a submission from HP. I can now write this, because the author of the specification, Nigel Cook, has recently blogged about it. Unfortunately he is isn&#8217;t publishing [...]]]></description>
			<content:encoded><![CDATA[<p>When I lamented, in a <a href="http://stage.vambenepe.com/archives/1261">previous post</a>, that I couldn&#8217;t tell you about recent submissions to the DMTF Cloud incubator, one of those I had in mind was a submission from HP. I can now write this, because the author of the specification, Nigel Cook, has recently <a href="http://www.communities.hp.com/online/blogs/eyeonblades/archive/2010/02/19/hp-s-technology-contribution-to-the-dmtf-cloud-incubator.aspx">blogged about it</a>. Unfortunately he is isn&#8217;t publishing the specification itself, just an announcement that it was submitted. Hopefully he is currently going through the long approval process to make the submitted document public (been there, done that, I know it takes time).</p>
<p>In the blog, Nigel makes a good argument for the need to go beyond a hypervisor-centric view of Cloud computing. Even at the IaaS layer there are cases of automated-but-not-virtualized deployment that have all the characteristics of Cloud computing and need to be supported by Cloud management APIs. Not to mention OS-level isolation like Solaris Containers.</p>
<p>Nigel also offers a spirited defense of SOAP-based protocols. I don&#8217;t necessarily agree with all his points (<em>&#8220;one could easily map the web service definition I described to REST if that was important&#8221;</em> suggests a <em>&#8220;it&#8217;s just SOAP without the wrapper&#8221;</em> view of REST), but I am glad he is launching this debate. We need to discuss this rather than assume that REST is the obvious answer. Remember, a few years ago SOAP was just as obvious an answer to any protocol question. It may well be that indeed REST comes out ahead of this discussion, but the process will force us to be explicit about what benefits of REST we are trying to achieve and will allow us to be <a href="http://stage.vambenepe.com/archives/1161">practical</a> in the way we approach it.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1295/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Waiting for events (in Cloud APIs)</title>
		<link>http://stage.vambenepe.com/archives/1284</link>
		<comments>http://stage.vambenepe.com/archives/1284#comments</comments>
		<pubDate>Thu, 18 Feb 2010 07:26:59 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Desired State]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1284</guid>
		<description><![CDATA[Events/alerts/notifications have been a central concept in IT management at least since the first SNMP trap was emitted, and probably even long before that. And yet they are curiously absent from all the Cloud management APIs/protocols. If you think that&#8217;s because &#8220;THE CLOUD CHANGES EVERYTHING&#8221; then you may have to think again. Over the last [...]]]></description>
			<content:encoded><![CDATA[<p>Events/alerts/notifications have been a central concept in IT management at least since the first SNMP trap was emitted, and probably even long before that. And yet they are curiously absent from all the Cloud management APIs/protocols. If you think that&#8217;s because &#8220;THE CLOUD CHANGES EVERYTHING&#8221; then you may have to think again. Over the last few days, two of the most experienced practitioners of Cloud computing pointed out that this omission is a real pain in the neck. RightScale&#8217;s Thorsten von Eicken was <a href="http://blog.rightscale.com/2010/02/13/top-cloud-api-sins/">first</a> to request <em>&#8220;an event based interface instead of a request-reply based interface&#8221;</em>, pointing out that <em>&#8220;we run a good number of machines that do nothing but chew up 100% cpu polling EC2 to detect changes&#8221;</em>. George Reese <a href="http://broadcast.oreilly.com/2010/02/towards-event-driven-cloud-apis.html">seconded</a> and started to sketch a solution. And while these blog posts gave the issue increased visibility recently, it has been a recurring topic on the AWS Forum and other similar discussion boards for quite some time. For example, in <a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=49570">this thread</a> going back to 2006, an Amazon employee wrote that <em>&#8220;this is a feature we&#8217;ve discussed recently and we&#8217;re looking at options&#8221;</em> (incidentally, I see a post by Thorsten in that old thread). We&#8217;re still waiting.</p>
<p>Let&#8217;s look at what it would take to define such a feature.</p>
<p>I have some experience with events for IT management, having been involved in the <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsn">WS-Notification family of specification</a>s and having co-chaired the OASIS technical committee that standardized them. This post is not about foisting WS-Notification on Cloud APIs, but just about surfacing some of the questions that come up when you try to standardize such a mechanism. While the main use cases for WS-Notification came from IT (and Grid) management, it was supposed to be a generic mechanism. A Cloud-centric eventing protocol can be made simpler by focusing on fewer use cases (Cloud scenarios only). In addition, WS-Notification was marred by <a href="http://stage.vambenepe.com/archives/1261">the complexity-is-a-sign-of-greatness spirit of the time</a> . On this too, a Cloud eventing protocol could improve things by keeping <span style="text-decoration: line-through;">IBM at bay</span> simplicity in mind.</p>
<p><strong>Types of event</strong></p>
<p>When you pull the state of a resource to see if anything changed,  you don&#8217;t have to tell the provider what kind of change you are interested in. If, on the other hand, you want the provider to notify you, then they need to know what you care about. You may not want to be notified on every single change in the resource state. How do you describe the changes you care about? Is there an agreed-upon set of states for the resource and you are only notified on state transitions? Can you indicate the minimum severity level for an event to be emitted? Who determines the severity of an event? Or do you get to specify what fields in the resource state you want to watch? What about numeric values for which you may not want to be notified of every change but only when a threshold is crossed? Do you get to specify a query and get notified whenever the query result changes? In WS-Notification some of this is handled by <a href="http://docs.oasis-open.org/wsn/wsn-ws_topics-1.3-spec-os.pdf">WS-Topics</a> which I still like conceptually (I co-edited it) but is too complex for the task at hand.</p>
<p><strong>Event formats</strong></p>
<p>What format are the events serialized in? How is the even metadata captured (e.g. time stamp of observation, which may not be the same as the time at which the notification message was sent)? If the event payload is a representation of the new state of the resource, does it indicate what field changes (and what the old value was)? How do you keep event payloads consistent with the resource representation in the request/response interactions? If many events occur near the same time, can you group them in one notification message for better scalability?</p>
<p><strong>Subscription creation</strong></p>
<p>Presumably you need a subscription mechanism. Is the subscription set in stone when the resource is created? Or can you come later and subscribe? If subscription is an operation on the resource itself, how do you subscribe for events on something that doesn&#8217;t exist yet (e.g. &#8220;create a VM and notify me once it&#8217;s started&#8221;)? Do you get to set subscriptions on a per-resource-basis? Or is this a global setting for all the resources that you own? Can you have two different subscriptions on the same resource (e.g. a &#8220;critical events only&#8221; subscription that exist throughout the life of the resource, plus a &#8220;lots of events please&#8221; subscription that you keep for a few hours while troubleshooting)?</p>
<p><strong>Subscription management</strong></p>
<p>Do you get to come back and update/pause/delete a subscription? Do you get to change what filter the subscription carries? Or is it set in stone until the subscription expires? Can you change the delivery endpoint? What if events fail to be delivered? Does the provider cancel your subscription? After how many failures? Does it just pause it for a few hours? Keep trying?</p>
<p><strong>Subscription expiration</strong></p>
<p>Who sets the expiration period? The subscriber? Can the provider set a max duration? Do you get a warning message before the subscription expires? Can you renew a subscription or do you have to create a new one? Do you get a message telling you that it has expired? Where are these subscription-lifecycle messages sent? To the same endpoint as the regular messages? What if your subscription is being killed because your deliver endpoint is down, clearly it makes no sense to send the warning message to that same endpoint. Do you provide a separate &#8220;subscription management&#8221; endpoint (different from the event delivery endpoint) when you subscribe? Alternatively, does an email message get sent to the registered user who set the subscription?</p>
<p><strong>Delivery reliability</strong></p>
<p>How reliable do you want the notifications to be? Should the emitter retry until they&#8217;ve received a confirmation? How long do they keep messages that can&#8217;t be delivered? Some may have a very short shelf life while others are still useful weeks later. If you don&#8217;t have a reliable mechanism but you really &#8220;need to know about a lost server within a minute of it disappearing&#8221; (the example Georges gives) then in reality you may still have to poll just to make sure that an event wasn&#8217;t lost. If you haven&#8217;t received an event in a while, how can you test if the subscription is still working? Should subscriptions send a heartbeat message once a while?</p>
<p><strong>Delivery mechanism</strong></p>
<p>How do you deliver notifications? Do you keep HTTP connections open through tricks similar to how self-updating web pages work (e.g. COMET, long polling and soon WebSockets)? Or do you just provide a listener endpoint to which the notifier tries to connect (which, in the case of public cloud deployments, means you need to have a publicly-addressable listener, but hopefully not on the same Cloud infrastructure). Do you use XMPP? AMQP? Email? Can I have you hold my events and let me come pull them?</p>
<p><strong>Security</strong></p>
<p>Do you need to verify the origin of the events you receive? Or do you assume they may be forged and always initiate a connection to the provider to double-check? And on the other side, what are the security requirements for event delivery? If a user looses some of their privileges, do you have to go and cancel the still-active subscriptions that they created?</p>
<p><strong>Throttling</strong></p>
<p>Is there a maximum event rate? Do you get charged for the events the Cloud provider sends you? How do you make sure that someone doesn&#8217;t create a subscription pointing to the wrong endpoint (either erroneously or maliciously, e.g. DoS). Do you send a test message at registration asking the delivery endpoint to acknowledge that they indeed want to receive these notifications?</p>
<p><strong>Conclusion</strong></p>
<p>My goal is not to argue that we cannot have a simple yet good enough notification system or to scare anyone from attempting to define it. It&#8217;s just to show that it&#8217;s not as simple as it may seem at first blush. But there probably is a sweetspot and people like Thorsten and George are very well qualified to find it.</p>
<p>[UPDATED 2010/4/7: Amazon releases <a href="http://aws.typepad.com/aws/2010/04/introducing-the-amazon-simple-notification-service.html">AWS Simple notification Service</a>. Not just as an eventing feature for the Cloud API, as a generic notification service. Which can, of course, also carry Cloud management events. Though at this point you're on your own to publish them from your instances, it doesn't look like the AWS infrastructure can do it for you. Which means, for example, that you're not going to be able to publish an event for a sudden crash.] </p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1284/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Can Cloud standards be saved?</title>
		<link>http://stage.vambenepe.com/archives/1261</link>
		<comments>http://stage.vambenepe.com/archives/1261#comments</comments>
		<pubDate>Mon, 15 Feb 2010 07:33:21 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[CMDBf]]></category>
		<category><![CDATA[DMTF]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[WS-Management]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1261</guid>
		<description><![CDATA[Then: Web services standards One of the most frustrating aspects of how Web services standards shot themselves in the foot via unchecked complexity is that plenty of people were pointing out the problem as it happened. Mark Baker (to whom I noticed Don Box also paid tribute recently) is the poster child. I remember Tom [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Then: Web services standards</strong></p>
<p>One of the most frustrating aspects of how Web services standards shot themselves in the foot via unchecked complexity is that plenty of people were pointing out the problem as it happened. <a href="http://www.markbaker.ca/blog/">Mark Baker</a> (to whom I noticed Don Box also <a href="http://www.infoq.com/interviews/box-soap-xml-rest-m">paid tribute</a> recently) is the poster child. I remember <a href="http://tjordahl.blogspot.com/">Tom Jordahl</a> tirelessly arguing for keeping it simple in the WSDL working group. Amberpoint&#8217;s <a href="http://twitter.com/fred_carter">Fred Carter</a> did it in WSDM (in the post announcing the recent <a href="http://stage.vambenepe.com/archives/1247">Amberpoint acquisition</a>, I mentioned that <em>&#8220;their engineers brought to the [WSDM] group a unique level of experience and practical-mindedness&#8221;</em> but I could have added <em>&#8220;&#8230; which we, the large companies, mostly ignored.&#8221;</em>)</p>
<p>The commonality between all these voices is that they didn&#8217;t come from the large companies. Instead they came from the &#8220;specialists&#8221; (independent contractors and representatives from small, specialized companies). Many of the WS-* debates were fought along alliance lines. Depending on the season it could be &#8220;IBM vs. Microsoft&#8221;, &#8220;IBM+Microsoft vs. Oracle&#8221;, &#8220;IBM+HP vs. Microsoft+Intel&#8221;, etc&#8230; They&#8217;d battle over one another&#8217;s proposal but tacitly agreed to brush off proposals from the smaller players. At least if they contained anything radically different from the content of the submission by the large companies. And simplicity is radical.</p>
<p><strong>Now: Cloud standards</strong></p>
<p>I do not reminisce about the WS-* standards wars just for old time sake or the joy of self-flagellation. I also hope that the current (and very important) wave of standards, related to all things Cloud, can do better than the Web services wave did with regards to involving on-the-ground experts.</p>
<p>Even though I still work for a large company, I&#8217;d like to see this fixed for Cloud standards. Not because I am a good guy (though I hope I am), but because I now realize that in the long run this lack of perspective even hurts the large companies themselves. We (and that includes IBM and Microsoft, the ringleaders of the WS-* effort) would be better off now if we had paid more attention then.</p>
<p>Here are two reasons why the necessity to involve and include specialists is even more applicable to Cloud standards than Web services.</p>
<p>First, there are many more individuals (or small companies) today with a lot of practical Cloud experience than there were small players with practical Web services experience when the WS-* standardization started (<a href="http://www.shlomoswidler.com/">Shlomo Swidler</a>, <a href="http://www.elastician.com/">Mitch Garnaat</a>, <a href="http://cloudscaling.com/">Randy Bias</a>, <a href="http://www.johnmwillis.com/">John M. Willis</a>, <a href="http://samj.net/">Sam Johnston</a>, <a href="http://coderslike.us/">David Kavanagh</a>, <a href="http://anyweight.blogspot.com/">Adrian Cole</a>, <a href="http://blog.edwardmgoldberg.com/">Edward M. Goldberg</a>, <a href="http://alestic.com/">Eric Hammond</a>, <a href="http://www.rightscale.com/">Thorsten von Eicken</a> and <a href="http://www.jackofallclouds.com/">Guy Rosen</a> come to mind, though this is nowhere near an exhaustive list). Which means there is even more to gain by ensuring that the Cloud standard process is open to them, should they choose to engage in some form.</p>
<p>Second, there is a transparency problem much larger than with Web services standards. For all their flaws, W3C and OASIS, where most of the WS-* work took place, are relatively transparent. Their processes and IP policies are clear and, most importantly, their mailing list archives are open to the public. DMTF, where VMWare, Fujitsu and others have submitted Cloud specifications, is at the other hand of the transparency spectrum. A few examples of what I mean by that:</p>
<ul>
<li>I can tell you that VMWare and Fujitsu submitted specifications to DMTF, because the two companies each issued a press release to announce it. I can&#8217;t tell you which others did (and you can&#8217;t read their submissions) because these companies didn&#8217;t think it worthy of a press release. And DMTF keeps the submission confidential. That&#8217;s why I blogged about the <a href="http://stage.vambenepe.com/archives/936">vCloud submission</a> and the <a href="http://stage.vambenepe.com/archives/1108">Fujitsu submission</a> but couldn&#8217;t provide equivalent analysis for the others.</li>
<li>The mailing lists of DMTF working groups are confidential. Even a DMTF member cannot see the message archive of a group unless he/she is a member of that specific group. The general public cannot see anything at all. And unless I missed it on the site, they cannot even know what DMTF working groups exist. It makes you wonder whether Dick Cheney decided to call his <a href="http://en.wikipedia.org/wiki/Energy_Task_Force">social club of energy company executives</a> a &#8220;Task Force&#8221; because he was inspired by the secrecy of the DMTF (&#8220;Distributed Management Task Force&#8221;). Even when the work is finished and the standard published, the DMTF won&#8217;t release the mailing list archive, even though these discussions can be a great reference for people who later use the specification.</li>
<li>Working documents are also confidential. Working groups can decide to publish some intermediate work, but this needs to be an explicit decision of the group, then approved by its parent group, and in practice it happens rarely (mileage varies depending on the groups).</li>
<li>Even when a document is published, the process to provide feedback from the outside seems designed to thwart any attempt. Or at least that&#8217;s what it does in practice. Having blogged a fair amount on technical details of two DMTF standards (<a href="http://stage.vambenepe.com/archives/category/cmdbf">CMDBf</a> and <a href="http://stage.vambenepe.com/archives/category/ws-management">WS-Management</a>) I often get questions and comments about these specifications from readers. I encourage them to bring their comments to the group and point them to the <a href="http://www.dmtf.org/standards/feedback/">official feedback page</a>. Not once have I, as a working group participant, seen the comments come out on the other end of the process.</li>
</ul>
<p>So let&#8217;s recap. People outside of DMTF don&#8217;t know what work is going on (even if they happen to know that a working group called &#8220;Cloud this&#8221; or &#8220;Cloud that&#8221; has been started, the charter documents and therefore the precise scope and list of deliverables are also confidential). Even if they knew, they couldn&#8217;t get to see the work. And even if they did, there is no convenient way for them to provide feedback (which would probably arrive too late anyway). And joining the organization would be quite a selfless act because they then have to pay for the privilege of sharing their expertise while not being included in the real deciding circles anyway (unless there are ready to pony up for the top membership levels). That&#8217;s because of the unclear and unstable processes as well as the inordinate influence of board members and officers who all are also company representatives (in W3C, the strong staff balances the influence of the sponsors, in OASIS the bylaws limit arbitrariness by the board members).</p>
<p><strong>What we are missing out on</strong></p>
<p>Many in the standards community have heard me rant on this topic before. What pushed me over the edge and motivated me to write this entry was stumbling on a crystal clear illustration of what we are missing out on. I submit to you <a href="http://www.cloudslamevent.com/compute-cloud-abstraction-apis-who-needs-em">this post</a> by Adrian Cole and the <a href="http://blog.rightscale.com/2010/02/12/cloud-api-requirements/">follow-up</a> (<a href="http://blog.rightscale.com/2010/02/13/top-cloud-api-sins/">twice</a>)by Thorsten von Eicken. After spending two days at a face to face meeting of the DMTF Cloud incubator (in an undisclosed location) this week, I&#8217;ll just say that these posts illustrate a level of practically and a grounding in real-life Cloud usage that was not evident in all the discussions of the incubator. You don&#8217;t see Adrian and Thorsten arguing about the meaning of the word &#8220;infrastructure&#8221;, do you? I&#8217;d love to point you to the DMTF meeting minutes so you can judge for yourself, but by now you should understand why I can&#8217;t.</p>
<p>So instead of helping in the forum where big vendors submit their specifications, the specialists (some of them at least) go work in OGF, and produce <a href="http://www.occi-wg.org/doku.php">OCCI</a> (here is the <a href="http://www.ogf.org/pipermail/occi-wg/">mailing list archive</a>). When Thorsten von Eicken blogs about his experience using Cloud APIs, they welcome the feedback and <a href="http://twitter.com/tvoneicken/status/9107428666">engage him</a> to look at their work. The OCCI work is nice, but my concern is that we are now going to end up with at least two sets of standard specifications (in addition to the multitude of company-controlled specifications, like the ubiquitous EC2 API). One from the big companies and one from the specialists. And if you think that the simplest, clearest and most practical one will automatically win, well I envy your optimism. Up to a point. I don&#8217;t know if one specification will crush the other, if we&#8217;ll have a &#8220;reconciliation&#8221; process, if one is going to be used in &#8220;private Clouds&#8221; and the other in &#8220;public Clouds&#8221; or if the conflict will just make both mostly irrelevant. What I do know is that this is not what I want to see happen. Rather, the big vendors (whose imprimatur is needed) and the specialists (whose experience is indispensable) should work together to make the standard technically practical and widely adopted. I don&#8217;t care where it happens. I don&#8217;t know whether now is the right time or too early. I just know that when the time comes it needs to be done right. And I don&#8217;t like the way it&#8217;s shaping up at the moment. Well-meaning but toothless efforts like <a href="http://cloud-standards.org">cloud-standards.org</a> don&#8217;t make me feel better.</p>
<p>I know this blog post will be read both by my friends in DMTF and by my friends in <a href="http://twitter.com/clouderati/following">Clouderati</a>. I just want them to meet. That could be quite a party.</p>
<p>IBM was on to something when it produced this <a href="http://www.research.ibm.com/files/standards_wikis.shtml">standards participation policy</a> (which I <a href="http://stage.vambenepe.com/archives/361">commented on</a> in a cynical-yet-supportive way &#8211; and yes I realize the same cynicism can apply to me). But I haven&#8217;t heard of any practical effect of this policy change. Has anyone seen any? Isn&#8217;t the Cloud standard wave the right time to translate it into action?</p>
<p><strong>Transparency first</strong></p>
<p>I realize that it takes more than transparency to convince specialists to take a look at what a working group is doing and share their thoughts. Even in a fully transparent situation, specialists will eventually give up if they are stonewalled by process lawyers or just ignored and marginalized (many working group participants have little bandwidth and typically take their cues from the big vendors even in the absence of explicit corporate alignment). And this is hard to fix. Processes serve a purpose. While they can be used against the smaller players, they also in many cases protect them. Plus, for every enlightened specialist who gets discouraged, there is a nutcase who gets neutralized by the need to put up a clear proposal and follow a process. I don&#8217;t see a good way to prevent large vendors from using the process to pressure smaller ones if that&#8217;s what they intend to do. Let&#8217;s at least prevent this from happening unintentionally. Maybe some of my colleagues  from large companies will also ask themselves whether it wouldn&#8217;t be to their own benefit to actually help qualified specialists to contribute. Some &#8220;positive discrimination&#8221; might be in order, to lighten the process burden in some way for those with practical expertise, limited resources, and the willingness to offer some could-otherwise-be-billable hours.</p>
<p>In any case, improving transparency is the simplest, fastest and most obvious step that needs to be taken. Not doing it because it won&#8217;t solve everything is like not doing CPR on someone on the pretext that it would only restart his heart but not cure his rheumatism.</p>
<p>What&#8217;s at risk if we fail to leverage the huge amount of practical Cloud expertise from smaller players in the standards work? Nothing less than an unpractical set of specifications that will fail to realize the promises of Cloud interoperability. And quite possibly even delay them. We&#8217;ve seen it before, haven&#8217;t we?</p>
<p>Notice how I haven&#8217;t mentioned customers? It&#8217;s a typical &#8220;feel-good&#8221; line in every lament about standards to say that &#8220;we need more customer involvement&#8221;. It&#8217;s true, but the lament is old and hasn&#8217;t, in my experience, solved anything. And today&#8217;s economical climate makes me even more dubious that direct customer involvement is going to keep us on track for this standardization wave (though I&#8217;d love to be proven wrong). Opening the door to on-the-ground-working-with-customers experts with a very neutral and pragmatic perspective has a better chance of success in my mind.</p>
<p>As a point of clarification, I am not asking large companies to pick a few small companies out of their partner ecosystem and give them a 10% discount on their alliance membership fee in exchange for showing up in the standards groups and supporting their friendly sponsor. This is a common trick, used to pack a committee, get the votes and create an impression of overwhelming industry support. Nobody should pick who the specialists are. We should do all we can to encourage them to come. It will be pretty clear who they are when they start to ask pointed questions about the work.</p>
<p>Finally, from the archives, a more <a href="http://stage.vambenepe.com/archives/223">humorous look at how various standards bodies compare</a>. And the proof that my complaints about DMTF secrecy aren&#8217;t new.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1261/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>PaaS as the path to MDA?</title>
		<link>http://stage.vambenepe.com/archives/1173</link>
		<comments>http://stage.vambenepe.com/archives/1173#comments</comments>
		<pubDate>Tue, 29 Dec 2009 07:42:15 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1173</guid>
		<description><![CDATA[Lots of communities think of Cloud Computing as the realization of a vision that they have been pusuing for a while (&#8220;sure we didn&#8217;t call it Cloud back then but&#8230;&#8221;). Just ask the Grid folks, the dynamic data center folks (DCML, IBM&#8217;s &#8220;Autonomic Computing&#8221;, HP&#8217;s &#8220;Adaptive Enterprise&#8221;,  Microsoft&#8217;s DSI), the ASP community, and those of [...]]]></description>
			<content:encoded><![CDATA[<p>Lots of communities think of Cloud Computing as the realization of a vision that they have been pusuing for a while (&#8220;sure we didn&#8217;t call it Cloud back then but&#8230;&#8221;). Just ask the Grid folks, the dynamic data center folks (DCML, IBM&#8217;s &#8220;Autonomic Computing&#8221;, HP&#8217;s &#8220;Adaptive Enterprise&#8221;,  Microsoft&#8217;s DSI), the ASP community, and those of us who toiled on what was going to be the SOAP-based management stack for all IT (e.g. my HP colleagues and I can selectively quote mentions of <em>&#8220;adaptation mechanisms like resource reservation, allocation/de-allocation&#8221;</em> and <em>&#8220;management as a service&#8221;</em> in this <a href="http://xml.coverpages.org/WSMF-Overview.pdf">WSMF white paper</a> from 2003 to portray WSMF as a precursor to all the Cloud APIs of today).</p>
<p>I thought of another such community today, as I ran into older OMG specifications: the Model-Driven Architecture (MDA) community. I have no idea what people in this community actually think of Cloud Computing, but it seems to me that PaaS is a chance to come close to part of their vision. For two reasons: PaaS makes it easier and more rewarding, all at the same time, to practice model-driven design. More bang for less buck.</p>
<p><strong>Easier</strong></p>
<p>My understanding of the MDA value proposition is that it would allow you to create a high-level design (at the level of something like an augmented version of UML) and have it automatically turn into executable code (e.g. that can run in a JEE or .NET container). I am probably making it sound more naive than it really is, but not by much. That&#8217;s a might wide gap to bridge, for QVT and friends, from UMLish to byte-code and it&#8217;s no surprise that the practical benefits of MDA are still to be seen (to put it kindly).</p>
<p>In a PaaS/SaaS world, on the other hand, you are mapping to something that is higher level than byte code. Depending on what <a href="http://stage.vambenepe.com/archives/1078">types of PaaS containers</a> you envision, some of the abstractions provided by these containers (e.g. business process execution, event processing) are a lot closer to the concepts manipulated in your PIM (Platform-independent model, the UMLish mentioned above). Thus a smaller gap to bridge and a better chance of it being automagical. Especially if you add a few SaaS building blocks to the mix.</p>
<p><strong>More rewarding</strong></p>
<p>Not only should it be easier to map a PIM to a PaaS deployment environments, the benefits you get once you are done are incommensurably greater. Rather than getting a dump of opaque auto-generated byte-code running in a regular JVM/CLR, you get an environments in which the design concepts (actors/services, process, rules, events) and the business model elements are first class citizens of the platform management infrastructure. So that you can monitor and set policies on the same things that you manipulate in you PIM. As opposed to falling down to the lowest common denominator of CPU/memory metrics. Or, god forbid, trying to diagnose/optimize machine-generated code.</p>
<p><strong>We shall see</strong></p>
<p>I wasn&#8217;t thinking of Microsoft SQL Server Modeling (previously known as Oslo) when I wrote this, but Doug Purdy&#8217;s <a href="http://twitter.com/douglasp/statuses/7149986284">tweet</a> made the connection for me. And indeed, one can see in SQLSM+Azure the leading candidate today to realizing the MDA vision&#8230; minus the OMG MDA specifications.</p>
<p>[Note: I wasn't planning to blog this, but after I tweeted the basic idea (<a href="http://twitter.com/vambenepe/statuses/7140780516"><em>"Attempting MDA (model-driven architecture) before inventing model-driven deployment and mgmt was hopeless. Now possibly getting there."</em></a>) Shlomo <a href="http://twitter.com/ShlomoSwidler/statuses/7141102067">requested more details</a> and I got frustrated by the difficulty to explain my point in twitterisms. In effect, this blog entry is just an expanded tweet, not something as intensely believed, fanatically researched and authoritatively supported as my usual blog posts (ah!).]</p>
<p>[UPDATED 2009/12/29: Some relevant presentations from OMG-land, <a href="http://twitter.com/JBezivin/status/7157232692">thanks to Jean Bezivin</a>. Though I don't see mention of any specific plan to use/adapt MOF/XMI/QVT/etc for the Cloud.] </p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1173/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>REST in practice for IT and Cloud management (part 3: wrap-up)</title>
		<link>http://stage.vambenepe.com/archives/1161</link>
		<comments>http://stage.vambenepe.com/archives/1161#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:14:26 +0000</pubDate>
		<dc:creator>@vambenepe</dc:creator>
				<category><![CDATA[Application Mgmt]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[IT Systems Mgmt]]></category>
		<category><![CDATA[Manageability]]></category>
		<category><![CDATA[Mgmt integration]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Semantic tech]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Utility computing]]></category>

		<guid isPermaLink="false">http://stage.vambenepe.com/?p=1161</guid>
		<description><![CDATA[[Preface: a few months ago I shared some thoughts about how REST was (or could) be applied to IT and Cloud management. Part 1 was a comparison of the RESTful aspects of four well-known IaaS Cloud APIs and part 2 was an analysis of how REST applies to configuration management. Both of these entries received [...]]]></description>
			<content:encoded><![CDATA[<p>[Preface: a few months ago I shared some thoughts about how REST was (or could) be applied to IT and Cloud management. <a href="http://stage.vambenepe.com/archives/863">Part 1</a> was a comparison of the RESTful aspects of four well-known IaaS Cloud APIs and <a href="http://stage.vambenepe.com/archives/894">part 2</a> was an analysis of how REST applies to configuration management. Both of these entries received well-informed reader comments BTW, so if you read the posts but didn't come back for the comments you really owe it to yourself to do so now. At the time, I jotted down thoughts for subsequent entries in this series, but I never got around to posting them. Since the topic seems to be getting a lot of attention these days (especially in DMTF) I decided to go back to these notes and see if I could extract a few practical recommendations in the form of a wrap-up.]</p>
<p>The findings listed below should be relevant whether your protocol is trying to be truly RESTful, just HTTP-centric or even <a href="http://stage.vambenepe.com/archives/308">zen-SOAPy</a>. Many of the issues that arise when creating a protocol that maps well to IT management use cases should transcend these variations and that&#8217;s what I try to cover.</p>
<p><strong>Finding #1: Relationships (links) are first-class entities (a.k.a. &#8220;hypermedia&#8221;)<br />
</strong></p>
<p>The clear conclusion of both part 1 and part 2 was that the most relevant part of REST for IT and Cloud management is the use of hypermedia. IT management enjoys a head start on this compared to other domains, because its models are already rich in explicit relationships (e.g. CIM associations), as opposed to other business domains in which relationships are more implicit (to the end user at least). But REST teaches us that just having relationships in your model is not enough. They need to be exposed in a way that maps directly to the protocol, so that following a relationship is an infrastructure-level task, not an application-level task: passing an ID as a parameter for some domain-specific function is not it.</p>
<p>This doesn&#8217;t violate the rule to <a href="http://stage.vambenepe.com/archives/943">not mix the protocol and the model</a> because the alignment should take place in the metamodel. XML is famously weak in that respect, but that&#8217;s where Atom steps in, handling relationships in a generic way. Similarly, <a href="http://www.w3.org/TR/sml/#References">support for references</a> is, in addition to its accolade to Schematron, one of the main benefits of SML (extra kudos for apparently dropping the &#8220;EPR&#8221; reference scheme between <a href="http://www.w3.org/Submission/2007/SUBM-sml-20070321/#Reference_Schemes">submission</a> and <a href="http://www.w3.org/TR/sml/#Reference_Schemes">standardization</a>, in favor of just the &#8220;URI&#8221; scheme). Not to mention RDFa and friends. Or <a href="http://tools.ietf.org/html/draft-nottingham-http-link-header-06">HTTP Link headers</a> (<a href="http://bill.burkecentral.com/2009/10/14/link-headers-vs-custom-headers/">explained</a>) for link-challenged types.</p>
<p><strong>Finding #2: Put IDs on steroids</strong></p>
<p>There is little to argue about the value of clearly identifying things of interest and we didn&#8217;t wait for the Web to realize this. But it is also one of the most vexing and complex problems in many areas of computing (including IT management). Some of the long-standing questions include:</p>
<ul>
<li>Use an opaque ID (some random-looking string a characters) or an ID grounded in &#8220;unique&#8221; properties of the resource (if you can find any)?</li>
<li>At what point does a thing stop being the same (typical example: if I replace each hardware component of a server one after the other, at which point is it not the same server anymore? Does it make sense for the IT guys to slap an &#8220;asset id&#8221; sticker on the plastic box around it?)</li>
<li>How do you deal with reconciling two resources (with their own IDs) when you realize they represent the same thing?</li>
</ul>
<p>REST guidelines don&#8217;t help with these questions. There often is an assumption, which is true for many web apps, that the application &#8220;owns&#8221; the resource. My &#8220;inbox&#8221; only exists as a resource within the mail server application (e.g. Gmail or an Exchange server). Whatever URI GMail assigns for it is the URI for my inbox, period. Things are not as simple when the resources exist outside of any specific application: take a server, for example: the board management controller (or the hypervisor in the case of a VM), the OS management layer and the management agent installed on the machine all have claims to report on the machine (and therefore a need to identify it).</p>
<p>To some extent, Cloud computing simplifies many of these issues by providing controllers that &#8220;own&#8221; infrastructure resources and can authoritatively identify them. But it really is only pushing the problem to the next level of the stack.</p>
<p>Making the ID a URI doesn&#8217;t magically answer these questions. Though it helps in that it lets you leverage reconciliation mechanisms developed around URIs (such as &lt;atom:link rel=&#8221;alternate&#8221;&gt; or owl:sameAs). What REST does is add another constraint to this ID mechanism: Make the IDs dereferenceable URLs rather than just URIs.</p>
<p>I buy into this. A simple GET on a resource URI doesn&#8217;t solve everything but it has so many advantages that it should be attempted in all cases. And make this HTTP GET please (see finding #6).</p>
<p>In this adoption of GET, we just have to deal with small details such as:</p>
<ul>
<li>What URL do I use for resources that have more than one agent/controller?</li>
<li>How close to the resource do I point this URL? If it&#8217;s too close to it then it may change as the resource evolves (e.g. network changes) or be affected by the resource performance (e.g. a crashed machine or application that does not respond to its management API). If it&#8217;s removed from the resource, then I introduce a scope (e.g. one controller) within which the resource has to remain, which may cause scalability concerns (how many VMs can/should one controller handle, what if I want to migrate a VM across the ocean&#8230;).</li>
</ul>
<p>These are somewhat corner cases (and the more automation and virtualization you get, the fewer possible controllers you have per resource). While they need to be addressed, they don&#8217;t come close to negating the value of dereferenceable IDs. In addition, there are plenty of mechanisms to help with the issues above, from links in the representations (obviously) to <a href="http://www.rddl.org/">RDDL</a>-style lightweight directory to a last resort &#8220;give Saint Peter a call&#8221; mechanism (the <a href="http://www.ibm.com/developerworks/library/ws-resource/ws-wsrf.pdf">original WSRF proposal</a> had a sub-specification called WS-RenewableReferences that would let you ask for a new version of an expired EPR but it was never published &#8212; <a href="http://www.ogf.org/Public_Comment_Docs/Documents/Jan-2007/draft-ogf-ws-naming-spec-006.pdf">WS-Naming</a> in then-GGF also touched on that with its reference resolvers &#8212; showing once again that the base challenges don&#8217;t change as fast as technology flavors).</p>
<p>Implicit in this is the fact that URIs are vastly superior to EPRs. The latter were only just a band-aid on a broken system (which may have started back when WSDL 1.1 decided to define &#8220;ports&#8221; as message aggregators that can have only one URL) and it&#8217;s been more debilitating to SOAP than any other interoperability issue. Web services containers internalized this assumption to the point of providing a stunted dispatch mechanism that made it very hard to assign distinct URLs to resources.</p>
<p><strong>Finding #3: If REST told you to jump off a bridge, would you do it?</strong></p>
<p>Adherence to REST is not required to get the benefits I describe in this series. There is a lot to be inspired by in REST, but it shouldn&#8217;t be a religion. Sure, if you squint hard enough (and poke it here and there) you can call your interface RESTful, but why bother with the contortions if some parts are not so. As long as they don&#8217;t detract from the value of REST in the other parts. As in all conversions, the most fervent adepts of RPC will likely be tempted to become its most violent denunciators once they&#8217;re born again. This is a tired scenario that we don&#8217;t need to repeat. Don&#8217;t think of it as a conversion but as a new perspective.</p>
<p>Look at the &#8220;RESTful with many parameters?&#8221; comment thread on Stefan Tilkov&#8217;s excellent <a href="http://www.infoq.com/articles/rest-introduction">InfoQ introduction to REST</a>. It starts with some shared distaste for parameter-laden URIs and a search for a more RESTful approach. This gets suggested:</p>
<p style="padding-left: 30px;"><em>You could do a post on some URI like ./query/product_dep which would create a query resource. Now you &#8220;add&#8221; products to the query either by sending a product uri list with the initial post or by calling post on ./query/product_dep/{id}. With every post to the query resource the get on the query resource would change.</em></p>
<p>Yeah, you could. But how about an RPC-like query operation rather than having yet another resource lifecycle to manage just for the sake of being REST-compliant? And BTW, how do you think any sane consumer of your API is going to handle this? You guessed it, by packaging the POST/POST/GET/DELETE in one convenient client-side library function called &#8220;query&#8221;. As much as I criticize RPC-centric toolkits (see finding #5 below), it would be justified in this case.</p>
<p>Either you understand why/how REST principles benefit you or you don&#8217;t. If you do, then use this understanding to interpret the REST principles to best fit your needs. If you don&#8217;t, then no amount of CONTENT-TYPE-pixie-dust-spreading, GET-PUT-POST-DELETE-golden-rule-following and HATEOAS-magical-incantation-reciting will help you. That&#8217;s the whole point, for me at least, of this tree-part investigation. Stefan says essential the same, but in a converse way, in his article: <em>&#8220;there are often reasons why one would violate a REST constraint, simply because every constraint induces some trade-off that might not be acceptable in a particular situation. But often, REST constraints are violated due to a simple lack of understanding of their benefits.&#8221;</em> He says &#8220;understand why you violate&#8221; and I say &#8220;understand why you obey&#8221;. It is essentially the same (if you&#8217;re into stereotypes you can attribute the difference to his Germanic heritage and my Gallic blood).</p>
<p>Even worse than bending your interface to appear RESTful, don&#8217;t cherry-pick your use cases to only keep those that you feel you can properly address via REST, leaving the others aside. Conversely, don&#8217;t add requirements just because REST makes them easy to support (interesting how quickly &#8220;why do you force me to manage the lifecycle of yet another resource just to run a query&#8221; turns into &#8220;isn&#8217;t this great, you can share queries among users and you can handle long-running queries, I am sure we need this&#8221;).</p>
<p>This is not to say that you should not create a fully RESTful system. Just that you don&#8217;t necessarily have to and you can still get many benefits as long as you open your eyes to the cost/benefits trade-off involved.</p>
<p><strong>Finding #4: Learn humility from REST</strong></p>
<p>Beyond the technology, there is a vibe behind REST design. You can copy the technology and still miss it. I described it in 2005 as <a href="http://stage.vambenepe.com/archives/42">Humble Architecture</a>, and applied to SOA at the time. But it describes REST just as well:</p>
<p style="padding-left: 30px;"><em>More practically, this means that the key things to keep in mind when creating a service, is that you are not at the center of the universe, that you don’t know who is going to consume your service, that you don’t know what they are going to do with it, that you are not necessarily the one who can make the best use of the information you have access to and that you should be willing to share it with others openly&#8230;</em></p>
<p>The <a href="http://www.soa-manifesto.org/">SOA Manifesto</a> recently called this &#8220;intrinsic interoperability&#8221;.</p>
<p>In IT management terms, it means that you can RESTify your CMDB and your event console and your asset management software and your automation engine all you want, if you see your code as the ultimate consumer and the one that knows best, as the UI that users have to go through, the &#8220;ultimate source of truth&#8221; and the &#8220;manager of managers&#8221; then it doesn&#8217;t matter how well you use HTTP.</p>
<p><strong>Finding #5: Beware of tools bearing gifts</strong></p>
<p>To a large extent, the great thing about REST is how few tools there are to take it away from you. So you&#8217;re pretty much forced to understand what is going on in your contract as opposed to being kept ignorant by a wsdl2java type of toolkit. Sure, Java (and .NET) have improved in that regard, but really the cultural damage is done and the expectations have been set. Contrast this to <em>&#8220;the &#8216;router&#8217; is just a big case statement over URI-matching regexps&#8221;</em>, from Tim Bray&#8217;s <a href="http://www.tbray.org/ongoing/When/200x/2009/03/16/Sun-Cloud">post on the Sun Cloud API</a>, one of my main inspirations for this investigation.</p>
<p>REST is not inherently immune to the tool-controlling-the-hand syndrome. It&#8217;s just a matter of time until such tools try to make REST &#8220;accessible&#8221; to the &#8220;normal&#8221; developer (who can supposedly prevent thread deadlocks but not parse XML). Joe Gregorio <a href="http://bitworking.org/news/193/Do-we-need-WADL">warns about this</a> in the context of WADL (to summarize: WADL brings XSD which leads to code generation). Keep this in mind next time someone states that REST is more &#8220;loosely coupled&#8221; than SOAP. It&#8217;s <a href="http://wisdomofganesh.blogspot.com/2008/02/decoupling-interface-from.html">how you use it</a> that matters.</p>
<p><strong>Finding #6: Use screws, not glue, so we can peer inside and then close the lid again</strong></p>
<p>The &#8220;view source&#8221; option is how I and many others learned HTML. It unfortunately created a generation of HTML monsters who never went past <a href="http://www.w3.org/TR/REC-html32">version 3.2</a> (the marbled background makes me feel young again). But it also fueled the explosion of the Web. On-the-wire inspection through soapUI is what allowed me to perform <a href="http://stage.vambenepe.com/archives/844">this investigation</a> and report on it (WMI has allowed this for years, but WS-Management is what made it accessible and usable for anyone on any platform). This was, of course, in the context of SOAP which is also inspectable. Still, in that respect nothing beats plain HTTP which is why I recommend HTTP GET in finding #2 (make IDs dereferenceable) even though I don&#8217;t expect that the one-page-per-resource view is going to be the only way to access it in the finished product.</p>
<p>These (HTML source, on-the-wire XML and resource-description pages) rarely hit the human eye and yet their presence enables the development of the more commonly used views. Making it as easy as possible to see what is going on under the covers helps with learning, with debugging, with extending and with innovating. In the same way that 99% of web users don&#8217;t look at the HTML source (and 99.99% of them don&#8217;t see the HTTP requests) but the Web would not be what it is to them if this inspectability wasn&#8217;t been there to fuel its development.</p>
<p>Along the same line, make as few assumptions as possible about the consumers in your interfaces. Which, in practice, often means document what goes on the wire. WSDL/WADL can be used as a format, but they are at most one small component. Human-readable semantics are much more important.</p>
<p><strong>Finding #7: Nothing is free</strong></p>
<p>Part of what was so attractive about SOAP is everything you were going to get &#8220;for free&#8221; by using it. Message-level security (for all these use cases where your messages starts over HTTP, then hops onto a train, then get delivered by a carrier pigeon). Reliable messaging. Transactionality. Intermediaries (they were going to be a big deal in SOAP, as you can see in vestigial form today in the <a href="http://www.w3.org/TR/2007/REC-soap12-part1-20070427/#soapnodes">Nodes/Roles</a> left in the spec &#8211; also, do you remember <a href="http://msdn.microsoft.com/en-us/library/ms951249.aspx">WS-Routing</a>? I <a href="http://osdir.com/ml/windows.devel.soap.rp/2002-04/msg00000.html">do</a>.)</p>
<p>And it&#8217;s true that by now there is a body of specifications that support this as composable SOAP headers. But the lack of usage of these features contrasts with how often they were bandied in the early days of SOAP.</p>
<p>Well, I am detecting some of the same in the REST camp. How often have you heard about how REST enables caching? Or about how content types allows an ISP to compress images on the fly to speed up delivery over dial-up? Like in the SOAP case, these are real features and sometimes useful. It doesn&#8217;t mean that they are valuable to you. And if they are not, then don&#8217;t let them be used as justifications. Especially since they are not free. If caching doesn&#8217;t help me (because of low volume, because security considerations prevent a shared cache, etc) then its presence actually adds a cost to me, since I now have to worry whether something is cached or not and deal with ETags. Or I have to consistently remember to request the cache to be bypassed.</p>
<p><strong>Finding #8: Starting by sweeping you front door.</strong></p>
<p>Before you agonize about how RESTful your back-end management protocol is, how about you make sure that your management application (the user front-end) is a decent Web application? One with <a href="http://www.w3.org/Provider/Style/URI">cool URIs</a> , where the back button works, where bookmarks work, where the data is not hidden in some over-encompassing Flash/Silverlight thingy. Just saying.</p>
<p style="text-align: center;">***</p>
<p>Now for some questions still unanswered.</p>
<p><strong>Question #1: Is this a flee market?</strong></p>
<p>I am highly dubious of content negotiation and yet I can see many advantages to it. Mostly along the lines of finding #6: make it easy for people to look under the hood and get hold of the data. If you let them specify how they want to see the data, it&#8217;s obviously easier.</p>
<p>But there is no free lunch. Even if your infrastructure takes care of generating these different views for you (&#8220;no coding, just check the box&#8221;), you are expanding the surface of your contract. This means more documentation, more testing, more interoperability problems and more friction when time comes to modify the interface.</p>
<p>I don&#8217;t have enough experience with format negotiation to define the sweetspot of this practice. Is it one XML representation and one HTML, period (everything else get produced by the client by transforming the XML)? But is the XML Atom-wrapped or not? What about RDF? What about JSON? Not to forget that SOAP wrapper, how hard can it be to add. But soon enough we are in legacy hell.</p>
<p><strong>Question #2: Mime-types?</strong></p>
<p>The second part of <a href="http://bitworking.org/news/193/Do-we-need-WADL">Joe Gregorio&#8217;s WADL entry</a> is all about Mime types and I have a harder time following him there. For one thing, I am a bit puzzled by the different directions in which Mime types go at the same time. For example, we have image formats (e.g. &#8220;image/png&#8221;), packaging/compression formats (e.g. &#8220;application/zip&#8221;) and application formats (e.g. &#8220;application/vnd.oasis.opendocument.text&#8221; or &#8220;application/msword&#8221;). But what if I have a zip full of PNG images? And aren&#8217;t modern word processing formats basically a zip of XML files? If I don&#8217;t have the appropriate viewer, maybe I&#8217;d like them to be at least recognized as ZIP files. I don&#8217;t see support for such composition and taxonomy in these types.</p>
<p>And even within one type, things seem a bit messy in practice. Looking at the registered applications in the &#8220;options&#8221; menu of my Firefox browser, I see plenty of duplication:</p>
<ul>
<li>application/zip vs. application/x-zip-compressed</li>
<li>application/ms-powerpoint vs. application/vnd.ms-powerpoint</li>
<li>application/sdp vs. application/x-sdp</li>
<li>audio/mpeg vs. audio/x-mpeg</li>
<li>video/x-ms-asf vs. video/x-ms-asf-plugin</li>
</ul>
<p>I also wonder at what level of depth I want to take my Mime types. Sure I can use Atom as a package but if the items I am passing around happen to be CIM classes (serialized to XML), doesn&#8217;t it make sense to advertise this? And within these classes, can I let you know which domain (e.g. which namespace) my resources are in (virtual machines versus support tickets)?</p>
<p>These questions may simply be a reflection of my lack of maturity in the fine art of using Mime types as part of protocol design. My experience with them is more of the &#8220;find the type that works through trial and error and then leave it alone&#8221; kind.</p>
<p>[Side note: the first time I had to pay attention to Mime types was back in 1995/1996, playing with non-parsed headers and the multipart/x-mixed-replace type to bring some dynamism to web pages (that was before JavaScript or even animated GIFs). The site is still up, but the admins have messed up the Apache config so that the CGIs aren't executed anymore but return the Python code. So, here are some early Python experiments from yours truly: <a href="http://people.via.ecp.fr/~vbp/cgi-bin/test/nph-push.py">this script</a> was a "pushed" countdown and <a href="http://people.via.ecp.fr/~vbp/cgi-bin/test/serverpushvbp/nph-vbp.py">this one</a> was a "pushed" image animation. Cool stuff at the time, though not in a "get a date" kind of way.]</p>
<p>On the other hand, I very much agree with Joe&#8217;s point that &#8220;less is more&#8221;, i.e. that by not dictating how the semantics of a Mime type are defined the system forces you to think about the proper way to define them (e.g. an English-language RFC). As opposed to WSDL/XSD which gives the impression that once your XML validator turns green you&#8217;re done describing your interface. These syntactic validations are a complement at best, and usually not a very useful one (see <a href="http://stage.vambenepe.com/archives/100">&#8220;fat-bottomed specs&#8221;</a>).</p>
<p>In <a href="http://stage.vambenepe.com/archives/894#comment-81750">comments on previous posts</a>, Stu Charlton also emphasizes the value that Mime types bring. <em>&#8220;Hypermedia advocates exposing a variety of links for such state-transitions, along with potentially unique media types to describe interfaces to those transitions.&#8221;</em> I get the hypermedia concept, the <a href="http://www.subbu.org/blog/2008/10/explaining-state-in-hateoas">HATEOAS approach</a> and its very practical <a href="http://blogs.sun.com/craigmcc/entry/why_hateoas">benefits</a>. But I am still dubious about the role of Mime types in achieving them and I am not the only one with such <a href="http://soundadvice.id.au/blog/2009/08/16/#mimeLimitation">qualms</a>. I have too much respect for Joe and Stu to dismiss it entirely, but until I get an example that makes it &#8220;click&#8221; in practice for me I won&#8217;t sweat about Mime types too much.</p>
<p><strong>Question #3: Riding the Zeitgeist?</strong></p>
<p>That&#8217;s a practical question rather than a technical one, but as a protocol creator/promoter you are going to have to decide whether you market it as &#8220;RESTful&#8221;. If I have learned one thing in my past involvement with standards it is that marketing/positioning/impressions matter for standards as much as for products. To a large extent, for Clouds, <a href="http://www.w3.org/DesignIssues/LinkedData.html">Linked Data</a> is a more appropriate label. But that provides little marketing/credibility humph with CIOs compared to REST (and less buzzword-compliance for the tech press). So maybe you want to write your spec based on Linked Data and then market it with a REST ribbon (the two are very compatible anyway). Just keep in mind that REST is the obvious choice for protocols in 2009 in the same way that SOAP was a few years ago.</p>
<p>Of course this is not an issue if you specification is truly RESTful. But none of the current Cloud &#8220;RESTful&#8221; APIs is, and I don&#8217;t expect this to change. At least if you go by Roy Fielding&#8217;s <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven">definition</a> (or Paul&#8217;s handy <a href="http://blog.whatfettle.com/2008/10/21/what-i-believe-roy-said/">summary</a>):</p>
<p style="padding-left: 30px;"><em>A REST API must not define fixed resource names or hierarchies (an obvious coupling of client and server). Servers must have the freedom to control their own namespace. Instead, allow servers to instruct clients on how to construct appropriate URIs, such as is done in HTML forms and URI templates, by defining those instructions within media types and link relations. [Failure here implies that clients are assuming a resource structure due to out-of band information, such as a domain-specific standard, which is the data-oriented equivalent to RPC's functional coupling].</em></p>
<p>And (in <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-746">a comment</a>) Mark Baker adds:</p>
<p style="padding-left: 30px;"><em>I’ve reviewed lots of “REST APIs”, many of them privately for clients, and a common theme I’ve noticed is that most folks coming from a CORBA/DCE/DCOM/WS-* background, despite all the REST knowledge I’ve implanted into their heads, still cannot get away from the need to “specify the interface”. Sometimes this manifests itself through predefined relationships between resources, specifying URI structure, or listing the possible response codes received from different resources in response to the standard 4 methods (usually a combination of all those). I expect it’s just habit. But a second round of harping on the uniform interface – that every service has the same interface and so any service-specific interface specification only serves to increase coupling – sets them straight.</em></p>
<p>So the question of whether you want to market yourself as RESTful (rather than just as &#8220;inspired by the proper use of HTTP illustrated by REST&#8221;) is relevant, if only because you may find the father of REST throwing (POSTing?) tomatoes at you. There is always a risk in wearing clothes that look good but don&#8217;t quite fit you. The worst time for your pants to fall off is when you suddenly have to start running.</p>
<p>For more on this, refer to Ted Neward&#8217;s excellent <a href="http://blogs.tedneward.com/2008/11/07/REST+HTTP.aspx">Roy decoder ring</a> where he not only explains what Roy means but more importantly clarifies that &#8220;if you&#8217;re not doing REST, it doesn&#8217;t mean that your API sucks&#8221; (to which I&#8217;d add that it is actually more likely to suck if you try to ape REST than if you allow yourself to be loosely inspired by it).</p>
<p style="text-align: center;">***</p>
<p><strong>Wrapping up the wrap-up</strong></p>
<p>There is one key topic that I had originally included in this wrap-up but decided to remove: extensibility. Mark Hapner brings it up in a <a href="http://stage.vambenepe.com/archives/863#comment-79599">comment</a> on a previous post:</p>
<p style="padding-left: 30px;"><em>It is interesting to note that HTML does not provide namespaces but this hasn’t limited its capabilities. The reason is that links are a very effective mechanism for composing resources. Rather than composition via complicated ‘embedding’ mechanisms such as namespaces, the web composes resources via links. If HTML hadn’t provided open-ended, embeddable links there would be no web.</em></p>
<p>I am the kind of guy who would have namespace-qualified his children when naming them (had my wife not stepped in) so I don&#8217;t necessarily see &#8220;extension via links&#8221; as a negation of the need for namespaces (best example: RDF). The whole topic of embedding versus linking is a great one but this post doesn&#8217;t need another thousand words and the &#8220;REST in practice&#8221; umbrella is not necessarily the best one for this discussion. So I hereby conclude my &#8220;REST in practice for IT and Cloud management&#8221; series, with the intent to eventually start a &#8220;Linked Data in practice for IT and Cloud management&#8221; series in which extensibility will be properly handled. And we can also talk about querying (conspicuously absent from Cloud APIs, unless <a href="http://www.dmtf.org/standards/cmdbf/">CMDBf</a> is now a Cloud API) and versioning. As a teaser for the application of Linked Data to IT/Cloud, I will leave you with what <a href="http://googleresearch.blogspot.com/2009/04/cloud-computing-and-internet.html">Vint Cerf has to say</a>.</p>
<p>[UPDATED 2010/1/27: I still haven't written the promised "Linked Data in practice for IT and Cloud management" post, but this <a href="http://www.jenitennison.com/blog/node/140">explanation of the usage of Linked Data for data.gov.uk</a> pretty much says it all. I may still write a post describing how what Jeni says about government data applies to Cloud management APIs, but it's almost too obvious to bother. Actually, there may be reasons why Cloud management benefits even more from Linked Data than UK government data, so it may still be worth a post. At some point. When I convince myself that it may influence things rather than be background noise.] </p>
]]></content:encoded>
			<wfw:commentRss>http://stage.vambenepe.com/archives/1161/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.157 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-08 10:29:41 -->

