Cloud computing is one of the most hyped technology concepts in recent memory, and, like many buzzwords, the term "cloud" is overloaded and overused. A while back Ars ran an article attempting to clear some of the confusion by reviewing the cloud's hardware underpinnings and giving it a proper definition, and in this article I'll flesh out that picture on the software side by offering a brief tour of the cloud platform options available to development teams today. I'll also discuss these options' key strengths and weaknesses, and I'll conclude with some thoughts about the kinds of advances we can expect in the near term. In all, though, it's important to keep in mind that what's presented here is just a snapshot. The cloud is evolving very rapidly—critical features that seem to be missing today may be standard a year from now.

Before I begin, it's worth noting one of the key reasons for the confusion that surrounds cloud computing. Unlike most hot tech trends that attain buzzword status, the aspects of the cloud that make it a truly new form of client-server (e.g., rapid scalability from a few resource units to tens of thousands, metered usage models, the ability to access resources from any Internet-connected device, low barriers to client entry, etc.) also make it impossible, at least from a developer's perspective, to pin down into traditional "enterprise," "small to medium business," or "consumer" boxes that the IT world traditionally thinks in terms of. Enterprises, SMBs, and tiny startups, and lone coders all run their code on the cloud platforms described below. It's true that each category of user faces different parameters and constraints when deciding how and where to use cloud services, and I'll reference a few of the issues that enterprise users face in the article below. But just because the basic perspective of this article is that of enterprise IT, much of the material has relevance to non-enterprise users, as well.

The choices

Roughly speaking, developers face four main choices for hosting a Web application:

Buy servers and rent colocation space for them, a model

I'll refer to as do-it-yourself "DIY" Traditional hosting services that provide

leased servers or fractions thereof Cloud-based Infrastructure as a

Service (IaaS) platforms such as Amazon Web Services Platform as a

Service (PaaS) providers such as Google's App Engine or Saleforce.com's

Force.com

(Again, see our prior article for definitions of these terms.)

Many in the industry already have strong notions about which choice is best for their applications, often a result of one or two overriding concerns, such as management overhead, cost, security, or control of sensitive data. Cost in particular tends to incite expansive claims from both pro- and anti-cloud camps, while the truth is definitely in the middle: cloud environments can be expensive, but they can also lead to huge cost savings, depending on the specifics of a situation. When considering the options below, you should do the math for your project rather than accept someone else's fuzzy accounting.

Superficially, each step up the ladder from DIY to PaaS primarily involves lowering fixed costs (both time and dollars) in exchange for reduced control over the environment, and, potentially, greater long-term operating costs.

The DIY approach requires accurately estimating server and network requirements, purchasing hardware, contracting data center space, and operating the entire server and network environment—a sizable job, especially if there is uncertainty about the application's ultimate requirements. For very small teams, these requirements make DIY prohibitive, but if the resources are available, many IT managers believe they can achieve the highest levels of efficiency, security, and/or reliability with handcrafted infrastructure. How often this is actually true is a matter of debate, but the trend is clear: as competition among cloud infrastructure providers increases, cloud services will be increasingly able to compete convincingly.

(Some have argued that DIY creates maximal job security for IT professionals, pre-disposing some to this approach against the best interest of their employers. I will take no position on the frequency of such a phenomenon.)

Traditional hosting

The "traditional" hosting category spans a vast range of offerings, from cheap static website hosting to managed custom datacenters. The line between some of these offerings and true cloud services is sometimes blurred, with some companies (such as Rackspace) offering both.

Most teams can find what they need in the range between DIY and traditional, but there are certain drawbacks: the huge number of competing providers with wildly varying prices, capacities, and quality levels makes selecting a vendor a real challenge. Once a vendor is selected, there are barriers to change: new services can take time to bring online, and favorable pricing is often only available for longer lease terms. Scale-up cost is also a concern. A typical pricing model that charges for a suite of services with a high monthly per-server price makes sense at a small scale, but such a model becomes very expensive very fast as servers are added. All that said, with all the hype around cloud services, it can be easy to dismiss other hosting services out of hand; if your application has specialized infrastructure needs, there are still many services available which aren't (yet) offered by the major cloud providers.

