The phrase "cloud computing" has only recently jumped to the forefront of the Information Technology Professional’s consciousness. It can have different meanings depending on who you talk to. We’ll start off this blog by writing about our definition on the phrase (whose meaning at-large may still be evolving).
A ‘black box" is a term often used to describe a discrete object, machine, tool, or other infrastructure component in which the inner workings are either unknown or simply too complex to include in a particular discussion. It usually has a known input, and a predictable output. What happens in between is, well, "magic".
IT professionals will often attempt to represent parts of their infrastructure pictorially. It is not unusual to use a cloud shaped object in the drawing to represent a collection of black boxes. It is from this sort of drawing that the term "Cloud Computing" appears to originate. I’m sure the idea of using a cloud goes back to at least the early days of automated phone switching. Your voice would traverse the "cloud" ( a series of vaguely defined connections ) and emerge at its destination on the other side.
Very often the Internet is represented by a cloud in these sorts of drawings. And to some, "Cloud Computing" is any sort of data processing or application in which part of it runs through the Internet.
Cloud Computing includes Internet applications, but is more than that. It is an IT architecture philosophy. The idea is that any functional component, not just the "Internet" part, in an infrastructure can be a cloud, implemented through a wide variety of specific technical details and in a variety of actual physical locations.
Data storage for example, is traditionally something you’d implement with a local disk attached directly your computer, (or with some other discrete local device). It can now be abstracted as a cloud. You might have a bit of your data stored on a disk over there, some over here, a little on the other coast, wherever. The idea takes you from thinking about "disk" to thinking about "storage". The details about how it is implemented are vague in this model. We hope it is sufficiently fault tolerant, large enough, and fast enough to meet our needs. What matters is that we have storage. The implementation details are left to the professionals working in that cloud.
Web servers, as another example, are traditionally something you’d set up on a specific computer attached to the Internet. These can now be inside a "cloud" as well. You could have dozens of web servers delivering the same content behind a cluster of load balancers.
Application servers, Database Servers, and other pieces of the tiered web service layers can be expanded horizontally, split into smaller pieces and interconnected in a cloud (or layers of clouds).
Word Processors, Spreadsheets, Email programs, and other software once formerly run on your PC, can now actually run in a cloud. The spell checker might execute on a server in Palo Alto, while your fonts are stored on a server in Seattle. All the while you are sitting in a shopping mall in Ohio connected via a wireless data service. Your document itself might be stored on a disk system in New Jersey, but backed up to tape in Florida.
Even CPU, pure processing power, can be part of a cloud, distributed across many actual physical servers, whether through a Grid Computing solution, through load balancers, through highly mobile virtual machines, or distributed across an arbitrary massively parallel infrastructure.
Service Oriented Architecture (SOA) designs lend themselves well towards being implemented in a Cloud infrastructure. SOA is a software development approach where you construct logical models of business processes without becoming overly bogged down in the specifics of the hardware involved in the implementation. SOA focuses on the problem being solved, not which point release of which OS on which particular system used to solve it. Each SOA service could be delivered by a Cloud.
In the early days of computing the basic data processing model was centralized. Later, the idea of distributed computing evolved. Some of your processing might still take place centrally, but the majority of it took place locally, in a workstation or personal computer. Tiered architectures emerged from the distributed computing model, with a suite of specific systems performing specialized tasks working together to deliver a service.
In the Cloud Computing model, you no longer interact with obvious specific systems, but instead clouds of systems and components. Processing can occur locally, remotely, in between, or in several places at once. Storage can be local, remote, or "somewhere out there". Communications can be routed directly, or bounce around on a complex web to get where they need to go.
Designing applications and data processing services for cloud computing allows for the design of highly flexible, efficient, and fault tolerant IT infrastructure components.
Cloud Computing is not Cloudy Computing
The greatest challenge facing Cloud Computing are operational issues.
How do you ensure security? Provide audit trails? Figure out where something broke? Monitor capacity? Or simply wire one up?
How do you identify appropriate resources and map service requests to them?
Ultimately, someone (or something) has to know what is inside each piece of each of the clouds and has to manage them. And that is going to be the focus of this blog. What is inside the cloud? How can we move around in a cloud? What technologies lend themselves to solving those problems which are modeled with clouds in mind?
How do we keep our head in the cloud and our feet on the ground?