The cluster consists of a number of nodes connected by a high speed LAN. As we mentioned in Section 4, there are three main components in the cluster - dispatcher, distributor and server. The interface design for these components is such that any cluster node can contain one or more of these components. This implies that any of the cluster configurations of Figure 5, Figure 6 or Figure 7 can be realized by placing the components appropriately on the cluster nodes.
The communication between components on different cluster nodes is realized using persistent TCP control connections that are created during the cluster initialization. A control connection, thus, exists between any two nodes of the cluster and multiplexes the messages exchanged between any two components. These connections also serve to detect node failures.
Owing to the superior performance afforded by the TCP handoff protocol as compared to splicing, our prototype distributor employs the handoff protocol. The server component consists of the user-level server application and an enhanced network protocol stack in the kernel capable of accepting connections using the handoff protocol. The server application can be any off-the-shelf web server (e.g., Apache [3], Zeus [30]) and requires no change for operation in the cluster. The distributor is also implemented as an enhanced protocol stack, and resides wholly in the kernel. Similarly, the dispatcher component also resides in the kernel for efficiency. The kernel changes required to implement the cluster components are added using a loadable kernel module for the FreeBSD-2.2.6 OS.
Our prototype implementation supports both HTTP/1.0 as well as HTTP/1.1 persistent connections (P-HTTP [24]). Support for P-HTTP is similar to that described in our earlier work [6]. As this paper focuses on scalability issues in the cluster, we only consider HTTP/1.0 connections in the experimental results presented in this paper.
A layer-4 switch is used that receives all requests from clients and forwards them to the distributors. With the switch, the distributed nature of the cluster becomes completely transparent to the clients. We next describe the implementation of this switch.