Infrastructure as a Service

So much for the DIY and "traditional" hosting options; we're here to talk about cloud computing services. The two basic flavors of cloud computing that are interesting to developers are IaaS and PaaS, and each has its individual strengths and weaknesses.

IaaS services offer building blocks: computers and storage, and possibly other services such as monitoring, load balancing, etc., as discrete units. In many ways, this resembles the feature set of traditional hosting shops, a similarity which has led many in the industry to decry cloud services as little more than a marketing fad. The unwary sometimes approach IaaS services such as Amazon's Web Services expecting to avoid system-maintenance work altogether, only to find that higher-level infrastructure tasks (i.e. monitoring) are not only still essential, but are made more difficult by the fluid nature of the cloud environment.

However, cloud IaaS has some key distinct properties. Capacity is available quickly on an as-needed basis; services are sold a la carte, and are billed based on measured usage rather than at a standard periodic rate; resources are anonymous and fungible, and are often shared and moved around behind the scenes; management is heavily automated. Beyond that, there's little magic here, as the basic building blocks are familiar ones. But the on-demand nature of cloud systems makes them far easier than traditional hosting for developers to leverage: developers can start and stop using services as required with the confidence of easy availability and costs based only on what they use. For a system currently under development, this is a huge flexibility advantage over traditional hosting setups. For a system with large, variable-size data-processing workloads that previously depended on an in-house computing grid, it's a game changer.

So, let's take a look at the major IaaS offerings available today, from a developer's perspective:

Amazon Web Services: The main player in this space in unquestionably Amazon, who got the cloud IaaS ball rolling when it introduced its Simple Storage Service (S3) and Elastic Computing Cloud (EC2) way back in 2006. EC2 combined with S3 and the Elastic Block Store (EBS) service now offer a complete and highly configurable server environment that allows teams to build pretty much anything they want on Amazon's infrastructure.

In addition to the basic infrastructure, Amazon offers a diverse array of secondary tools for structured data storage, load balancing, data processing, load monitoring, e-commerce, VPN connectivity, a CDN, and even "Human Intelligence Tasks" via the Mechanical Turk service, all of which customers are free to use or ignore as they see fit. When developers think of "cloud computing," this is often the benchmark they think of, and rightly so—thus far, Amazon has been reasonably reliable, has expanded their offerings on a regular basis, and has kept prices moving downwards. Cross-platform libraries and tools for interacting with the AWS APIs are readily available and fairly mature. Still, not all of Amazon's services are fully baked at this time: SimpleDB, for example, has serious performance and semantic limitations that disqualify it from most real-world database workloads (see my upcoming article on structured storage in the cloud for more on this topic). And today, much more than a year ago, there are competitors nipping at Amazon's heels. If you're about to roll out to EC2, pause for a moment to consider the alternatives.

In second place behind Amazon is Rackspace, a large provider of managed server hosting before the rise of cloud computing. Rackspace has pivoted to offer cloud IaaS services alongside its traditional offerings. It offers CloudServers, similar in many ways to EC2 but cost-competitive and packaged with simpler state-management capabilities, and CloudFiles, an S3 clone with a potentially cheaper pricing structure.

Also in the field is Joyent, which offers virtual servers, databases, and storage for fixed monthly rates, rather than metered usage. The company targets a premium market position with somewhat higher base costs coupled with nominally higher performance-per-dollar and some specialized tools and services.

Microsoft has also recently bellowed a loud "me too!" and joined the cloud IaaS fray with Windows Azure, a hosting service for .NET applications and SQL databases. The primary focus seems to be on enterprise and network-enabled desktop applications, and Azure includes AppFabric, a robust communications system to help plumb connections to and from cloud resources. The jury is very much still out on this one from a developer's perspective, but as always, Microsoft is playing a long game and Azure is already starting to figure into the strategy for their other products.

Finally, it's worth noting that the IaaS ecosystem has spawned a number of add-on service providers such as Rightscale and Hyperic, which provide hosted management tools for IaaS environments and fill in some of the gaps in the base offerings. These tools are definitely worth a look for teams which have chosen to build directly on IaaS.