The second solution involves a hierarchy of caches, as illustrated in Figure 2.2. The motivation behind this architecture is to distribute the load away from server hot spots and to reduce access latency. It aims to do this by having the different proxies share their caches in a hierarchical system. The caches are organized according to a child-parent relationship and a sibling relationship. Moreover, the relation between two nodes is dynamic: one node can take another one sometimes as a parent, sometimes as a sibling. The clients request documents from leaf caches using the standard HTTP protocol. If a request cannot be resolved by a cache, it queries its siblings and parents using a datagram oriented protocol called ICP (Internet Cache Protocol). The cache also sends a 'Hit' message to the remote server's 'echo' port. The servers contacted will respond either 'Hit' or 'Miss', depending whether they have the document requested or not. The cache will retrieve the document from whichever sibling, parent or primary site first replies 'Hit'. This procedure works recursively at each node in the hierarchy. Each cache decides independently whether to fetch the document from the remote server or from its neighbors. This allows siblings to provide load balancing.
Current practice is that caches send ICP replies only to unicast addresses, for several reasons: Multicasting ICP replies would not reduce the number of packets sent. It prevents other group members from receiving unexpected replies. The reply should follow unicast routing paths to indicate (unicast) connectivity between the receiver and the sender since the subsequent HTTP request will be unicast routed.
includegraphics[width=14cm,height=25cm,angle=0]fighier.eps
Figure 2.2 : The hierarchical cache.
Figure 2.2 : The hierarchical cache.
This approach has some very nice advantages: it reduces the bandwidth demand and the load on primary servers, and provides balanced load on caches. However, there are some disadvantages, too: the storage requirements concentrate on top proxies, it is difficult to maintain information about siblings, and the hit rates in top nodes are less than those in the lower levels. To solve this problem, another solution, which seems to place itself in between the two approaches presented here. Their idea is to preserve the hierarchical structure of caches, but to make only the leaf nodes responsible for retrieving objects and the upper levels maintain information about the contents of these caches.
In the next chapter we shall concentrate on the issues that go into maintaining
the cache. These are important to extract optimal performance from the cache system.