{"id":94,"date":"2003-02-13T21:51:00","date_gmt":"2003-02-14T01:51:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/?p=219"},"modified":"2003-02-13T21:51:00","modified_gmt":"2003-02-14T01:51:00","slug":"oasis-does-reliable-messaging","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2003\/02\/oasis-does-reliable-messaging\/","title":{"rendered":"OASIS does Reliable Messaging"},"content":{"rendered":"<p>Apparently OASIS has decided to\n<a href=\"http:\/\/lists.xml.org\/archives\/xml-dev\/200302\/msg00455.html\">tackle reliable messaging<\/a>,\nwith help from the usual non-IBM\/MS Web services suspects.<\/p>\n\n<p>I think &#8220;reliable messaging&#8221; is a huge waste of time.  It&#8217;s akin to\nsaying that the network is unreliable, so let&#8217;s just make a reliable\nnetwork on top (which is different than &#8220;reliable data stream&#8221; ala TCP).\nSorry, it just doesn&#8217;t work that way.  &#8220;reliable network&#8221; is an oxymoron,\nfor any number of reliability layers you might try to build on top.<\/p>\n\n<p>As with most problems over the Internet, reliability is a\n<em>coordination problem<\/em>.  That is, how do two or more independant\npieces of software distributed on an unreliable network, coordinate to\nachieve some goal in a reliable manner (such that both know that the goal\nhas been achieved or failed, etc..)?  Unfortunately, you can&#8217;t coordinate\n&#8220;reliability&#8221; in a vacuum, like the typical reliable messaging approach\nof store\/forward\/timeout; you have to look at what task is being coordinated\nin the first place, and then figure out how to augment your coordination\nsemantics such that the necessary degree of reliability can be achieved.\nIn the context of the Web, that means using the uniform coordination semantics\nthat are made available through HTTP.<\/p>\n\n<p>Simple example.  I want to turn on a lightbulb, and do it reliably such\nthat I know if my attempt succeeded or not.  I would use PUT.  If I got back a 2xx, I\nwould know the lightbulb was on.  If I didn&#8217;t get back a response at all &#8211; say if the\nconnection died after the request was sent &#8211; then I don&#8217;t know.  But if I\nneeded to know, I could do a GET.  Perfectly reliable, no reliable messaging\nsolution in sight.<\/p>\n\n<p>That example doesn&#8217;t work for everything of course, because PUT is idempotent\nand not all operations you might want to perform are idempotent.  POST is different,\nbut the requirements on it are different too, since if you use POST, you\naccept that you won&#8217;t know the state of the resource after a successful\nsubmission (getting deeper into that is a topic too large for a blog, sorry).<\/p>\n\n<p>Anyhow, I acknowledge that some work needs to be done to HTTP to help\nwith reliability (as <a href=\"http:\/\/www.prescod.net\/reliable_http.html\">Paul describes<\/a>).\nBut that is in no way &#8220;reliable messaging&#8221;.<\/p>","protected":false},"excerpt":{"rendered":"Apparently OASIS has decided to tackle reliable messaging, with help from the usual non-IBM\/MS Web services suspects. I think &#8220;reliable messaging&#8221; is a huge waste of time. It&#8217;s akin to saying that the network is unreliable, so let&#8217;s just make a reliable network on top (which is different than &#8220;reliable data stream&#8221; ala TCP). Sorry, [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[40],"class_list":["post-94","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-xml"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/94","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=94"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/94\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=94"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=94"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}