Clustered server architecture is increasingly being viewed as a successful and cost-effective approach to building a high-performance Web server. Existing server-clustering schemes have typically concentrated on the following issues: scalability, high availability, and user transparency. In this paper, we argue that the design goals of the Web server cluster should include adaptability, fault tolerance, and high manageability. In the presence of the Internet's highly unpredictable workload, the server system should be self-adapting to changing circumstances. We address this problem by building a Web server on a cluster of non-dedicated workstations. Such a server can easily recruit non-dedicated nodes dynamically in response to load bursts. Based on such a scheme, we designed and implemented an innovative approach that enables an ongoing request to be smoothly migrated to another node either in response to a node failure or overload. We also designed and implemented a management system that enables the Web site manager to manage and maintain the distributed server as a single large system.