Design of a Proxy-Sharing Proxy Server
Clinton L. Jeffery and Samir R. Das
Division of Computer Science
The University of Texas at San Antonio
 {jeffery,samir}@cs.utsa.edu
Abstract
Proxy servers that cache internet resources have gained wide
acceptance at the enterprise level. Attempts are being made to extend proxy
servers to support multi-level caching in order to reduce internetwork load
and obtain an increase in performance. This paper argues against
hierarchical models and presents an alternative. Good performance and
scalability require an implementation model that is
non-hierarchical and utilizes the natural topology of the internet.
The ideas in this position paper appeared in the proceedings of IEEE ETACOM
'96 Conference in Portland Oregon, May 1996.
Introduction
The rapid expansion of the internet has resulted in extremely high network
 traffic and degraded response times.  Web caching at the individual client
 level has always been ubiquitous but is insufficient.  Performance analysis
 of current Web servers indicate a strong need for aggressive, distributed
 caching [Kwan95].  Ideally, such aggressive caching techniques provide ways
 to share caches without introducing overly complex software layers or
 resource requirements to the existing model.
Extensions to the single client-level cache have so far followed the loose
 analogy to multi-level caches found in the memory hierarchies used in
 computer designs.  Caching at the local network level is provided by proxy
 servers.  If proxy servers are configured to request their resources through
 other proxy servers, a multi-level cache results; a similar idea was
 used in Harvest, and has been applied to proxy caching in the Squid
 proxy server [squid@nlanr.net].
There are two problems with the multi-level cache analogy.  First, it
 ignores the topology of the internet; multi-level caching only makes sense
 through those levels of the network where all the information is flowing
 from the same location.  Second, hierarchical models do not scale well and
 present poor economic feasibility because each succeeding level in a caching
 hierarchy needs a larger cache size.  It is better to make each entity in
 the network pay for the size of cache that its own use requires.
We propose to do away with the hierarchical model and extend proxy servers
 to share resources with each other non-hierarchically.  Distributed file
 systems such as AFS provide such non-hierarchical caching and are used to
 cache internet resources without imposing additional complexity on the
 server [Kwan95].  The distributed file system approach is a heavyweight
 solution; it is technically or politically impractical or undesirable to
 extend it across the entire internet any time soon.
What is needed is a light-weight alternative for caching and sharing
 internet resources.  Proxy servers are a good starting point; we are
 providing a simple and efficient means of sharing them.  Proxy sharing
 requires more than just configuring servers to allow outside requests;
 information about which local server(s) have cached a remote request must be
 provided.  For each resource, our servers maintain a log that tracks proxy
 servers that cached the resource on a recent access and are willing to share
 it.  The share log is cross-referenced with knowledge of the internet
 topology to determine the closest cache for any given request of a resource.
 We outline implementation techniques below.
Example
Proxy sharing may be illustrated by an example.  Without sharing, when a
 user in San Antonio accesses a Web page in Boulder, a short request message
 is sent to Boulder and the Web page, which is usually large, is sent back.
 It is reasonably likely that someone else located nearer on the Internet
 than Boulder has accessed this Web page recently.  Perhaps, someone in
 Austin accessed it an hour ago.  If a proxy server in Austin cached the page
 and is configured to share resources with others who request it, the San
 Antonio user can get the Web page from Austin if they can find it.  The user
 doesn't have any way of knowing who might have a recent copy of the Web page
 -- but the server in Boulder does.  It can supply a list of sites that
 recently obtained the page.
The mechanism for maintaining and providing such a list is the first half of
 proxy sharing.  The second half is determining which site is nearest to the
 user and obtaining pages from such third-party locations.  The nearest site
 might be inferred from a knowledge-base of the internet's network topology,
 but different policies with different definitions of "nearest" are worth
 exploring.  For example, if Austin's site is heavily loaded, some other
 location (say, Dallas) might provide the information more quickly even if
 the static network topology places it farther away.  As long as Dallas is
 nearer and faster than Boulder, both the user, the server in Boulder, and
 the rest of the Internet community benefits from improved performance and
 reduced network traffic, compared with obtaining the page from its original
 source in Boulder.  The proxy-sharing server in Austin or Dallas has
 suffered some increase in CPU load, but only because it obtained that
 resource itself recently, and agreed to share it; besides, that server
 benefits from accessing other proxies' resources.
Approach
Our prototype implementation of proxy sharing is still in progress.  Initial
 efforts were based on the CERN server, and were discontinued in favor of the
 Apache server.  We have only recently become aware of the Squid server, which
 may be more appropriate for this effort.
In the first prototype, we extended the web server to maintain a list of
 candidate proxies for each of its resources; these are proxies that accessed
 the resource recently and offered to share it from their cache.  The HTTP
 protocol was extended slightly so that resource requests include such an
 offer in an optional header line.  Requests that use the extended protocol
 are called proxy requests.
