When cloud computing emerged, it spawned a healthy debate regarding its definition. Like the word "irony" famously immortalized in the film "Reality Bites," the term "cloud" was immediately familiar and undefinable for most technologists. "You'll know it when you see it."
Roughly three and a half years later, though, the community has experimented with cloud computing enough to, more or less, extinguish the debate on its definition. One rarely hears or reads about either a definition of cloud computing or an argument over conflicting definitions of cloud computing. At the risk of re-igniting this debate, I'll offer my thoughts on a working definition at this point in the development of cloud computing as a technology.
Before doing so, however, I believe a discussion of cloud principles will help explain the specific definition I offer. The high-level vision for cloud computing is that it "flattens" the computational and storage abstractions in a way analogous to the way in which the Internet network protocols "flatten" the network.
Smoothing Out the Bumps
Harkening back to the early days of email, it was necessary to specify a route for each individual email in the address as a series of machine "hops." Computers were connected via phone lines and made periodic calls to each other. One had to know the path from sender to receiver machine to send the email and, if several paths were available, which path was best or most reliable (often not the same).
This need for a connectivity map, unsurprisingly, created all sorts of impediments to progress. Imagine, for example, if the world wide web required users to know the path that packets must take to reach each web site. It couldn't function as it does today. Networking technology evolved, however, and the Internet network protocols defined a way for each machine to have an address that was independent of its location or the location of its neighbors. In this new world, emails were sent to an address and the network (through a scalable service called "routing") would determine the path from sender to receiver.
To a user, then, the network went from a place where machines each lived in a neighborhood characterized by neighbor lists, dial-up periodicity, incoming bandwidth, outgoing bandwidth, etc. to a "flat" network in which each machine is represented (to the user) by a single identifier (its address). By flattening the communication abstraction, all sorts of new technologies, including "The Internet" (capital "T", capital "I") became possible.
Conceptually, cloud computing is founded on the same principle. Computational capabilities are represented by services that, more or less, live in a structureless space of services and it is the job of the cloud to manage the structure that actually exists behind this abstraction.
In other words, The Cloud is flat.
The Cloud: an Operational Definition
This description, however stylized, does not offer much in the way of operational definition. An IT manager, for example, can't use it to understand easily whether a particular technology or combination of technologies will provide the specific cost-saving and ease-of-use benefits that are attributed to cloud computing. For this type of definition, we need to become a bit more technical.
Cloud computing is the progammatic provisioning of services to a user community whose requests are scaling dynamically through a transactional and asynchronous network-facing interface.
This definition reflects the state of play in terms of cloud computing systems today from an operational perspective. To begin with, clouds provide services to users in a way that can be accessed through applications or software user tools. Thus the model is immediately a service model in which users appeal to a service venue for computational service. At the same time, clouds are designed (for cost reasons) to support simultaneous user communities that fluctuate in size dynamically. The user experience is also transactional in that access is through a set of discrete requests, each of which is either accepted or refused. It is asynchronous for reasons of scale. Each request is accepted or rejected transactionally, but the result of an accepted request may be realized at a point in time (hopefully as soon as possible) after the transaction. Finally, the interface is network-facing, meaning that the service venue interacts with users via requests and responses across a network.
Notice that this definition reflects the origins of cloud computing in e-commerce. The first public clouds were adaptations of existing e-commerce venues to service provisioning. Notice also that this e-commerce-based model results in many of the benefits that users ascribe to cloud computing such as self-service, scalability, cost-control, and dynamic response to load fluctuations.
To Infinity and Beyond…
Finally, part of the reason that the original discussions of a definition for cloud computing sparked such a heated debate was the fear that an agreement (even a tacit one) would forever restrict the technology and its users to a limited range of capabilities. The history of other computer technological innovations, however, does not lend credence to this fear. Indeed, the definition of the term "computer" itself has changed since the inception of the technology with little impact on progress. Put another way, a definition of cloud at the present moment does not preclude an expansion or alteration of the definition in the future — an operational definition today does not bring about "lock in."
Cloud computing is certainly at the beginning of its technological lifetime making it an exciting time to be working with and on clouds and their applications. However, with equal certainty the best cloud ideas and technologies are yet to come.