Clustering: The Basic Building Block
By Application Grid Product Marketing on Mar 31, 2009
The runtime "container" is the foundational element in middleware. In the Java world the container is most commonly an application server server such as Oracle WebLogic Server; in the C/C++/COBOL world it is a transaction processing monitor (TPM) such as Oracle Tuxedo.
There are two broad categories of functionality provided by a container: the functions invoked explicitly by the contained code, and the functions carried out irrespective of the contained code. The first category includes the application programming interfaces (APIs) implemented by the container--in the case of Java application servers these are the Java Enterprise Edition APIs such those supporting transactions, Web services, etc. The second category includes management, availability, and scaling capabilities that are independent of the contained code.
The first category, the APIs, are largely about developer productivity (developers focus on higher level business logic rather than constantly re-inventing/rewriting low-level code) reliability (API functionality implemented in the container is mature and well-tested) and ease of integration (interfaces are standardized). The second category of container functions is where "enterpris-class" is manifested: this is where a basic piece of code becomes manageable, scalable, highly available, and high-performance.
The fundamental mechanism that containers implement to achieve manageable and reliable performance at scale is clustering. Clustering is the ability to have multiple instances of the container ("nodes") be grouped together and contain identical copies of code and/or data. The nodes may each run on a different physical server or in some more complex configuration.
A cluster can be used most simply as a high availability mechanism in which all nodes in the cluster are identical, and in the event that one node fails, its workload is picked up and carried on by another node in the cluster.
A more sophisticated use of container clustering is for "scaling out". In this case the cluster has nodes containing identical copies of the application code but workload is "load balanced" across the nodes. Each node will be serving different users or sessions or subsets of transaction work and thus have different data or "state". (Scaling out means to increase the capacity of an application by adding more nodes to a cluster, as opposed to "scaling up", which means to add capacity by running the application on a more powerful physical server).
The ability to distribute work across nodes in a cluster is the the basic enabler for containers to be assembled in a grid architecture and form application grid. The particular qualities of a container's clustering mechanism--how quickly and dynamically nodes can be added to and removed from clusters, how automatic such adjustment can be made, etc.--strongly determine how effective a particular application grid architecture can be made.