{"id":411,"date":"2010-03-05T08:49:19","date_gmt":"2010-03-05T14:49:19","guid":{"rendered":"http:\/\/www.webadminblog.com\/?p=411"},"modified":"2010-03-05T09:42:25","modified_gmt":"2010-03-05T15:42:25","slug":"microsoft-azure-for-dummies-or-for-smarties","status":"publish","type":"post","link":"https:\/\/www.webadminblog.com\/index.php\/2010\/03\/05\/microsoft-azure-for-dummies-or-for-smarties\/","title":{"rendered":"Microsoft Azure for Dummies &#8211; or for Smarties?"},"content":{"rendered":"<h2>What Is Microsoft Azure?<\/h2>\n<p>I&#8217;m going to attempt to explain Microsoft Azure in &#8220;normal Web person&#8221; language.\u00a0 Like many of you, I am more familiar with Linux\/open source type solutions, and like many of you, my first forays into cloud computing have been with Amazon Web Services.\u00a0 It can often be hard for people not steeped in Redmondese to understand exactly what the heck they&#8217;re talking about when Microsoft people try to explain their offerings.\u00a0 (I remember a time some years ago I was trying to get a guy to explain some new Microsoft data access thing with the usual three letter acronym name.\u00a0 I asked, &#8220;Is it a library?\u00a0 A language?\u00a0 A protocol?\u00a0 A daemon?\u00a0 Branding?\u00a0 What exactly is this thing you&#8217;re trying to get me to uptake?&#8221;\u00a0 The reply was invariably &#8220;It&#8217;s an innovative new way to access data!&#8221;\u00a0 Sigh.\u00a0 I never did get an answer and concluded &#8220;Never mind.&#8221;)<\/p>\n<p>Microsoft has released their new cloud offering, <a href=\"http:\/\/www.microsoft.com\/windowsazure\/\">Azure<\/a>.\u00a0 Our company is a close Microsoft partner since we use a lot of their technologies in developing our company&#8217;s desktop software products, so as &#8220;cloud guy&#8221; I&#8217;ve gotten some in depth briefings and even went to <a href=\"http:\/\/microsoftpdc.com\/\">PDC<\/a> this year to learn more (some of my friends who have known me over the course of my 15 years of UNIX administration were horrified).\u00a0 &#8220;Cloud computing&#8221; is an overloaded enough term that it&#8217;s not highly descriptive and it took a while to cut through the explanations to understand what Azure really is.\u00a0 Let me break it down for you and explain the deal.<\/p>\n<h3>Point of Comparison: Amazon (IaaS)<\/h3>\n<p>In <a href=\"http:\/\/aws.amazon.com\/ec2\/\">Amazon EC2<\/a>, as hopefully everyone knows by now, you are basically given entire dynamically-provisioned, hourly-billed virtual machines that you load OSes on and install software and all that.\u00a0 &#8220;Like servers, but somewhere out in the ether.&#8221;\u00a0 Those kinds of cloud offerings (e.g. Amazon, Rackspace, most of them really) are called Infrastructure As A Service (IaaS).\u00a0 You&#8217;re responsible for everything you normally would be, except for the data center work.\u00a0 Azure is not an IaaS offering but still bears a lot of similarities to Amazon; I&#8217;ll get into details later.<\/p>\n<h3>Point of Comparison: Google App Engine (PaaS)<\/h3>\n<p>Take <a href=\"http:\/\/code.google.com\/appengine\/\">Google&#8217;s App Engine<\/a> as another point of comparison.\u00a0 There, you just upload your Python or Java application to their portal and &#8220;it runs on the Web.&#8221;\u00a0 You don&#8217;t have access to the server or OS or disk or anything.\u00a0 And it &#8220;magically&#8221; scales for you.\u00a0 This approach is called Platform as a Service (PaaS).\u00a0\u00a0 They provide the full platform stack, you only provide the end application.\u00a0 On the one hand, you don&#8217;t have to mess with OS level stuff &#8211; if you are just a Java programmer, you don&#8217;t have to know a single UNIX (or Windows) command to transition your app from &#8220;But it works in Eclipse!&#8221; to running on a Web server on the Internet.\u00a0 On the other hand, that comes with a lot of limitations that the PaaS providers have to establish to make everything play together nicely.\u00a0 One of our early App Engine experiences was sad &#8211; one of our developers wrote a Java app that used a free XML library to parse some XML.\u00a0 Well, that library had functionality in it (that we weren&#8217;t using) that could write XML to disk.\u00a0 You can&#8217;t write to disk in App Engine, so its response was to disallow the entire library.\u00a0 The app didn&#8217;t work and had to be heavily rewritten.\u00a0 So it&#8217;s pretty good for code that you are writing EVERY SINGLE LINE OF YOURSELF.\u00a0 Azure isn&#8217;t quite as restrictive as App Engine, but it has some of that flavor.<\/p>\n<h3>Azure&#8217;s Model<\/h3>\n<p>Windows Azure falls between the two.\u00a0 First of all, Azure is a real &#8220;hosted cloud&#8221; like Amazon Web Services, like most of us really think about when we think cloud computing; it&#8217;s not one of these on premise things that companies are branding as &#8220;cloud&#8221; just for kicks. That&#8217;s important to say because it seems like nowadays the larger the company, the more they are deliberately diluting the term &#8220;cloud&#8221; to stick their products under its aegis.\u00a0 Microsoft isn&#8217;t doing that, this is a &#8220;cloud offering&#8221; in the classical (where classical means 2008, I guess) sense.<\/p>\n<p>However, in a number of important ways it&#8217;s not like Amazon.\u00a0 I&#8217;d definitely classify it as a PaaS offering.\u00a0 You upload your code to &#8220;Roles&#8221; which are basically containers that run your application in a Windows 2008(ish) environment.\u00a0 (There are two types &#8211; a &#8220;Web role&#8221; has a stripped down IIS provided on it, a &#8220;Worker role&#8221; doesn&#8217;t &#8211; the only real difference between the two.)\u00a0 You do not have raw OS access, and cannot do things like write to the registry.\u00a0 But, it is less restrictive than App Engine.\u00a0 You can bundle up other stuff to run in Azure &#8211; even run <a href=\"http:\/\/code.msdn.microsoft.com\/winazuretomcat\">Java apps using Apache Tomcat<\/a>.\u00a0 You have to be able to install whatever you want to run &#8220;xcopy only&#8221; &#8211; in other words, no fancy installers, it needs to be something you could just copy the files to a Windows PC, without administrative privilege, and run a command from the command line and have it work.\u00a0 Luckily, Tomcat\/Java fits that description. They have helper packs to facilitate doing this with Tomcat, memcached, and Apache\/PHP\/MediaWiki.\u00a0 At PDC they demoed Domino&#8217;s Pizza running their Java order app on it and a WordPress blog running on it.\u00a0 So it&#8217;s not only for .NET programmers.\u00a0 Managed code is easier to deploy, but you can deploy and run about anything that fits the &#8220;copy and run command line&#8221; model.<\/p>\n<p>I find this approach a little ironic actually.\u00a0 It&#8217;s been a lot easier for us to get the Java and open source (well, the ones with Windows ports) parts of our infrastructure running on Azure than Windows parts!\u00a0 Everybody provides Windows stuff with an installer, of course, and you can&#8217;t run installers on Azure.\u00a0 Anyway, in its core computing model it&#8217;s like Google App Engine &#8211; it&#8217;s more flexible than that (g00d) but it doesn&#8217;t do automatic scaling (bad).\u00a0 If it did autoscaling I&#8217;d be willing to say &#8220;It&#8217;s better than App Engine in every way.&#8221;<\/p>\n<p>In other ways, it&#8217;s a lot like Amazon.\u00a0 They offer a variety of storage options &#8211; blobs (like S3), tables (like mySQL), queues (like SQS), drives (like EBS).\u00a0 They have an integral CDN.\u00a0 They do hourly billing.\u00a0 Pricing is pretty similar to Amazon &#8211; it&#8217;s hard to totally equate apples to apples, but Azure compute is $0.12\/hr and an Amazon small Windows image compute is $0.12\/hr (Coincidence?\u00a0 I think not.).\u00a0 And you have to figure out scaling and provisioning yourself on Amazon too &#8211; or pay a lot of scratch to one of the provisioning companies like RightScale.<\/p>\n<h3>What&#8217;s Unique and Different<\/h3>\n<p>Well, the largest thing that I&#8217;ve already mentioned is the PaaS approach.\u00a0 If you need OS level access, you&#8217;re out of luck;\u00a0 if you don&#8217;t want to have to mess with OS management, you&#8217;re in luck!\u00a0 So to the first order of magnitude, you can think of Azure as &#8220;like Amazon Web Services, but the compute uses more of a Google App Engine model.&#8221;<\/p>\n<p>But wait, there&#8217;s more!<\/p>\n<p>One of the biggest things that Azure brings to the table is that, using Visual Studio, you can run a local Azure &#8220;fabric&#8221; on your PC, which means you can develop, test, and run cloud apps locally without having to upload to the cloud and incur usage charges.\u00a0 This is HUGE.\u00a0 One of the biggest pains about programming for Amazon, for instance, is that if you want to exercise any of their APIs, you have to do it &#8220;up there.&#8221;\u00a0 Also, you can&#8217;t move images back and forth between Amazon and on premise.\u00a0 Now, there are efforts like <a href=\"http:\/\/www.eucalyptus.com\/\">EUCALYPTUS<\/a> that try to overcome some of this problem but in the end you pretty much just have to throw in the towel and do all dev and test up in the cloud.\u00a0 Amazon and Eclipse (and maybe Xen) &#8211; get together and make it happen!!!!<\/p>\n<p>Here&#8217;s something else interesting.\u00a0 In a move that seems more like a decision from a typical cranky cult-of-personality open source project, they have decided that proper Web apps need to be asynchronous and message-driven, and by God that&#8217;s what you&#8217;re going to do.\u00a0 Their load balancers won&#8217;t do sticky sessions (only round robin) and time out all connections between all tiers after 60 seconds without exception.\u00a0 If you need more than that, tough &#8211; rewrite your app to use a multi-tier message queue\/event listener model.\u00a0 Now on the one hand, it&#8217;s hard for me to disagree with that &#8211; I&#8217;ve been sweating our developers, telling them that&#8217;s the correct best-practice model for scalability on the Web.\u00a0 But again you&#8217;re faced with the &#8220;Well what if I&#8217;m using some preexisting software and that&#8217;s not how it&#8217;s architected?&#8221; problem.\u00a0 This is the typical PaaS pattern of &#8220;it&#8217;s great, if you&#8217;re writing every line of code yourself.&#8221;<\/p>\n<p>In many ways, Azure is meant to be very developer friendly.\u00a0 In a lot of ways that&#8217;s good.\u00a0 As a system admin, however, I wince every time they go on about &#8220;You can deploy your app to Azure just by right clicking in Visual Studio!!!&#8221;\u00a0 Of course, that&#8217;s not how anyone with a responsibly controlled production environment would do it, but it certainly does make for fast easy adoption in development. \u00a0 The curve for a developer who is &#8220;just&#8221; a C++\/Java\/.NET\/whatever wrangler to get up and going on an IaaS solution like Amazon is pretty large comparatively; here, it&#8217;s &#8220;go sign up for an account and then click to deploy from your IDE, and voila it&#8217;s running on the Intertubes.&#8221;\u00a0 So it&#8217;s a qualified good &#8211; it puts more pressure on you as an ops person to go get the developers to understand why they need to utilize your services.\u00a0 (In a traditional server environment, they have to go through you to get their code deployed.)\u00a0 Often, for good or ill, we use the release process as a touchstone to also engage developers on other aspects of their code that need to be systems engineered better.<\/p>\n<p>Now, that&#8217;s my view of the major differences.\u00a0 I think the usual Azure sales pitch would say something different &#8211; I&#8217;ve forgotten two of their huge differentiators, their service bus and access control components.\u00a0 They are branded under the name &#8220;AppFabric,&#8221; which as usual is a name Microsoft is also using for something else completely different (a new true app server for Windows Server, including projects formerly code named Dublin and Velocity &#8211; think of it as a real WebLogic\/WebSphere type app server plus memcache.)<\/p>\n<p>Their service bus is an <a href=\"http:\/\/en.wikipedia.org\/wiki\/Enterprise_service_bus\">ESB<\/a>.\u00a0 As alluded to above, you&#8217;re going to want to use it to do messaging. \u00a0 You can also use Azure Queues, which is a little confusing because the ESB is also a message queue &#8211; I&#8217;m not clear on their intended differentiation really.\u00a0 You can of course just load up an ESB yourself in any other IaaS cloud solution too, so if you really want one you could do e.g. <a href=\"http:\/\/servicemix.apache.org\/home.html\">Apache ServiceMix<\/a> hosted on Amazon.\u00a0 But, they are managing this one for you which is a plus.\u00a0 You will need to use it to do many of the common things you&#8217;d want to do.<\/p>\n<p>Their <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee732536.aspx\">access control<\/a> &#8211; is a mess.\u00a0 Sorry, Microsoft guys.\u00a0 The whole rest of the thing, I&#8217;ve managed to cut through the &#8220;Microsoft acronyms versus the rest of the world&#8217;s terms and definitions&#8221; factor, but not here. \u00a0 &#8220;You see, you use ACS&#8217;s WIF STS to generate a SWT,&#8221; says our Microsoft rep with a straight face. \u00a0 They seem to be excited that it will use people&#8217;s Microsoft Live IDs, so if you want people to have logins to your site and you don&#8217;t want to manage any of that, it is probably nice.\u00a0 It takes SAML tokens too, I think, though I&#8217;m not sure if the caveats around that end up equating to &#8220;Well, not really.&#8221;\u00a0 Anyway, their explanations have been incoherent so far and I&#8217;m not smelling anything I&#8217;m really interested in behind it.\u00a0 But there&#8217;s nothing to prevent you from just using LDAP and your own Internet SSO\/federation solution.\u00a0 I don&#8217;t count this against Microsoft because no one else provides anything like this, so even if I ignore the Azure one it doesn&#8217;t put it behind any other solution.<\/p>\n<h3>The Future<\/h3>\n<p>Microsoft has said they plan to add on some kind of VM\/IaaS offering eventually because of the demand.\u00a0 For us, the PaaS approach is a bit of a drawback &#8211; we want to do all kinds of things like &#8220;virus scan uploaded files,&#8221; &#8220;run a good load balancer,&#8221; &#8220;run an LDAP server&#8221;, and other things that basically require more full OS access.\u00a0 I think we may have an LDAP direction with the all-Java OpenDS, but it&#8217;s a pain point in general.<\/p>\n<p>I think a lot of their decisions that are a short term pain in the ass (no installs, no synchronous) are actually good in the long term.\u00a0 If all developers knew how to develop async and did it by default, and if all software vendors, even Windows based ones, provided their product in a form that could just be &#8220;copy and run without admin privs&#8221; to install, the world would be a better place.\u00a0 That&#8217;s interesting in that &#8220;Sure it&#8217;s hard to use now but it&#8217;ll make the world better eventually&#8221; is usually heard from the other side of the aisle.<\/p>\n<h3>Conclusion<\/h3>\n<p>Azure&#8217;s a pretty legit offering!\u00a0 And I&#8217;m very impressed by their velocity.\u00a0 I think it&#8217;s fair to say that overall Azure isn&#8217;t quite as good as Amazon except for specific use cases (you&#8217;re writing it all in .NET by hand in Visual Studio) &#8211; but no one else is as good as Amazon either (believe me, I evaluated them) and Amazon has years of head start; Azure is brand new but already at about 80%! That puts them into the top 5 out of the gate.<\/p>\n<p>Without an IaaS component, you still can&#8217;t do everything under the sun in Azure.\u00a0 But if you&#8217;re not depending on much in the way of big third party software chunks, it&#8217;s feasible; if you&#8217;re doing .NET programming, it&#8217;s very compelling.<\/p>\n<p>Do note that I haven&#8217;t focused too much on the attributes and limitations of cloud computing in general here &#8211; that&#8217;s another topic &#8211; this article is meant to compare and contrast Azure to other cloud offerings so that people can understand its architecture.<\/p>\n<p>I hope that was clear.\u00a0 Feel free and ask questions in the comments and I&#8217;ll try to clarify!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is Microsoft Azure?  Here&#8217;s a clear explanation of this new cloud computing product and how it compares to Amazon and Google.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[82],"tags":[36,399,39,627,400,100,401,190,108],"class_list":["post-411","post","type-post","status-publish","format-standard","hentry","category-cloud-computing","tag-amazon","tag-azure","tag-cloud","tag-cloud-computing","tag-dummies","tag-google","tag-iaas","tag-microsoft","tag-paas"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pfI0c-6D","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/posts\/411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/comments?post=411"}],"version-history":[{"count":9,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/posts\/411\/revisions"}],"predecessor-version":[{"id":419,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/posts\/411\/revisions\/419"}],"wp:attachment":[{"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/media?parent=411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/categories?post=411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webadminblog.com\/index.php\/wp-json\/wp\/v2\/tags?post=411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}