Why is Windows Azure Deployment Now Comparable to Heroku?

Back in January I wrote a blog post explaining why Windows Azure was taking five to ten minutes to deploy an application when Heroku was doing it in seconds.  At the time the reason was how the two platforms approached their Platform as a Service (PaaS) offerings: Heroku focused their abstraction layer at the process level whereas Windows Azure was at the Virtual Machine level.  Now some things have changed, but more on that in a bit.

When Windows Azure came many folks looked at the pricing and asked, “why on earth would I spend that much a month when I can have a GoDaddy site for like $9.00?”  Great question, and the answer, of course, was you wouldn’t.  If your website, be it your personal blog, small company website, etc., was running just fine on a low end shared hosted account then it just wasn’t the target audience for Windows Azure.  Microsoft received a LOT of feedback on this matter. 

Now, with the announcement of Windows Azure Web Sites both issues above have been addressed.  Windows Azure Web Sites is a PaaS offering that is now at the process level like Heroku and a great place to host those small sites.  The site can be deployed or updated in seconds.  You can update it via PowerShell, Web Deploy or even FTP, just like you would for those GoDaddy sites. 

Now, you might be thinking, “But this sounds like shared hosting and I hate noisy neighbors”.  True, it is shared hosting, but you also have the option of using Reserved instances.  With a reserved instance you pay slightly less than you do for a Web/Worker role of the same size and you are the only one on that server.  You can then move all your sites to those reserved instances and you can then only complain to yourself about noisy neighbors.  And you can scale both the shared and reserved instances.

Oh, and the cost? You can have 10 FREE Windows Azure Web Sites (of the shared variety) to get started with. I will point out (as brought up in a comment below) that custom domain names are only supported for reserved instances, not for the shared instances.  So, as of the time of this update to the post, if you want to use this feature and a custom domain name you’ll need to be on a reserved instance.

There will be a ton of posts on how to create a Windows Azure Web Site, so I won’t get into that (check the resource links below).  What I what I really wanted to point out is that this feature of Windows Azure works much like how Heroku works, at the process level.  There is a set of shared machines running in the cloud in which your website will be deployed to.  The servers are already running and all that is left is to have the code deployed to a location, a process started to respond to requests.  Deployment and spin up times are now in the seconds.

Wait, what happened to Web and Worker roles?! 

Don’t worry, they are still there.  The term for these Windows Azure features have been renamed from “Hosted Services” to “Cloud Services”.  You still have the option to create and deploy solutions that contain Web and Worker roles, which gives you that extra control since you are working at the level of the virtual machine instead of the process.  You can have start up tasks, install components, etc., which is not something you do with the Windows Azure Web Site feature.  For the most part you’ll see the deployment times of the Cloud Services to be on par with what they have been, and Microsoft continues to put effort into improving that experience.

Oh, and if you need even more control than what you get with the Cloud Services feature Microsoft has also announced a new full Infrastructure as a Service (IaaS) feature called Virtual Machines where you can bring your own images, or even choose from a gallery.

So what do I use?

Well, now there are like a ton of ways to host your stuff, so what do you use?  This is brand new stuff and most of it is in preview only right now so it will be a little while as people try things out and develop a set of good practices, but here is how I currently see things:

  • Use Windows Azure Web Sites when you can for your websites and services.  If you don’t need a lot of control over the VM, and especially if you don’t mind sharing, then web sites are a great option (and maybe free if you only need one instance!).  Jump to reserved instances if you can’t, or don’t want to share, or if you want to use a custom domain name.
  • Move to Cloud Services if you need more control over the environment, but don’t really want to get into the infrastructure side of things.  This is still a PaaS model and has a lot of benefits over managing a bunch of independent virtual machines, especially when you have a cookie cutter web site you just need to scale easily. 
  • Think about the Virtual Machine (IaaS) when you need the ultimate control over the machine and have persisted OS drives.  This is a great option for that 3rd party vendor app that requires changes to the OS drive and lots of work to set up. 

Resources

As you can see, Microsoft has just released quite a few new features and updates to the Windows Azure Platform.  There is a lot to take in.  To get you started here are some resources:

UPDATED [6/8/2012] : Added text about custom domain names.