Replacing a single server with a cluster of servers is often a good technique for scaling applications to support greater number of clients. Clustering multiple servers implies that multiple instances act in unison, serving external clients as a single logical entity. Functionality is typically replicated across the clustered servers, and members of a cluster often share state information.
Clustering efforts could involve either vertical clustering or horizontal clustering. In vertical clustering, multiple instances of a software server are installed on the same piece of hardware. In contrast to this, in horizontal clustering multiple instances of a software server are installed on different pieces of hardware.
Vertical clustering helps optimize hardware's CPU and memory usage. It does not provide fallback options on a hardware failure though. Horizontal clustering, on the other hand, provides a failover option among servers, in addition to providing scaling capabilities.
Besides software clustering, one also has the choice of hardware clustering, in which case a load balancer acts as the front end for calls to the clustered hardware infrastructure. Typically, a load balancer optimizes the way requests from clients are distributed among the clustered members. Once a load balancer associates a client to a cluster member, it sends all subsequent requests from that client to the same cluster member.
Software and hardware clustering can be combined. In this section, ...