Vivek S. Pai, Peter Druschel, Willy Zwaenepoel
Department of Computer Science
We are building self-scaling Internet servers with commodity hardware and modular software components, using a novel system architecture designed to support scalable and flexible network servers. Three novel ideas make our proposed network server architecture unique, practical and efficient:
Our architecture enables modular server software components. This implies, for instance, that programs generating dynamic content run in isolation from the server and from each other. Besides the obvious advantages of reliability and maintainability, a modular software architecture allows us to adapt quickly to the frequent changes in the Internet environment, driven by the need for new features or improved performance. Current or proposed network server architectures often abandon modularity, because poor performance of the interprocess communication system leads to unacceptable throughput. Safe languages, such as Java or Perl, provide only a partial solution to this problem, because content providers often want to use existing applications, almost invariably written in unsafe languages.
High-volume Internet servers are based either on costly, dedicated supercomputers (e.g., the official webserver for the Atlanta Olympic Games), or they use clusters of independent workstation/PC servers. Unlike supercomputers, cluster servers are able to ride the unique price/performance curve driven by the high-volume workstation/PC market. With cluster servers, incoming requests are distributed to server nodes without regard for a request's target content. This naive distribution of requests and the lack of integration among the nodes of a cluster limit performance and scalability. Typically, the entire server database must be mirrored at each node, and the effective size of the server cache cannot exceed the size of each node's main memory. Our proposed architecture addresses these problems.
Current cluster servers require substantial performance-related configuration and administration. Distributed IO-Lite gives each server node transparent access to the database, irrespective of the physical location of the data and the degree of replication. An adaptive load control system exploits this flexibility by dynamically adjusting the degree of data replication in both primary and secondary storage, based on runtime feedback. As a result, performance-related tuning is fully automated. System capacity can be scaled simply by adding hardware.