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.