The Cloud's Spectrum

While it’s too early to count anyone out, it seems safe to say that Google, Amazon, and Microsoft are the current “big three” of utility computing. All three offer access to vast computing resources with pay-as-you-go pricing — but that’s where the similarities end.

Google’s AppEngine offers worry-free scalability for a very narrow (but useful) set of problems. Your application must be driven strictly by requests to public-facing URLs. The application must render responses in a few seconds; compute-intensive tasks are not an option. AppEngine offers no work-queue and no asynchronous APIs; background processing is therefore not possible. As your application’s load increases, Google automatically allocates new CPUs to the task. This means that scalability is fully transparent to the developer.

AppEngine bottom line: If your application is a read-mostly CRUD application, Google’s AppEngine can scale you to hundreds of queries per second with little or no engineering effort on your part… and little or no financial outlay. Oh, and you’d better be happy with Python.

Amazon’s Web Services lie at the opposite end of the spectrum. Amazon has “componentized” the infrastructure that sits behind most scalable web sites. From block devices to message queues to full virtual PC instances, you can choose just the parts you need to satisfy your application’s hardware, networking, and storage requirements. Of course, all of this flexibility comes at the cost of making you the system administrator. And unlike AppEngine, you don’t get scalability for free: if you need more machines to scale your application, you’ll need to request them yourself and your code will have to determine how best to utilize the new resources.

AWS bottom line: Amazon offers maximal flexibility and is ideal if your task doesn’t hit another cloud provider’s sweet spot. If you have specialized needs, are capable of hand-rolling scalable code, or are happy acting as a system administrator, AWS is your ticket to utility computing glory.

Microsoft’s Azure, newly announced, sits somewhere between Google and Amazon. Azure allows you to deploy two distinct types of code into the data center. Web Roles are request-driven applications whose restrictions look very similar to AppEngine’s restrictions. Worker Roles are arbitrary, and potentially long-running, pieces of code. Microsoft provides several mechanisms for web and worker roles to communicate and share state, including message queues, a DHT-like datastore similar to AppEngine’s, and a quasi-relational datastore based on a variant of SQL Server. Like AppEngine, web roles can scale transparently if desired, but the developer also has the option of manual control. Worker roles are of course fully managed by the developer.

Azure bottom line: It’s too soon to tell, but if you want to build a compute-intensive application or need background processing — and you don’t want to play system administrator — Azure may be the ideal choice. If you choose to use Visual Studio for your development, Azure also delivers the best overall debug and deploy experience of the three services. At the moment, you must develop in a .NET language; C# appears to be preferred.