Clustering has been an important tool in the IT architect's tool belt for many years now. Put a group of servers or storage together on a LAN, add some well-planned redundancy, and top it off with a cluster controller, and you've increased your fault tolerance enormously. Clustering is at the heart of RAID technology, application server clusters, and database clusters -- all examples of what we call high-availability clusters.
Take the notion of clustering one step further and you can build single system images. The idea of a single system image is to group physical servers into a high-availability cluster and abstract them so that the cluster appears to be a single server. Single system images are good for certain high-performance computing tasks, and also underlie Storage Area Networks (SANs).
Clustering technology, including high-performance single system images, solve a wide range of problems, but they have little if anything to do with Cloud Computing. In fact, the Cloud takes a diametrically opposite approach, because Cloud environments are inherently partition tolerant, while clusters are partition intolerant.
Partition tolerance means that communication between nodes can drop and the overall application keeps working, which is certainly not the case with clusters. Clustering depends upon continuous communication among nodes in the cluster, which is why you put them on high-speed LANs. However, not all high-performance computing tasks require continuous communication among nodes -- or even any communication at all in some cases. This fact gave rise to an alternative to clustering called grid computing, a way of building massively parallel, partition-tolerant collections of servers. The 1990s SETI at Home alien-searching screen saver was perhaps the most familiar example of grid computing.
What grid computing lacks, however, is virtualization. With virtualization, we create a number of virtual servers (virtual machines, or VMs) on each physical server -- the opposite of single system images, which group physical servers into a virtual server. Add virtualization to grid computing, and you end up with an elastic collection of partition-tolerant VMs. Now we're talking Cloud.
As a result, applications that require clustering to work properly, like enterprise RDBMSs, are inherently Cloud-unfriendly. Don't let the vendors fool you. If they're talking about clusters in the Cloud, either they don't know what the Cloud is, or they're simply pulling the wool over your eyes.
You've been warned!
Cloud, virtualization, cluster, clustering