Proxy caching servers are widely used to improve performance of internet access. Unfortunately, they often become severe bottlenecks and hurt more than help the performance. Partitioning users among multiple proxies alleviates this problem at the cost of reduced sharing of caches (indeed, a user connected to one proxy cannot benefit from the cache maintained by another proxy). We propose a distributed architecture for a Web proxy system, which avoids the proxy bottleneck and increases its effective cache size without compromising the level of cache sharing.
The architecture contains two sets of servers: caching servers and mapping servers. Caching servers keep caches of objects, and mapping servers maintain the map of URLs to the IDs of the caching servers (if any) that have the corresponding objects. The namespace of all URLs is partitioned among mapping servers according to some well-known partitioning rule, so that each mapping server is responsible for some portion of URL namespace.
A client (browser) is normally connected to one of the caching servers as its proxy. When the caching server receives a client request, it either finds the requested object in its cache, or sends the request to a mapping server, chosen according to the partitioning rule. If the mapping server finds the URL in its map database, it returns the ID of a server that caches this object to the requesting caching server, which uses this information to obtain the object. (Note that an object may be cached by several caching servers, in which case the mapping server chooses one according to some policy.) If the object is not in the mapping server database, the caching server obtains and caches the object from the Internet, and informs the mapping server; the mapping server adds the location of the newly cached object to its mapping database.
Thus, the load is distributed among caching servers and mapping servers, and at the same time an object cached anywhere in the system is available to all users. An interesting configuration of this system is the one where caching proxies are co-located with the browsers, each browser is proxied to its local caching server, and the browser cache size is set to zero. In this case, the architecture converges to the one where all clients share their caches, which not only increases greatly the effective cache size, but also makes it scale with the number of users.
The architecture has been implemented by modifying the Squid proxy server and is available for download .