Dana and John are Division Scientists at BBN Technologies. They can be contacted at [email protected] and [email protected], respectively.

Normally, clouds on the horizon are harbingers of bad weather. Not this time, however. Developers are likely to welcome the advent of cloud computing with open monitors, because cloud computing quite simply is a way for an application creator to abstract away some of the more challenging aspects of building rich, scalable Internet applications (RIAs). This includes business functionality such as purchase management, services such as databases and security, and critical nonfunctional requirements such as scalability and predictable performance.

Cloud computing offers virtually unlimited, on-demand computing resources. Your applications now live in a new platform -- a computing cloud. In the cloud, your applications take advantage of the seemingly limitless processor cycles, memory storage, and network bandwidth along with extensive software capabilities. Your applications only pay for what they use. Beyond basic computing resources, cloud computing offers a range of application services that form a new platform -- an Internet operating system -- suitable for cost-effective, dynamic, and Internet-scale solutions. An Internet operating system offers the scale and services required to meet the requirements of a dynamic, global, software application.

The basic idea behind cloud computing is similar to how we currently pay for electricity -- you plug it in, it uses electricity, you pay for the electricity it uses. However, electricity is a straightforward commodity, and an Internet operating system is not. Vendors may choose to offer different grades of electricity, different levels of service, and the like. Currently there are no cloud standards that would let you take your application and plug it into a competing cloud offering. Additionally, the nascent nature of cloud computing encourages a level of experimentation by the various vendors to find the right balance of services, performance, and cost. This produces various implementations that offer different types of resources and services and significant changes. But don't let these challenges stop you -- there can be much to gain, even at this early entry point. When was the last time you could instantly grab dozens of computers, play with them, and then discard them for less than one dollar (or even for free)?

Elasticity is the cloud's true virtue. When a cloud-deployed application becomes busy, it merely acquires more resources. Correspondingly, when demand wanes, it drops the extra resources. This is a dramatic difference from the traditional approach. Traditionally, applications acquired the resources necessary to handle the peak. When demand was less than the peak, valuable resources sat idle. When demand exceeded the peak, the application failed, sometimes in ugly ways. We have all experienced the fun of receiving a timeout on a busy site, or programming to handle such situations. The elasticity offers a new, low-cost way to scale your application both up and down while paying for only what the application uses. This is especially beneficial to bursty-types of applications, such as sport sites or fledgling startups. The elasticity also enables new testing and demonstration scenarios. Imagine your demonstration, coolly employing the cloud to simulate millions of users. Imagine test scenarios that stretch the most determined tester. Franz used the cloud to test AllegroGraph, its triple store product. This was done in two days at a cost of less than $200. The promise of cloud computing is all that and more.

In addition to elasticity, cloud computing offers direct connections to valuable software. Clouds can hold more than just your software. They can hold other software including services such as databases but also third-party software. The direct connection overcomes the performance and latency issues that trouble distributed web services. This takes Web 2.0 mashup to a new, lower level where you can interact directly with underlying support abstractions, not simply exposed application layer APIs.

Getting Into the Cloud

Currently, you can create cloud applications through two major implementations:

Amazon Web Services (AWS).

Google Application Engine (GAE).

Let's look at an example in each paradigm. In both cases, we'll note the types of resources your application can acquire, how your application interfaces with the resources, and related resource services your application can use. We also note the costs and risks.

First and foremost, the number one caveat you must consider at the current level of maturity of both approaches is that cloud implementations offer some great benefits, but also risks. Your application depends on the network for the user, and the supporting network infrastructure offered by the provider. If users can't get to the cloud, your application is out of luck. Second, service-level agreements are not always present, so think carefully regarding mission-critical applications. Also, security is always a concern. Additionally, note that AWS and GAE are vastly different in the development and deployment models. The cloud offerings are dramatically different; you will have to use different development styles for each. Finally, examine your support options (what happens when the cloud goes away?).