Application vs. OS Clustering

I recently had the opportunity to discuss computer clustering with a colleague of mine. I decided to post my take on things in case it might be helpful to others.

Computer clustering is a deep subject. There are many facets to how to cluster computers and/or applications together. Wikipedia has a nice article on clustering. I’m no expert, but I’m going to describe my simplistic view of hardware/OS level clustering vs. application clustering and how they fit together.

The ultimate computer cluster would be a group of computers working together to seamlessly provide services and appear as one computer. This cluster would make its services available to applications transparently. This means that an application written to run on a single computer, would see no difference in running on the cluster. In addition, it would get all the benefits of being on the cluster without impacting its operation at all – scalability, high availability, memory management, etc. To my knowledge, this type of cluster does not exist.

Hardware and OS level clustering allows multiple computers to work together for a purpose, but the computers generally don’t appear to applications as 1 big computer. When the OS makes this possible, special programming is usually required to make an application take advantage of the clustered OS services. Most of the time, OS clusters are geared toward providing high-availability (HA) for fault tolerance rather than seamless scalability of applications running on the cluster (HPC – high performance computing). Windows 2003 server clustering and SQL Server clusters are examples of clusters that are geared toward HA rather than HPC.

Grid computing has ushered in a new set of technologies and patterns for trying to achieve the ultimate computing cluster. Grid computing does a good job of providing HA and HPC for applications running on the grid. The standards specify a pretty flexible environment with scheduling and accounting facilities that make management of applications much easier. Grid computing tries to make computing resources a commodity that can just be doled out as needed to run applications. However, for applications to take full advantage of grid computing, they still must incorporate special programming. This may change in the future as advances in grid frameworks and operating systems emerge. Examples of grid computing is the Amazon EC2 for computing and Amazon S3 storage grid.

Application level clustering is when an application is designed so that its components can be distributed across multiple machines and the application can identify and manage those components to cluster itself. This usually involves distributing components with specific capabilities to nodes in a server farm and having some controller components that identify the worker components, monitor their availability, and delegate incoming requests. (These are sometimes called dispatchers.) Applications that cluster themselves don’t need an underlying hardware/OS clustering solution since they take care of their own clustering services. Further, there’s no need to have computers in the cluster be homogeneous since the cluster is not dependent upon synchronization at the machine or OS level. Application clusters can provide HA as well as HPC. Examples of application clusters are Oracle RAC and FAST ESP.

Again, this is Tom’s view of clustering and probably contains errors and omissions. My simple mind summarizes and simplifies things it takes in. So, you should do your own research if you seek the ultimate in accuracy and reliability of this information! :-)

1 comment:

Mukuntaraj K said...

As by "separation of concerns", OS clustering should provide HA for OS services and Application clustering should provide both HA and scalability for application features.
In some environments they try to use the OS cluster+ load balancer to replace applications server clustering. That is wrong. Application cluster has more features specific to the application server.