Obviously I think about Cloud Computing a substantial amount of my waking hours. Actually, I have for quite a while in one form or another. Personally, I'm very glad I finally have a name for these thoughts. I decided to review for my own sake, I have been asking myself some basic questions again. Good to help think things through.
What is Computing?
What is a Computer?
What is the Cloud?
What is a Cloud Computer?
What is Cloud Computing?
What is computer software?
What is a cloud computer application?
The seem like simple questions. But, they can create quite a lot of debate. My goal in this post isn't necessarily to answer all those questions explicitly, but to discuss what the act of asking myself those questions made me think.
It must be that cloud Computing happens on a Cloud Computer. But, what is a Cloud Computer? It's probably best to start with some kind of definition of what is a computer. "A computer is a machine that manipulates data according to a list of instructions."2 The manipulation of that data, programming, is essentially what we call computing. "Computing is usually defined like the activity of using and developing computer technology, computer hardware and software."1 Without getting too fancy then, Cloud Computing might be considered the activity of using and developing computer technology, computer hardware, and software on a Cloud Computer.
A Computer is:
- Processing (CPU) - A Processor
- Transient Storage (RAM) - Sticks of Memory
- Persistent Storage (Disk) - Hard Disks
- Message Passing (Networking) - System Buses, etc.
- Input - Data
- Output -Data
A Cloud Computer is:
- Processing (CPU) - Compute Node (a whole computer virtual or physical)
- Transient Storage (RAM) - Distributed Memory Hash (like Memcached, Tangasol, etc)
- Persistent Storage (Disk) - Distributed Storage Node perhaps
- Message Passing - Ethernet, Internet, etc.
- Input - Data
- Output - Data
The cloud computer is not just hardware anymore. The individual pieces have been "virtualized." It is not bound to a single machine. It has become something more. I remember following a few Single System Image (SSI) projects like OpenMosix and OpenSSI for quite some time; both mothballed more or less I'd say. I'm often reminded of those when thinking about Cloud Computing. A cloud computer is essentially a virtual computer presented as software. There are Companies and individuals that are developing software, hardware, and services for Cloud Computers. Those people are developing cloud computing applications, systems, and more. There is a long history of similar type of technology that was not called cloud computing to which we have to pay homage. Cloud Computing has become the term we use for the mashup of techniques developed over decades. They have been called HPC, Utility Computing, Cluster Computing, Parallel Processing, Parallel computing, Grid Computing, SSI, Super Computing, The Internet, and much more.
There is a big difference between virtualizing a single computer and building a cloud computer. Although virtualization is a very important piece to be sure. Cloud Computers and the Cloud Computing Applications that run on them have a common set of two characteristics that I have noticed. They are, or at least aspire to be, elastic and also they aspire to be or are highly available. Elasticity3 is the ability to increase or decrease capacity on-demand or automatically. Being Highly Available3 implies explicitly that the the loss of any one software or hardware component of the systems overall architecture will not halt or severely degrade the service in question; like a CRM SaaS application running on a Cloud Computer. These problems of elasticity and availability are very hard problems to solve. No one is doing this perfectly today. But, I think a true Cloud Computer embodies those features probably. Not even Google, Amazon, or any others are 100% getting this right yet. But, I do believe we are getting very close and progressing very fast. Right now, writing applications for Cloud Computers is a very new thing and most applications are definitely not ready; although some are.
While at this point, it almost seems obvious to me. The act of Cloud Computing while made up of many things3 (using Cloud Computers) seems to be truly about just a couple of things. One, the freeing of computation itself from the confines of the single computer. Two, the democratization of large scale compute power via utility pricing models that effectively bring vast quantities of computing power within the reach of large numbers of people that could not access it before. Until very recently only large sovereign governments had access to the kind of compute power available today for relatively very little money. And it can be had on-demand. You can now rent massive capacity by discreet units of time and spin entire "data centers" up in minutes or days for bringing your idea to life, crunching your calculation in minutes instead of decades, or giving your organization a competitive advantage in your field by shifting resources effectively. That is a paradigm shift if ever there was one!
These are exciting times and in my mind, that makes Cloud Computers and Cloud Computing pretty important concept.
Oh, one last question. Does anyone happen to know the current non-biological computing capacity of the Solar System?
A Few Resources:
- WikiPedia - http://en.wikipedia.org/wiki/Computing
- WikiPedia - http://en.wikipedia.org/wiki/Computer
- Get Your Head in the Clouds - http://www.productionscale.com/home/2008/4/24/cloud-computing-get-your-head-in-the-clouds.html
- Cloud Comptuing Ectropy and Other Thoughts... - http://www.productionscale.com/home/2008/7/13/cloud-computing-ectropy-and-other-thoughts-for-july-2008.html
Some Credits:
I had some great talks with many of my new colleagues at Joyent, some new customers, folks at my last place of work; SolutionSet. Awesome!