Because the Web is loosely coupled, weak consistency is a feature
of all web-based distributed applications. As a result of the
statelessness constraint, a service has no way of notifying consumers
when a resource changes. In consequence, consumers sometimes act on
stale data. In an attempt to keep up-to-date, many consumers will
GET (poll) a resource
representation to discover whether it has changed recently. But this
strategy is only as good as the polling frequency. In general, we must
assume that a consumer’s understanding of the state of a resource lags
the service’s view of the same resource.
Caching only exacerbates the situation. The moment we introduce caching, we should assume that consumers will become inconsistent with services, and just deal with it. While there are several techniques for increasing the degree of consistency among consumers, caches, and services, the fact remains that different web actors will often have different copies of a resource representation.
The three techniques for improving consistency are:
Invalidation involves notifying consumers and caches of changes to resources for which they hold cached representations. With server-driven invalidation, the server must maintain a list of recipients to be contacted whenever a resource changes. This goes against the requirement that services not maintain application state.
To ensure that they have an up-to-date resource representation, consumers and caches can verify ...