In general, I try to keep the content of this blog away from my work. I don't do
that because it would get me in trouble, but rather because I spend enough time on work, and blogging is my hobby. But sometimes there's an overlap.
One thing that's come up in a lot of conversations and a lot of emails it the idea of cloud computing. A lot of people are interested in it, but they're not really sure of what it is, or what it means.
So what do we mean when we talk about "cloud computing"? What's the cloud? How's it different from good old-fashioned client/server computing?
The idea of cloud computing is that there's a world of computers sitting in data centers, scattered around the world. The programs that you run, the data that you store, are somewhere out there - but you don't know where, and more importantly, you don't care where.
A simple example of this idea: I started writing this blog on Blogger. Blogger is a piece of
software run by Google on (probably) thousands of computers in Google's data centers. I don't
know where the server running the old blog is; I don't know where the data for it is stored. Blogger is "in the cloud".
That kind of thing is the basic point of cloud computing. Cloud computing is built
around the idea of resources: to run some program, to perform some task,
you need some set of resources. Resources are things like processing time, network
bandwidth, disk storage, or memory. As a user of the cloud, you don't
need to know or care where the resources are. You just know what you need,
and you buy that quantity of resources from whoever can provide it to you most
Cloud-based software is similar to client-server computing in many ways.
Both are based on the idea that you don't really run programs on your own computer. Your
computer provides a window into an application, but it doesn't run the application itself.
Instead of running the program on your computer, all you do on your own computer is
run some kind of user interface. The real program is running somewhere else,
on a computer called a server. You use the server because for some reason, the resources
necessary to run the program aren't available on your local computer - it's cheaper, faster,
or more convenient to run the program somewhere else, where the necessary resources
are easy to obtain.
The big difference is in what you know: in traditional client-server systems, you had a
specific computer that was your server, and that's where your stuff was running. The computer may
not have been sitting on your desk in front of you, but you knew where it was. For example, when I
was in college, one of the first big computers I used was a Vax 11/780, named nicknamed "Gold". Gold lived in the Rutgers university computing lab in Hill Center. I used Gold pretty much daily for at least a year before I actually got to see it. The data center had at least 30 other computers - several DEC 20s, a couple of Pyramids, an S/390, and a bunch of Suns. But
of those machines, I specifically used Gold. Every program that I wrote, I wrote specifically
to run on Gold, and that's the only place that I could run it.
In the cloud, you don't have a specific server that you use. You have computing resources -
that is, someone is renting you a certain about of computation on some collection of computers
somewhere. You don't know where they are; you don't know what kind of computers they are. You
could have 2 massive machines with 32 processors each, and 64 gigabytes of memory; or they could
be 64 dinky little single-processor machines with 2 gigabytes of memory. The computers where you
run your program could have great big disks of their own; or they could be diskless machines
accessing storage on dedicated storage servers. To you, as a user of the cloud, that doesn't
matter. You've got the resources you pay for, and where they are doesn't matter, so long
as you get what you need.
The cloud metaphor is actually a good one. A cloud is a huge collection of tiny droplets of
water. Some of those droplets will fall on my yard, providing the trees and bushes with water.
Some will fall onto land where it will run off into the reservoir which my drinking water comes
from. Clouds grow from evaporated water, which comes from all over the place. When it
comes to clouds, what I care about is that enough water falls on my yard to keep
the plants alive, and that enough water winds up in my reservoir so that I have enough
to drink. I don't care which cloud drops water on my yard. I don't care
where on earth that water came from. To me, it's all just water - every droplet is
pretty much exactly the same, and I can't tell the difference. So long as I get enough,
You can think of the various data centers around the world, where companies have swarms of computers as clouds. Google, Amazon, Microsoft, IBM, Yahoo, and others all have thousands of machines connected to networks, running all sorts of software. Each of those centers is a cloud, and each processor, each disk drive, is a droplet of water in that cloud. In the cloud
world, when you write a program, you don't know what computer it's going to run on. You don't know where the disks that store the data are. And you don't need to care. You just need to know
how many droplets you need.