Almost a year ago, I compared Google App Engine and Microsoft Windows Azure, trying to decide which platform I should write and host my blog (and some other small projects) on. The comparison was about more than hosting - the languages and frameworks used would be influenced by the platform I was hosting on. There were also APIs available only to one platform, or easier to use on one platform compared to the other (such as the App Engine authentication).

Due to the huge differences, I did a little homework on each platform, and ultimately, it came down to price. The difference in pricing between Google App Engine and Windows Azure was so enormous, that there wasn't really a decision to make. App Engine hosts this blog for free. Windows Azure would've cost around $100/month minimum.

One Year On

Fast forward a year and things have changed a little. App Engine has become more mature, Amazon has introduced Micro instances, and Microsoft has done, well, not a lot. There's been seemingly zero change in the pricing for Windows Azure, meaning there's still a significant minimum cost in using it.

Maybe Windows Azure is aimed at The Big Boys?

I can only assume Microsoft don't care so much about small developers and are aiming Windows Azure at bigger businesses that already have significant applications. Of course, this is their decision. However, I think they are overlooking something significant. All successful websites/applications start small. At the time of launch, it's very difficult to tell whether a website/application will do well. Who wants to fork out for expensive hosting for something that might not take off?

If the price is too high, people will pass on Windows Azure for small start-up websites/applications. They'll look at cheaper alternatives, such as Google App Engine or Amazon EC2. If they explode overnight, they have two options; 1) Stick with App Engine/Amazon EC2; 2) Convert everything to Windows Azure. One of them is zero work, and one of them is significant work. What do you think most business will choose?

Google App Engine Lock-in

Despite currently hosting my log on App Engine, I do agree with the lock-in argument. With Google App Engine, you're very closely tied to Google's way of doing things, and Google's APIs. Although there are initiatives out there trying to make it possible to run App Engine apps on non-Google hardware, they're generally incomplete, lagging behind, and it's unlikely they will ever match the performance and scalability of hosting with Google.

Put bluntly, if you want to move away from App Engine, there will certainly be a lot of pain and re-writing code.

Update: In the comments, Tobias points out that TyphoonAE is pretty much a complete implementation of the API, making this much easier. I'm not sure how the performance or scalability stacks up to App Engine, but you can certainly get the code up and running elsewhere (even EC2!) relatively easily.

Enter, Amazon EC2

Amazon EC2 wasn't mentioned much in my original comparison because it was similarly priced to Windows Azure, but you also have to manage your own servers. It also requires much more work to make your application scale. Things have changed a little at Amazon EC2 over the last year.

Recently, Amazon introduced Micro Instances. These are low power instances and have only 600MB RAM, but they come in at around 3 cents per hour! If you're prepared to pay a little up-front (Reserved Instances), then the price is just 1 cent per hour! Before you run and sign up, be aware that with Micro instances, there is no instance storage - your volumes must all be EBS volumes. This doesn't really change much, but you will incur a charge for all disk access (IOPS), but this should still work out pretty cheap.

In addition, Amazon now has an Autoscaling service, which allows you to automatically start up new instances (or shut them down) based on load. This service is free if you opt for CloudWatch (a resource monitoring service, which costs 1.5 cents per instance per hour).

Going hand in hand with Autoscaling, there is Elastic Load Balancing, which allows an IP address to balance load across multiple instances. This costs 2.5 cents per hour, and 0.8 cents per GB of data handled by the load balancer.

These scaling options aren't cheap (they're not expensive either), but they are options that require little work. You can start off with a Micro instance and scale up fairly easily if things explode overnight. The only real thing you need to handle is scaling your writable data. You can't just run SQL on each instance, because the data would not be replicated. You also have a serious single point of failure running just one instance.

Google App Engine vs Amazon EC2

So, with Windows Azure's cost (and lack of an equivalent to Amazon's Micro Instances), it looks like it's between Google App Engine and Amazon EC2. It's time to make a list of pros and cons for each! This list is based on my opinions, and my requirements, so it might not match your own (eg. you might love Python!).

Amazon EC2 Pros and Cons

  • Pros
    • No lock-in. Relatively easy to move code to another box.
    • Code in C#, .NET, ASP.NET MVC / Visual Studio
    • SQL Server (Express/Compact)
    • Amazon staff very active in the community
  • Cons
    • No free quota - minimum cost per month, even if 0 visitors
    • Scaling harder (if required) - need to handle data spread across n instances
    • Single point of failure with single Micro instance

Google App Engine Pros and Cons

  • Pros
    • Generous free quota
    • Billed for actual CPU usage, not "live" hours
    • Scaling is (relatively) easy
    • "Free" built-in Google authentication
  • Cons
    • (Pretty much) locked in to Google App Engine See comments below
    • No support for C#/.NET
    • Non-relational datastore - more restrictive on how data can be accessed
    • (Relatively) high rate of datastore errors, need to code to handle them
    • Blog is already hosted here - don't need to do any work ;)
    • No local storage, so unable to use libraries that rely on writing to disk

Both platforms have a lot going for them. It's a tough decision, but it doesn't need to be. If Google added support for C#/ASP.NET MVC (unlikely, but technically possible), then there would be no contest for me. Alas, it really comes down to whether to pay the extra cash for EC2, in return for being able to use Visual Studio, C# and ASP.NET MVC!

It's a really tough call, so I'm going to have to think a little more about it, and maybe do a little more research!