The results from this section are ambivalent. None of the three
protocols performed efficiently in all cases, reflecting the tradeoffs
discussed in chapter
. Surprisingly, an
adaptive protocol like Alex was not much more efficient than a static
protocol like TTL. An invalidation protocol was very competitive in
terms of bandwidth consumed and server load imposed, but its other
drawbacks make it difficult to implement on a wide-area system such
that it can scale appropriately.
In order to implement invalidation in his hierarchical caches, for
example, Worrel found it necessary to assume the inclusion
principle whereby an item in a lower-level cache must also reside in
all caches higher than that cache. As we saw in
section
this simplifies the invalidation
protocols but also places unpleasant restrictions on cache deployment.
Not only must caches be deployed in a hierarchy, but space
limitations on an upper level cache may result in objects being
removed from a lower-level cache where they might have been very
popular.
Under the real-world conditions such as those simulated by our server traces, the Alex and TTL scheme do not perform as poorly as Worrell claims. Biases in his simulation skewed his results in favor of an invalidation protocol; removal of the biases revealed that no protocol was overwhelmingly superior to the other. We conclude therefore with the counter-intuitive statement that a cache consistency protocol for use in a wide-area distributed system may be selected based on its ease of implementation and simplicity rather than on its bandwidth consumption and imposed server load.
We therefore recommend the Alex protocol for use in distributed Web
caches because its performance on real world data is slightly better
than TTL, and it is much easier to implement than an
invalidation-based protocol because it is not necessary to worry about
disconnected networks. If the client can not reach the server to
update its invalidated objects it merely continues checking every time
the object is requested. No additional state needs to be stored in
either the client or the server to handle the error case.