When a server receives a resource request, it responds with a short list of
 candidate proxies (say, 5-10) that are in closer proximity to the requesting
 client than the owner. The requestor then makes a separate request to a
 suitable server to get a copy of the document.  Proxy-sharing servers
 distinguish between an ordinary HTTP request and a proxy request. Ordinary
 HTTP requests are served in the usual way.  Proxy requests for resources
 whose size is smaller than a threshold value are also served directly rather
 than deferred to a proxy site.
There are technical and policy issues that must be addressed in a full
 implementation of the above protocol.  The major issue is to discover the
 internet topology so that the owner servers can send a list of suitable
 caching servers to the client and the client is able to pick one from this
 list to access the document.  Estimating internet topology is a daunting
 task, especially in the face of changing physical connections, machine
 faults and load variations.
The first proxy sharing prototype utilized crude static topology information
 (country and continent, and user-specified latitude and longitude) to filter
 candidates during the construction of the "short list" of candidate proxies
 by the original resource server.  The HTTP header is requested from all
 members of the short list, in order to select a proxy machine that still has
 the resource in its cache, and can deliver it the quickest to the requesting
 machine.  Research done in the area of obtaining network topology in other
 internetworking contexts (e.g., for multicast protocols [Deering-92]) may
 allow improvements.
Resource Requirements and Performance Implications
The disk space required to support a proxy server's cache is cost effective
 even when it is used only to support that enterprise's needs.  Proxy sharing
 allows neighbors to piggyback resource requests; the CPU overhead imposed by
 the courtesy of servicing outside requests is offset by savings an
 institution reaps in improved internet performance and access to the caches
 on neighbors' proxy servers.  Since outside requests only occur for
 resources a site is known to have accessed recently, no overhead is imposed
 on sites that are not themselves requesting resources.  In
 security-conscious environments, proxy sharing can only be utilized on
 intranets or by placing a proxy-sharing server outside the firewall.
The main new resource required by proxy sharing in our model is the
 memory required by each server to maintain its list of candidate proxies.
 The actual memory consumed may be tuned to fit an individual server's
 situation, but if the lists are maintained for each resource of a size
 greater than 10 kbytes, and a typical server has, say, 1000 such resources,
 and each candidate proxy on the list consumes 100 bytes (machine name,
 time stamp, etc.) and the lists are 10 entries long, the lists could
 easily consume on the order of a megabyte on the server.  In practice,
 this amount of virtual memory is not a problem, and most sites would need
 less.
Proxy sharing has multiple effects on performance; changes in average
 access times on resources may be more important to end-users, but change
 in total network traffic may be equally important.  In the worst-case,
 a server sends back a list of candidate proxies that all are unavailable
 or have flushed the resource from their cache, leaving the client with
 the task of querying the server for the resource again.  For large resources
 across far distances, the cost of checking for a local copy first will be
 insignificant, while for smaller files and shorter distances it will be
 better to respond with the resource than a list of proxy candidates.
 These sorts of tunable parameters provide a rich area for further work.
Our initial tuning of such parameters starts with the common case in which
 relatively small HTML pages to contain references to relatively large
 embedded images.  The demand for low latency suggests that the HTML content
 may be sent directly from the remote server.  In this case the list of
 candidate proxies can be piggybacked on the message containing the HTML
 page, and the client proxy server can request subsequent images and other
 resources from a nearby sharing server with low latency, consistent with
 the improvements in the upcoming HTTP 1.1 protocol,
Conclusion
Proxy sharing promises to reduce the network traffic generated by access
 to large World-Wide Web resources.  An implementation is a modest extension
 to the existing proxy server technology.  The benefits obtainable by means
 of proxy sharing will be fully realized only if the technology is widely
 adopted, but the cost of adopting the technology is low.
Acknowledgements
Shannon Williams contributed to discussions and assisted with various server
 configuration and administration issues.  Garry S. Bernal participated in
 the design and implementation of the proxy-sharing proxy server prototype.
 This work has been supported in part by the National Science Foundation
 under grant CCR-9409082 and by a UTSA Faculty Research Award.
References
[Deering-92] S. Deering and D. Cheriton.
 "Multicast routing in datagram internetworks and extended LANs."
  ACM Transactions on Computer Systems, 8(2):85--110, May 1992.
[Kwan95] Thomas T. Kwan, Robert E. McGrath, and Daniel A. Reed.
 "NCSA's World Wide Web Server: Design and Performance."
  IEEE Computer, 28(11):68--74, November 1995.
[Luotonen94] Ari Luotonen and Kevin Altis.
 "World-wide web proxies."
 In  Proceedings of the First International World-Wide Web
 Conference, 1994.
Proxy servers that cache internet resources have gained wide
 acceptance at the enterprise level.  Attempts are being made to extend proxy
 servers to support multi-level caching in order to reduce internetwork load
 and obtain an increase in performance.  This paper argues against
 hierarchical models and presents an alternative.  Good performance and
 scalability require an implementation model that is
 non-hierarchical and utilizes the natural topology of the internet.
 The ideas in this position paper appeared in the proceedings of IEEE ETACOM
 '96 Conference in Portland Oregon, May 1996.