Smart Clients: A Framework For Building Scalable Services

Slow response times, network congestion, and ``hot sites of the day'' being overrun by thousands to millions of requests per day are fairly commonplace on the Web today. These problems will only worsen as the Web continues to experience rapid growth. As a result, it has become increasingly important to design and implement network services, such as http, ftp, and web indexing services, to scale gracefully with offered load. Such scalable services must, at minimum, address the following problems:

Unfortunately, providing these properties for network services while remaining compatible with the de facto URL naming standard has proven difficult. URLs implicitly associate a single hostname, and hence a single point of failure and congestion, with each service. A number of efforts address this limitation by hiding the physical location of a particular service behind a logical hostname. Examples of such systems include HTTP redirect, DNS Aliasing, Failsafe TCP, Active Networks, and Magic Routers. We refer to these systems as ``server-side'' because the transparency mechanism is logically co-located with the servers.

Our work is motivated by the observation that in many cases the client, rather than the server, is the right place to implement transparent access to network services. Client-side solutions offer the main advantage of increased flexibility. For example, clients aware of the relative load on a number of ftp mirror sites can connect to the least loaded mirror to deliver the highest throughput to the end user. Ideally, the selection and connection process takes place without any intervention from the end user. Note that in this example, clients must take into account available network bandwidth to each mirror site as well as the relative load of the sites. Such flexibility would be much more difficult to implement if a server attempted to implement such load balancing for geographically distributed clients.