[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pulish WCIP version 01
Hi, please publish the attached ID as draft-danli-wrec-wcip-01.txt
"WCIP: Web Cache
Invalidation Protocol".
Thanks!
Dan
D. Li
Cisco
P. Cao
Cisco
M. Dahlin
Univ of Texas
Internet Draft
Document: draft-danli-wrec-wcip-01.txt March 2001
Category: Experimental
WCIP: Web Cache Invalidation Protocol
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts. Internet-Drafts are draft documents valid for a maximum of
six months and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use Internet- Drafts
as reference material or to cite them other than as "work in
progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
Cache consistency is a major impediment to scalable content
delivery. This document describes the Web Cache Invalidation
Protocol (WCIP). WCIP uses invalidations and updates to keep
changing objects up to date in web caches, and thus enables proxy
caching and content distribution of large amounts of frequently
changing web objects, where periodical revalidating objects one by
one is unacceptable in terms of performance and cache consistency.
WCIP runs between the invalidation server, the participating web
caches, and channel relay points (if any). An invalidation server
maintains one or more invalidation channels, each of which covers a
class of related objects, called an "object volume". E.g., the CNNfn
channel may cover an object volume with the day's top financial news
and stock quotes. Web caches subscribe to channel(s) they are
interested in, while the invalidation server(s) send out
invalidations and/or up-to-date objects to the channel(s). Besides
server-driven invalidation, WCIP also supports client-driven
validation of object volumes.
Li & Cao & Dahlin Experimental - September 2001 1
Draft-danli-wrec-wcip-01.txt March 2001
WCIP employs heartbeats to guarantee the freshness of the cached
objects even under network or server failure. Moreover, WCIP can set
up channel relay points via a cache hierarchy or a CDN (content
delivery network). A channel relay point performs channel relay
(one-to-many) and connection aggregation (many-to-one).
Revision Log
1. Introduce the concept of "object volume" to clear the common
confusion between the transport (invalidation channel) and the
unit of consistency (object volume).
2. Remove "targeted service" (for now) as it significantly
complicates the protocol without obvious benefit, given that
"channel" is already a form of coarse filtering.
3. Describe "client-driven volume validation" as an operation mode
as opposed to a special case of channel registration with
infinite heartbeat interval.
4. Specify the "channel abstraction". Describe a HTTP-based channel
implementation. Other implementations, e.g., Beep, IP multicast,
can be future work.
5. Add the protocol state machine.
Table of Content
1. Introduction ......................................2
2. Terminology .......................................4
3. Design Issues .....................................6
3.1 Freshness Guarantee
3.2 Object Volume
3.3 Channel Abstraction
4. Deployment Issues ................................12
4.1 Channel Relay
4.2 Detect Changes
4.3 Discover Channels
4.4 Join Channels
5. Protocol Specification ...........................15
5.1 Object Volume DTD
5.2 Client-initiated Volume Synchronization
5.3 Server-initiated Volume Synchronization
5.4 Serving Content
6. Protocol State Machine ...........................22
6.1 Client State Machine
6.2 Server State Machine
7. Security Concerns ................................25
8. References .......................................26
9. Acknowledgments ..................................27
10.
Authors' Addresses ...............................27
1. Introduction
In web proxy caching, a document is downloaded once from the web
server to the caching proxy, which then serves the document to end-
Li & Cao & Dahlin Experimental - September 2001 2
Draft-danli-wrec-wcip-01.txt March 2001
users repeatedly out of the cache. This offsets the load on the web
server, improves the response time to the users, and reduces the
bandwidth consumption. When the document seldom changes, everything
works out wonderfully. However, the hard part is when the document
is popular but also frequently changing, i.e., the so-called
"dynamic content".
Dynamic content is quickly becoming a significant percentage of the
Web traffic, e.g., news and stock quotes, shopping catalog and
prices, product inventory and orders, etc. Because the content is
changing, the caching proxy has to frequently poll the web server
for a fresh copy and still tends to return stale data to end-users.
Specifically, a proxy using "adaptive ttl" is unable to ensure
strong cache consistency, and yet "poll every time" is costly. So
the content provider usually sets a very short expiration time or
marks frequently changing documents as non-cacheable all together.
This defeats the benefit of caching, even though those objects may
be cached, should the proxy know when the document becomes obsolete
[1]. Moreover, if the proxy can be informed of the change to the
underlying data that a web object is generated from, the proxy can
re-generate the web object on its own, making it possible to
distribute dynamically computed content.
Addressing this problem, WCIP (Web Cache Invalidation Protocol)
provides freshness guarantees to the content provider while keeping
the cost of doing so low. Using WCIP, a web server can advertise to
caching proxies an "object volume" and the corresponding
invalidation channel, identified as an URI.
To provide freshness guarantees to objects in the object volume, the
caching proxy subscribes to the invalidation channel and obtains an
up-to-date view of the object volume -- a process referred to as
"volume synchronization". After the initial volume synchronization,
to stay synchronized, the invalidation channel operates in either
the server-driven mode or the client-driven mode (or a mix of both).
In the server-driven mode, the invalidation server sends
invalidations to the channel whenever changes happen to the volume,
while the proxy listens passively. The server also generates
heartbeats so that the freshness guarantees can be met even upon
network partition or server crash. The heartbeat interval is
determined by the freshness guarantees required for the object
volume.
In the client-driven mode, the invalidation server doesn't
proactively send updates to the channel. The caching proxy
periodically initiates "volume synchronization" to revalidate the
volume, at which time the invalidation server returns all the
updates made to the volume since the last time the proxy validated
the volume. The revalidation interval is determined by the freshness
guarantees required for the object volume.
Li & Cao & Dahlin Experimental - September 2001 3
Draft-danli-wrec-wcip-01.txt March 2001
The two modes are merely the two extremes of a continuum,
characterized by how soon the server proactively sends
updates/heartbeats and how soon the proxy revalidates the volume.
The sooner, the quicker objects are invalidated and thus the better
consistency but also the more load on the server and the proxy.
Regardless of the mode, same messages are exchanged between the
invalidation server and the caching proxies, whose format is defined
by "ObjectVolume" XML DTD. Each round of message exchange, whether
initiated by the server or the client, is a process of "volume
synchronization" and results in an up-to-date view of the object
volume. Based on the up-to-date view, the proxy can provide
freshness guarantees to all the objects in the volume.
2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
this document are to be interpreted as described in RFC-2119 [2].
Since WCIP makes some extensions to HTTP, please refer to RFC-2616
[3] for HTTP related terminology. Following are WCIP related terms.
Cache Consistency
A property that the replica data item reflects its master copy
in a certain fashion. There are at least 3 fashions. (1) Strong
consistency -- the replica must be always the same as the master.
(2) Delta consistency -- the replica must become the same as the
master at most "delta" seconds after the master is updated. (3)
Eventual consistency -- the replica must become the same as the
master at some unknown point in the future. WCIP provides "delta
consistency" where "delta" is the freshness guarantee.
Freshness Guarantee
A promise that the invalidation client will not service content
(belonging to the object volume) from the cache after X seconds of
known or presumed update at the origin server, where X is the
freshness guarantee and is specified by the content provider. In
other words, the invalidation client never delivers cached content
that is more than X seconds stale, regardless of network partition,
proxy failure, or server failure. A freshness guarantee provides
"delta consistency" and also allows "eventual consistency" (i.e.,
when X is infinite).
Object Volume
A set of correlated web objects, their consistency state, and
their freshness guarantee. The object volume is employed as the unit
of consistency as well as the unit of filtering. A consistent view
of the object volume implies the consistent view of every object in
the object volume. Also called "volume".
Li & Cao & Dahlin Experimental - September 2001 4
Draft-danli-wrec-wcip-01.txt March 2001
Volume Synchronization
The act of updating the object volume at the invalidation
client with that at the invalidation server. Either the server or
the client can initiate volume synchronization. After the volume
synchronization, the two mutually agree on the consistency states of
objects in the volume (for "freshness guarantee" time long).
Last Synchronization Time
The time of the last volume synchronization.
Invalidation Channel
A transport abstraction that carries messages between the
invalidation server and the invalidation client(s) for the purpose
of volume synchronization. Also called "channel".
Invalidation Server
An application program that provides WCIP services to caching
proxies. It maintains the master copy of the object volume and
disseminates the volume and changes to volume to caching proxies.
(The invalidation server logically differs from the origin server
because a cache may fill a request from a CDN content server or a
replica origin server. The cache may not be able to tell these
various sources from the origin server. Besides, the WCIP service
may not reside on each or any of them. "invalidation server"
uniquely identifies the source of the WCIP service.)
Invalidation Client
A web cache, usually a caching proxy, which subscribes to the
invalidation channel and maintains a consistent view of the object
volume. Also referred to as the "proxy".
Server-driven mode
An operation mode, where the invalidation server proactively
sends changes made to the object volume as well as heartbeats to
invalidation clients via the invalidation channel, for volume
synchronization.
Client-driven mode
An operation mode, where the invalidation client periodically
queries the invalidation server via the invalidation channel, for
volume synchronization. The server replies with the changes made to
the object volume since the last time the client asked.
Channel Address
Li & Cao & Dahlin Experimental - September 2001 5
Draft-danli-wrec-wcip-01.txt March 2001
Information that a caching proxy needs in order to access the
channel, e.g., the name of the channel, the address (domain name) of
the invalidation server, the security mode, etc.
Channel Replay
An intermediary program that subscribes to one or multiple
invalidation channels on behalf of its clients (e.g., downstream
proxies) and relay the channel messages to its clients. It MUST
implement both the invalidation server and the invalidation client.
Heartbeat
A periodic message sent by the invalidation server to keep the
channel from being silent for too long. It allows the invalidation
client to verify the channel connectivity and source liveliness, so
as to confirm that the volume remains synchronized.
Heartbeat Interval
A property of the server-driven mode. The invalidation server
sends heartbeat to the invalidation channel if the channel is silent
for the last heartbeat interval. The interval MUST be smaller than
the freshness guarantees of the objects in the object volume, or the
object volume may lose synch.
Revalidation Interval
A property of the client-driven mode. The invalidation client
initiates volume synchronization with the invalidation server, when
the "last synchronization time" was "revalidation interval" ago. The
interval SHOULD be smaller than the freshness guarantees of all the
objects in the object volume, to avoid unnecessary cache misses.
Invalidation Latency
The time between an object is updated at the origin server to
the time the old copy is treated as stale at all the participating
proxies. The goal of a freshness guarantee of X seconds is to
guarantee that the invalidation latency is within X seconds at all
times.
Content Delivery Network (CDN)
A self-organizing network of geographically distributed content
delivery nodes (reverse proxies) for contracted content providers,
capable of directing requests to the best delivery node for global
load balancing and best client response time.
3. The Design
Li & Cao & Dahlin Experimental - September 2001 6
Draft-danli-wrec-wcip-01.txt March 2001
Before we talk about the specifics, let's lay out some design
principles this protocol tries to follow:
(1) Simple and effective: we try to design a lightweight client and
leave complexity to the server, then use multicast and channel
relay points to address the server scalability. We also try to
leverage off-the-shelf components as much as we can. Example
may include HTTP, SSL, XML, Beep, etc.
(2) Logical separation of the invalidation server and the origin
server: this is because WCIP needs to work with CDNs and
distributed data centers. There may be multiple authoritative
sources of an object. "Invalidation server" uniquely identifies
where the invalidation source is, not where the content
initially is fetched. It also allows for delegation of
invalidation service to a 3rd party, possibly a CDN provider.
(3) Clear separation of the notification transport and the
notification semantics: WCIP includes a transport abstraction
(invalidation channel) and then the cache consistency semantics
(object volume). This separation makes the protocol clearly
layered, much more understandable, and extensible. Moreover,
the message body is specified in XML, making the protocol
extensible to other types of notifications.
3.1 Freshness Guarantee
WCIP provides reliable invalidations and consistency guarantees so
that content providers could make their dynamic content cacheable.
It's important that WCIP guarantees that, in the worst case, a proxy
subscribed to an invalidation channel will not service stale content
X seconds after the content is updated at the origin server,
regardless of network partition or server failure. The content
provider can specify the value of X, e.g., to 5 minutes.
In the normal case, this is not hard. Using WCIP, the proxy will not
deliver any stale object as soon as an invalidation arrives from the
server. The invalidation latency only depends on network propagation
and queuing delay, which are typically within a second. In other
cases, however, when the network or the invalidation server is down,
invalidations cannot reach the proxy timely. To ensure an upper
bound on the invalidation latency, the proxy MUST invalidate content
automatically if it hasn't being able to synchronize the object
volume for a certain period of time, assuming the server or network
may be down and the volume may have changed.
Therefore, to control the freshness, the content provider specifies
a "freshness guarantee" for each object in the volume, while the
caching proxy keeps track of the "last synchronization time". Then,
upon serving a client HTTP request, the proxy MAY use the cached
object only if the time elapsed since the last synchronization time
is less than the object's freshness guarantee. Otherwise, the cached
object is marked as stale and MUST NOT be served from the cache
Li & Cao & Dahlin Experimental - September 2001 7
Draft-danli-wrec-wcip-01.txt March 2001
without HTTP revalidation. The proxy is RECOMMENDED not to remove
the object right away as HTTP revalidation could turn out to be "Not
Modified".
To prevent unnecessary cache misses during normal operation, the
"last synchronization time" needs to be kept within the freshness
guarantees. Hence, in the server-driven mode, the invalidation
server sends heartbeats whenever the channel has been silent for the
last "heartbeat interval", so as to confirm to the proxies that the
volume hasn't changed. Similarly, in the client-driven mode, for
every "revalidation interval", the proxy queries the invalidation
server to make sure it holds the up-to-date copy of the volume.
The invalidation server picks the heartbeat interval while the
invalidation client picks the revalidation interval. Both of them
SHOULD be smaller than any of the freshness guarantees of the
objects in the volume, to avoid unnecessary cache misses. Moreover,
the invalidation server SHOULD send invalidations "reasonably" soon
after it learns of an object change, but it MAY delay the
synchronization until some time before the subsequent heartbeat.
Such a strategy allows the server to batch multiple changes into one
update, without inducing unnecessary cache misses.
In essence, there are two consistency concepts: the average-case
staleness and the worst-case staleness:
(1) The worst-case staleness is bounded by the freshness guarantee
and enforced by the proxy not using a cached object if the time
elapsed since the last volume synchronization time is more than
the object's freshness guarantee.
(2) The average-case staleness is controlled by the heartbeat
interval and the revalidation interval. The more aggressively
that the server sends invalidations or the proxy revalidates
the volume, the better average-case staleness that can be
achieved.
At one extreme, the server sends invalidations immediately when an
object is modified. Then average-case staleness (for clients that
are reachable) is on the order of server queue delays plus network
delays (typically only a few seconds). At another extreme, the
server doesn't bother with pushing invalidations. Then average case
= worst case. Middle ground is feasible. For example, a server can
batch invalidations; every 30 seconds, send the clients a list of
invalidations that have happened in the last 30 seconds.
While WCIP uses freshness guarantee to provide "delta consistency",
it also supports a more relaxed form of consistency -- "eventual
consistency". I.e., when the freshness guarantee is set to be much
larger than the typical object modification interval or even set to
infinite. Then WCIP is similar to best-effort invalidation delivery
and is subject to network and server failures. As long as the
Li & Cao & Dahlin Experimental - September 2001 8
Draft-danli-wrec-wcip-01.txt March 2001
heartbeat interval or revalidation interval is not infinite, the
caching proxies achieve eventual consistency.
3.2 Object Volume
An "object volume" is a set of correlated objects that are updated
by the same invalidation Channel. E.g., an "eBay auction" channel
contains the most active auction pages. A "SFO flight schedule"
channel contains pages describing various airline flights that are
departing from or arriving at SFO. "Object volume" serves two
purposes, as the unit of filtering and as the unit of invalidation.
Using volume as the unit of filtering, caching proxies may subscribe
to updates for certain object volumes but not others, based on the
interests of the population they are serving. The strategy for
forming volumes is to group "correlated" objects into one "volume".
This way, if a caching proxy is interested in some objects in the
volume, it's highly likely that it is or will be interested in the
other objects in the volume as well. Examples include CNNfn, ESPN,
NBA, etc., similar to TV programming. An object volume of reasonable
size and correlation helps to reduce unwanted invalidations and
amortize the channel cost [4] [5].
Object volume also serves as the unit of consistency. If the caching
proxy obtains the up-to-date view of the volume, it follows that the
caching proxy has the up-to-date view of every object in the volume
(in terms of Last-Modified time and Etag). This allows one "volume
synchronization" exchange to (in)validate all the objects in the
volume, greatly improving efficiency compared to per-object HTTP
validation. Moreover, when a web site updates its content, often it
would like to preserve a consistent view of the site. I.e., it would
like the end-users to see either entirely the new content or
entirely the old content, not a bit of the new at some web pages and
a bit of the old at other pages. By grouping these correlated web
pages into one object volume, we can atomically invalidate the
entire volume and thus preserve the coherent view.
An object volume is described in XML (see section 5 for DTD). In
essence, it is a collection of object meta-data and can be retrieved
incrementally based on its version.
Whenever the caching proxy subscribes to an invalidation channel,
the first thing it does is to synchronize the object volume with the
server. Before synchronization, the proxy knows nothing about the
volume and cannot cache objects that are non-cacheable according to
HTTP Cache-Control directives. After synchronization, the proxy
knows what objects are covered by the volume, whether its local
cache copies are stale or not, and each object's freshness
guarantee. The proxy SHOULD ignore the normal HTTP Cache-Control
directives for these objects, such as no-store, expires, and max-
age. But it SHOULD still honor directives such as "private". [Note:
thorough specification on HTTP Cache-Control is needed.]
Li & Cao & Dahlin Experimental - September 2001 9
Draft-danli-wrec-wcip-01.txt March 2001
Once synchronized, volume re-synchronize does not need to return the
entire object volume again. Depending on the last version the proxy
synchronized, the server sends the list of changes made to the
volume since the last version, which can be substantially smaller
than the entire volume. This facilitates quick re-synchronization.
3.3 Channel Abstraction
Invalidation channel may be implemented in many different ways,
e.g., using HTTP, Beep, or IP multicast. It's out of the scope of
WCIP to design this transport layer. However, here we specify the
channel abstraction that a specific implementation ought to provide:
(1) Naming: channels are named as URIs. For interoperability, the
channel name MUST indicate the transport implementation. E.g.,
"wcip://my.net:80/channel/name?proto=http" denotes a channel
carried on top of HTTP. A channel implementation MUST be able
to translate the channel URI into the addressing information
that the implementation is using.
(2) Subscription: provide an interface for channel subscription
based on the channel URI as well as notifying the upper layer
whenever the subscription terminates unexpectedly. Once
subscribed, the caching proxy can start send to and receive
from the channel.
(3) Framing: channel messages are self-describing and well-formed
XML text. Each "send" and "recv" by the invalidation server or
client returns the entire XML message.
(4) Reliability: message delivery MUST be reliable, full duplex,
and in sequence (wrt. the sender). Moreover, delivery SHOULD be
real-time in that the average latency should be comparable to
the network round-trip time from the sender to the receiver.
(5) Security: a channel can be configured into clear text, or
signed for integrity, or encrypted for secrecy. Channel
subscription can be either open or authenticated.
(6) Scalability: help to ensure that the invalidation server
doesn't become overwhelmed by excessive load, by providing
either IP multicast (see later this section) or channel relay
(see section 4.1).
(7) Environment: be able to operate across wide-area networks and
across administrative domains (i.e., firewalls). Some may be
multicast-capable and some may not.
An implementation on top of HTTP (RFC-2616) is as follows:
(1) Naming: A HTTP-based channel is denoted as
"wcip://<host>:<port>/a/hiearchical/name?proto=http".
Li & Cao & Dahlin Experimental - September 2001 10
Draft-danli-wrec-wcip-01.txt March 2001
(2) Framing: messages are sent as HTTP POST requests with the
request body being the message. The request URI is the channel
URI. The request response carries the message response (if
any).
(3) Subscription: a persistent connection is established to the
host and port as specified in the channel URI. If multiple
channels have the same server address and port, they can share
the same persistent connection. Tear-down of a persistent
connection and re-establishment of a new connection represents
a possible loss of synchronization and MUST trigger a volume
synchronization.
(4) Reliability: HTTP runs on top of TCP so is reliable. All
server-driven messages are sent on the persistent connection in
a first-come-first-serve order. Pipelining may be used to
improve latency and throughput.
(5) Security: use HTTPS when the channel needs to be secure. The
URI is "wcip://<host>:<port>/a/hiearchical/name?proto=https".
(6) Scalability: when there are too many HTTP connections to the
server, the server can instruct the channel implementation to
use HTTP Location header to redirect new connections to a
multicast channel or a channel relay point, which can be chosen
by static configuration or CDN routing.
(7) Environment: to cross administrative domains, the channel must
be on a port allowed by the firewalls. If port 80 is used, it's
possible that the traffic be intercepted by a transparent proxy
that doesn't understand WCIP. Depending on its configuration,
the transparent proxy may or may not pass on the traffic
without interference. In case it doesn't, either reconfigure it
or a port number other than 80 must be used.
Besides HTTP, channels may also be implemented using e.g., Beep [6],
PGM [7]. Their channel URI may be:
wcip://my.net:80/channel-name?proto=beep&security=tls
wcip://my.net:80/channel-name?proto=pgm&group=239.1.1.1
[Note: additional work is needed to fully specify them.]
Both HTTP and Beep are unicast, which has scalability limitations.
E.g., suppose a machine is capable of 20000 concurrent persistent
connections. Then that machine being an invalidation server can
support at most 20000 simultaneously active invalidation clients.
Moreover, if it takes 1ms to send out a message, then the
invalidation latency is at least 20 seconds, even under the best
network condition.
Li & Cao & Dahlin Experimental - September 2001 11
Draft-danli-wrec-wcip-01.txt March 2001
An IP-multicast-based channel implementation avoids this scalability
problem. An IP multicast group is allocated for the invalidation
channel and its address is advertised as part of the channel
information. For any update to the object volume, the invalidation
server only needs to send one copy, to the multicast group. The
invalidation client subscribes to this multicast group to receive
the updates. Because the object volume has version numbers, WCIP may
not have to run on top of a reliable multicast protocol.
In the absence of IP multicast, an unicast-based channel
implementation may employ channel relays to improve scalability,
which is the topic of the next section.
4. Deployment Issues
4.1 Channel Relay
An invalidation channel may have tens of thousands of invalidation
clients. Channel relay points can improve the scalability of an
unicast-based channel. Instead of subscribing directly to the origin
invalidation server, some invalidation clients are redirected to a
channel relay point. A channel relay point can perform one-to-many
channel relay and many-to-one connection aggregation.
(1) Channel Relay
The channel relay point may have multiple clients subscribed to the
same invalidation channel. It in turn only subscribes once to the
original invalidation server. By multiplicatively relaying channel
messages, it reduces the load on the invalidation server and helps
scale the invalidation channel end-to-end.
Invalidation Server
|
| conn0
|
|
Channel Relay Point
/ | \
/ | \
conn1 / conn2| \ conn3
/ | \
/ | \
Client1 Client2 Client3
A "dumb" relay point copies all messages from connection "conn0" to
"conn1", "conn2" and "conn3", and vise versa. A "smart" relay point
also construct the up-to-date view of the volume as well as the
journal of changes to the volume, based on the messages it receives
from the invalidation server. Then, it can respond to client-driven
volume synchronization requests, instead of forwarding the requests
all the way to the invalidation server.
Li & Cao & Dahlin Experimental - September 2001 12
Draft-danli-wrec-wcip-01.txt March 2001
(2) Connection Aggregation
A relay point supports not only multiple clients but also multiple
channels. Connection aggregation reduces the number of TCP
connections the invalidation client and the replay point have to
maintain. See the example below.
Server1 Server2 Server3
\ | /
conn1 \ |conn2 / conn3
\ | /
\ | /
Channel Relay Point
/ | \
/ | \
conn4 / conn5| \ conn6
/ | \
/ | \
Client1 Client2 Client3
The client would have established 3 connections for 3 different
invalidation servers. Now that all 3 channels are redirected to the
same relay point, the client only needs to establish 1 TCP
connection, to the relay point, which in turn subscribes to the 3
invalidation servers. This reduces the client's TCP overhead and
allows the client to support more channels, as well as reducing the
overhead on the invalidation servers and the relay point.
A channel relay point can be set up via a cache hierarchy or a CDN.
Specifically, an invalidation client can discover and then connect
to the relay point in one of the following ways.
(1) The origin web server or replica origin web server, being part
of a CDN, returns a channel URI with the relay point as the
hostname.
(2) The relay point, being a configured outgoing proxy to a
potential invalidation client, intercepts and replaces the
channel URI in the HTTP response with its own information.
(3) When the invalidation client does DNS name lookup of the
invalidation server hostname, the DNS server of a CDN returns
the IP address of a local channel relay point.
(4) When the invalidation client connects to the invalidation
server, the invalidation server replies with a redirect message
pointing to a channel offered by the relay point.
4.2 Detect Changes
Detecting changes is the job of the origin server and/or
invalidation server. Web content may change because of updates from
Li & Cao & Dahlin Experimental - September 2001 13
Draft-danli-wrec-wcip-01.txt March 2001
the content owner or updates from the content viewer. E.g., the
content owner CNN.com updates its front page every 15 minutes, while
Ebay updates its content whenever its customers post new auction
items or bids. Therefore, changes may be detected in 4 ways.
(1) When the script runs that generates content and updates the web
source file (e.g., a news article is updated with the latest
financial information), the script notifies the invalidation
server which then sends out invalidations or delta-encoded
updates to all participating caches.
(2) When a piece of data in the database is modified via the
database interface (e.g., the addition to the inventory of
books), a database trigger notifies the invalidation server the
event.
(3) When a HTTP request comes in (e.g., a POST request to add a new
auction item), the origin server or its surrogate (reverse
proxy) notifies the invalidation server the event.
(4) The last but simplest way is for the invalidation server to
poll the origin server periodically to find out if the object
has changed. Given that there is only one invalidation server
polling, the poll frequency can be very high, e.g., once every
minute, offering decent cache consistency as well.
There are softwares providing change detection of web content. In
some cases, an event described above may invalidate multiple URLs.
If the participating caching proxies are able to interpret such
events, the invalidation message may carry the description of the
event, instead of the list of invalidated URLs. This may be future
work.
4.3 Discover Channels
A caching proxy learns about an invalidation channel in three ways:
(1) configured by the proxy's administrator, (2) configured by the
CDN that's controlling the proxy, or (3) obtained from the HTTP
response when fetching an web object. Here, we specify method 3:
In a normal HTTP request-&-response exchange, the caching proxy
obtains the channel address from the HTTP entity headers
"Invalidated-By" and "Channel-Object".
Invalidated-By = "Invalidated-By" ":" Channel-URI
Channel-URI =
"wcip:" "//" host ":" port "/" channel-name "?" query
channel-name = token
Example:
Invalidated-By: wcip://www.cdn.com:777/allpolitics?proto=http
4.4 Join Channels
Li & Cao & Dahlin Experimental - September 2001 14
Draft-danli-wrec-wcip-01.txt March 2001
The decision to join a channel can be either (1) instructed by the
proxy's administrator, (2) instructed by the CDN that the proxy is
part of, or (3) dynamically decided.
It's not the job of this protocol to specify the decision algorithms
but there are some common sense ones. E.g., join a channel when the
proxy has cached M objects belonging to that channel, or when the
proxy has received N requests to objects belonging to that channel.
The proxy's administrator can configure M and N.
Moreover, the proxy can employ a heuristic [8]: consider an object
for WCIP service only if (1) it is cached and (2) a subsequent
request does use the cached copy without discovering it expired or
modified. This heuristic avoids objects that either are not very
popular or are modified more frequently than accessed, despite it
being cached in the mean time. This guideline can be applied to
calculating M and N.
5. Protocol Specification
This section lays out the message syntax and sequences. Section 6
has the complete rule set (state machine) with regard to the server
and client's behavior.
Following is a brief description of the WCIP protocol in the most
common and simple case:
1)
In a normal HTTP request-&-response exchange, a caching proxy
obtains invalidation channel information from the HTTP response
header "Invalidated-By", returned by the origin server or its
surrogate.
2)
To join the channel, the caching proxy establishes a persistent
HTTP connection with the invalidation server, assuming the channel
implementation is based on HTTP.
3)
Immediately following connection set-up, the proxy MUST initiate
one round of volume synchronization (see section 5.2) to obtain an
up-to-date view of the ObjectVolume, and hence the up-to-date view
of all the objects in it.
4)
After the initial round, the invalidation server MAY initiate
volume synchronization when updates are made to the volume or when
the channel is silent for "heartbeat interval" time (see section
5.3).
5)
Whenever the proxy notices that the "last synchronization time" is
more than "revalidation interval" ago, the proxy MUST initiate a
round of volume synchronization.
6)
When serving content, the proxy MUST NOT use a cached object if
the cached object is marked as stale or the "last synchronization
Li & Cao & Dahlin Experimental - September 2001 15
Draft-danli-wrec-wcip-01.txt March 2001
time" is more than "freshness guarantee" time ago for the object.
Instead, the proxy MUST perform HTTP revalidation with the origin
server before serving the object. (See section 5.4).
7)
The proxy or the invalidation server MAY terminate communication
anytime by closing the connection. Then the proxy reverts back to
HTTP Cache-Control.
5.1 Object Volume DTD
A description of the object volume contains (1) the volume's own
information, e.g., its version, date, invalidation channel, Last-
Modified time, Etag etc.; and (2) the volume composition, which
iterates the objects that belong to the volume and their consistent
state.
An ObjectVolume MAY list not only objects but also directories. For
example, an ObjectVolume entry with uri = "http://www.cnn.com
/allpolitics/" represents all the web objects that share this URI
prefix. Given a web object, longest prefix match is used to identify
an applicable entry in the ObjectVolume.
If the matching entry's URI is a filename, Etag and Last-Modified
time (if available) SHOULD be used to determine object freshness. If
the Etag and Last-Modified time are not available or if the matching
entry's URI is a directory path, the attribute state="stale"
determines that all cached objects with that URI prefix ought to
revalidated.
An ObjectVolume MAY also consist of objects from different origin
servers, as long as the same invalidation server is being used for
all the objects. This may be typical in a CDN environment.
Thus, an object volume is described using the following XML DTD:
<!ELEMENT ObjectVolume (member*)>
<!ATTLIST ObjectVolume date CDATA #REQUIRED>
;# the time this xml message is sent by the origin
;# invalidation server
<!ATTLIST ObjectVolume channel CDATA #REQUIRED>
;# the invalidation channel URI that carries this object
;# volume
<!ATTLIST ObjectVolume version CDATA #REQUIRED>
;# the version number of this object volume; It's incremented
;# whenever an change is made to the volume.
<!ATTLIST ObjectVolume base CDATA #REQUIRED>
;# the base version number that the following volume info is
;# based on; a base of 0 means the following volume info solely
;# defines the volume composition; a positive base number means
;# that the following info should apply to an existing volume
;# of that version number.
<!ATTLIST ObjectVolume last-modified CDATA>
;# the volume's current Last-Modified time; may be used in
Li & Cao & Dahlin Experimental - September 2001 16
Draft-danli-wrec-wcip-01.txt March 2001
;# conjunction with the version number to identify the version.
<!ATTLIST ObjectVolume etag CDATA>
;# the volume's current Etag; may be used in conjunction
;# with the version number to identify a volume version.
<!ELEMENT member (object+)>
<!ATTLIST member op (exclude|include|prefetch) "include">
;# whether the following objects are to be included or excluded
;# from the volume composition. Also, if the cache doesn't have
;# the object, whether it should be prefetched into the cache.
;# "prefetch" implies "include".
<!ATTLIST member state (stale|unknown) "unknown">
;# whether the enclosed objects have become stale or are still
;# fresh relative to the base version, or unknown.
<!ATTLIST member redirect-to CDATA>
;# redirect the receiver to receive updates for the following
;# objects from another invalidation channel.
<!ATTLIST member redirect-from CDATA>
;# the following objects are carried by the current channel
;# because they are redirected from another channel.
<!ELEMENT object EMPTY>
<!ATTLIST object name CDATA #REQUIRED>
;# a name (or ID) for the object, unique within the channel.
<!ATTLIST object fresh CDATA #REQUIRED>
;# the freshness guarantee of the object in seconds.
<!ATTLIST object update (yes|no) "no">
;# whether content of the new object will be sent.
<!ATTLIST object uri CDATA #REQUIRED>
;# the object URI; if the URI is a directory path instead of
;# filename, it can potentially match any object with that
;# URI prefix.
<!ATTLIST object last-modified CDATA>
;# the object's current Last-Modified time
<!ATTLIST object etag CDATA>
;# the object's current Etag
For example,
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="1"
base="0" date="Fri, 17 Nov 2000 08:22:17 GMT">
<member op="include">
<object name="amazon" fresh="120"
uri="http://www.amazon.com/index.html"
last-modified="Wed, 15 Nov 2000 04:52:01 GMT"
/>
<object name="ebay" fresh="240"
uri="http://www.ebay.com/index.html"
last-modified="Thur, 16 Nov 2000 03:18:07 GMT"
etag="yzxzyx"
/>
Li & Cao & Dahlin Experimental - September 2001 17
Draft-danli-wrec-wcip-01.txt March 2001
<object name="cnn/allpolitics/" fresh="360"
uri="http://www.cnn.com/allpolitics/"
last-modified="Fri, 17 Nov 2000 08:22:17 GMT"
/>
</member>
</ObjectVolume>
[Note: specification is needed for sending small objects in full in
the ObjectVolume and for sending the delta encoding [9] of a
slightly changed object.]
5.2 Client-Initiated Volume Synchronization
Immediately following channel subscription is always one round of
client-initiated volume synchronization. Then, subsequent rounds of
volume synchronization can be either client-initiated or server-
initiated.
Client-initiated volume synchronization is also performed whenever
the proxy notices that the current time has passed the "last
synchronization time" plus "revalidation interval". The proxy SHOULD
notice it either via timeout or whenever it cannot use a cached
object because the "last synchronization time" has been the object's
"freshness guarantee" time ago.
Four steps take place for client-initiated volume synchronization:
(1) Synchronization request: the caching proxy sends a ObjectVolume
message to the invalidation server, describing its own view of
the volume, especially the version number "A". If the proxy had
never subscribed to the channel before, the version number is
0.
(2) ObjectVolume update: the invalidation server replies with the
journal of changes to the volume since version "A" up until the
latest version "B", if the journal of changes since version "A"
is still available. The server SHOULD aggregate multiple
updates to the same object; it only needs to report the last
one. If the journal of changes is not available, it replies
with the full copy of latest ObjectVolume. If "A" is equal to
"B", the server simply echoes back the synchronization request.
(3) ObjectVolume processing: the caching proxy examines each object
entry in the update, records its freshness guarantee, compares
the cached object (if any) with the entry. If the cached
object's Etag is not equal to that in the entry and the cached
object's Last-Modified time is earlier than that in the entry,
the proxy marks the cached object as stale. If the entry URI is
a directory path instead of filename, all cached objects with
that directory prefix are marked as stale.
(4) Update "last synchronization time": set it to the time the
caching proxy sent the synchronization request.
Li & Cao & Dahlin Experimental - September 2001 18
Draft-danli-wrec-wcip-01.txt March 2001
Here are some examples. Suppose the proxy has never subscribed to
the channel before. The first synchronization request looks like:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="0">
</ObjectVolume>
The invalidation server replies with the complete ObjectVolume:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="7"
base="0" date="Fri, 17 Nov 2000 08:22:17 GMT">
<member op="include">
<object name="amazon" fresh="120"
uri="http://www.amazon.com/index.html"
last-modified="Wed, 15 Nov 2000 04:52:01 GMT"
/>
<object name="ebay" fresh="240"
uri="http://www.ebay.com/index.html"
last-modified="Thur, 16 Nov 2000 03:18:07 GMT"
etag="yzxzyx"
/>
<object name="cnn/allpolitics/" fresh="360"
uri="http://www.cnn.com/allpolitics"
last-modified="Fri, 17 Nov 2000 08:22:17 GMT"
/>
</member>
</ObjectVolume>
Suppose later the proxy disconnects from the channel and rejoins
after 10 minutes. Assuming it still keeps the volume description of
version 7, it sends a synchronization request like this:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="7"
base="7" date="Fri, 17 Nov 2000 08:22:17 GMT">
</ObjectVolume>
Suppose the volume has not changed in that 10 minutes. The
invalidation server replies:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="7"
base="7" date="Fri, 17 Nov 2000 08:42:17 GMT">
</ObjectVolume>
Li & Cao & Dahlin Experimental - September 2001 19
Draft-danli-wrec-wcip-01.txt March 2001
However, if the volume indeed has changed, the invalidation server
MUST send back an ObjectVolume description with a base equal to or
smaller than 7. Here is an example:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="9"
base="7" date="Fri, 17 Nov 2000 08:32:17 GMT">
<member op="exclude"> ;# exclude object(s) from the volume.
<object name="amazon" fresh="120"
uri="http://www.amazon.com/index.html"
last-modified="Wed, 15 Nov 2000 04:52:01 GMT"
/>
</member>
<member state="stale">
<object name="ebay" fresh="240"
uri="http://www.ebay.com/index.html"
last-modified="Thur, 17 Nov 2000 08:20:07 GMT"
etag="yzkzyx"
/>
</member>
</ObjectVolume>
But if the server is now at version 20 and no longer has records on
changes before version 10, while the client is at version 7, then
the invalidation server sends back the complete ObjectVolume
information with base="0".
5.3 Server-Initiated Volume Synchronization
While the caching proxy is required to initiate volume
synchronization whenever necessary, the invalidation server is not
required to initiate volume synchronization if it doesn't choose to
operate in server-driven mode. The invalidation server may be
configured to operate in either mode. It MAY switch between server-
driven mode and client-driven mode after any volume synchronization.
In server-driven mode, the invalidation server initiates volume
synchronization when changes are made to the object volume, or when
the channel has been silent for more than "heartbeat interval" time.
The invalidation server SHOULD initiate volume synchronization
"reasonably" soon after it learns of an object change, but it MAY
delay the synchronization until some time before the subsequent
heartbeat. It MUST NOT delay further. Such a strategy allows the
server to batch multiple changes into one update. It minimizes the
number of volume synchronization rounds without inducing unnecessary
cache misses.
Three steps take place for server-initiated volume synchronization:
(1) ObjectVolume update: if there're changes to the object volume,
the invalidation server updates its view of the object volume,
Li & Cao & Dahlin Experimental - September 2001 20
Draft-danli-wrec-wcip-01.txt March 2001
increments the version number, and organizes the changes into
an ObjectVolume update message. The server then sends this
update out as well as storing it into the volume's journal of
changes. The server SHOULD aggregate multiple updates to the
same object into one. If it's time to generate a heartbeat and
there has been no change to the volume since the last update,
the server simply sends out an update that reiterates the
current volume's version number.
(2) ObjectVolume processing: the caching proxy examines each object
entry in the update, records its freshness guarantee, compares
the cached object (if any) with the entry. If the cached
object's Etag is not equal to that in the entry and the cached
object's Last-Modified time is earlier than that in the entry,
the proxy marks the cached object as stale. If the entry URI is
a directory path instead of filename, all cached objects with
that directory prefix are marked as stale.
(3) Update "last synchronization time": in this case, there is no
synchronization request, just the server's update. To account
for possible clock skews, the proxy MUST convert the "date" in
the server's update into the proxy's local time. Suppose t1 is
the time the proxy sent out its initial synchronization request
(when it established the channel subscription), while t2 is the
"date" in the corresponding ObjectVolume update at that time.
Now, t3 is the "date" of the current update from the server,
then the "last synchronization time" is set to "t1 + (t3 -
t2)".
For example, an object modification moves the volume from version 9
to version 10. The corresponding ObjectVolume update looks like
this:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="10"
base="9" date="Fri, 17 Nov 2000 08:32:17 GMT">
<member state="stale">
<object name="ebay" fresh="240"
uri="http://www.ebay.com/index.html"
last-modified="Tue, 24 Dec 2000 16:38:20 GMT"
etag="37bb01a2-7ec-39f5bafc "
/>
</member>
</ObjectVolume>
To generate a heartbeat when there has been no change to the volume,
the server simply restates the current volume's version number. For
example:
<?xml version="1.0"?>
<!DOCTYPE ObjectVolume SYSTEM "ObjectVolume.dtd">
<ObjectVolume channel="http://cdn.net:88/ch1" version="10"
Li & Cao & Dahlin Experimental - September 2001 21
Draft-danli-wrec-wcip-01.txt March 2001
base="10" date="Fri, 17 Nov 2000 08:22:17 GMT">
</ObjectVolume>
[Note: specification is needed for sending small objects in full in
the ObjectVolume and for sending the delta encoding [10] of a
slightly changed object.]
5.4 Serving Content
When a HTTP request comes in with URI, the proxy searches its
ObjectVolume data structure for a matching entry. If an ObjectVolume
entry is a directory path instead of filename, the entry is
applicable to the URI if the URI has that directory path as prefix.
If multiple such directory entries match, the entry with the longest
match is used.
The caching proxy MUST NOT use a cached object if the cached object
is marked as stale or the current time has past the "last
synchronization time" plus the freshness guarantee of the matching
entry. Instead, the proxy MUST either perform HTTP revalidation with
the origin server before serving the object or initiate volume
synchronization with the invalidation server.
After the proxy fetched the new object into its cached (or
revalidated the existing one), the proxy MUST compare the cached
object with the corresponding entry in the ObjectVolume. If the
matching entry is a directory path or if the entry doesn't contain
Last-Modified time and Etag, the cached object MUST be marked as not
stale. Otherwise, the proxy checks if the cached object's Etag is
equal to that in the entry or the cached object's Last-Modified time
is later than that in the entry. If yes, the cached object MUST be
marked as not stale; otherwise, it's still marked as stale.
6. Protocol State Machine
6.1 Client State Machine
The initial state is "INIT". Actions may be to run a procedure,
which is defined at the end of the section.
STATE: INIT
INPUT: subscription is established to the invalidation server.
ACTION: set the "current version number" to 0; create a local
ObjectVolume data structure with 0 objects in it; initialize
"revalidation interval" to an arbitrary or pre-configured
value.
NEXT-STATE: TO-SYNC
STATE: TO-SYNC
INPUT: none
ACTION: send a synchronization request with the "current version
number"; record the current time as "sync request time"; reset
Li & Cao & Dahlin Experimental - September 2001 22
Draft-danli-wrec-wcip-01.txt March 2001
the REVALIDATION-TIMER to a value equal or smaller than
"revalidation interval".
NEXT-STATE: SYNC-INITIATED
STATE: SYNC-INITIATED or INTERIM
INPUT: receive ObjectVolume update with version number X, base Y.
CONDITION: Y is equal to or smaller than the "current version
number" and X is equal to or larger than the "current version
number".
ACTION: run procedure "process the ObjectVolume update"; set the
"current version number" to X; run procedure "set last
synchronization time"; run procedure "set revalidation
interval"; reset the REVALIDATION-TIMER to "revalidation
interval".
NEXT-STATE: INTERIM
STATE: SYN-INITIATED or INTERIM
INPUT: receive ObjectVolume update with version number X, base Y.
CONDITION: Y is larger than the "current version number" or X is
smaller than the "current version number".
ACTION: discard the message; reset the REVALIDATION-TIMER to a value
equal or smaller than "revalidation interval".
NEXT-STATE: INTERIM
STATE: SYN-INITIATED or INTERIM
INPUT: REVALIDATE-TIMER times out
NEXT-STATE: TO-SYNC
Procedure "process the ObjectVolume update": for each object entry
in the update message: add or update the entry in the internal
ObjectVolume data structure; compare the cached object (if any)
with the entry. If the cached object's Etag is not equal to
that in the entry and the cached object's Last-Modified time is
earlier than that in the entry, mark the cached object as
stale. If the entry URI is a directory path instead of
filename, all cached objects with that directory prefix are
marked as stale.
Procedure "set last synchronization time": set it to "sync request
time" if STATE==SYNC-INITIATED; otherwise, set to " sync
request time" + current time - "sync response time".
Procedure "set revalidation interval": this is where the proxy has
some liberty and can implement some policy. Picking a large
value means less aggressive synchronization, and thus higher
invalidation latency. To avoid unnecessary cache misses, the
proxy SHOULD pick a value smaller than any of the freshness
guarantees of objects in the volume. On the other hand, to limit
the load, we RECOMMEND that the proxy only revalidate if the
volume has recently seen active use.
6.2 Server State Machine
Li & Cao & Dahlin Experimental - September 2001 23
Draft-danli-wrec-wcip-01.txt March 2001
The server has two types of tasks. One is the Volume Monitor, which
keeps track of the up-to-date view of the ObjectVolume and its
journal of changes. The other is the per-client Volume Synchronizer,
which is charge of volume synchronization with each client.
Here is the Volume Monitor state machine. The initial state is
"INIT".
STATE: INIT
INPUT: the initial ObjectVolume.
ACTION: create an up-to-date ObjectVolume data structure; create an
empty journal of changes; set the current volume number to 1.
NEXT-STATE: INTERIM
STATE: INTERIM
INPUT: a change to an object in the volume is detected.
ACTION: generate the up-to-date ObjectVolume entry for the object;
update the ObjectVolume data structure; increment the current
version number; if an entry for the same object exists in the
journal of changes, remove it; enter the entry to journal of
changes. Also, send a NEED-SYNC signal to every Volume
Synchronizer.
NEXT-STATE: INTERIM
Here is the state machine for the per-client Volume Synchronizer.
The initial state is "INIT". Actions to run a procedure is defined
at the end of the section.
STATE: INIT
INPUT: a client subscribed.
ACTION: set "last update version" to 0.
NEXT-STATE: INTERIM
STATE: INTERIM
INPUT: receive client synchronization request with base version X.
ACTION: set "last update version" to X.
NEXT-STATE: TO-SYNC
STATE: TO-SYNC
INPUT: none
ACTION: send the journal of changes since the "last update version".
If the journal since then is not available, send the full
ObjectVolume. If the journal since then is empty, simply echo
the synchronization request. Set the "last update version" to
the "current version number"; run procedure "set heartbeat
interval"; set the SYNC-TIMER to the "heartbeat interval".
NEXT-STATE: INTERIM
STATE: INTERIM
INPUT: receive NEED-SYNC signal from the Volume Monitor.
CONDITION: the server elects to initiate immediate synchronization.
NEXT-STATE: TO-SYNC
Li & Cao & Dahlin Experimental - September 2001 24
Draft-danli-wrec-wcip-01.txt March 2001
STATE: INTERIM
INPUT: receive NEED-SYNC signal from the Volume Monitor.
CONDITION: the server elects to delay the synchronization.
ACTION: set the SYNC-TIMER to a value equal or smaller than the time
left on the timer. Picking a large timeout means less
aggressive synchronization, and thus higher invalidation
latency. But the timer MUST NOT be set to a value larger than
the time left.
NEXT-STATE: INTERIM
STATE: INTERIM
INPUT: SYNC-TIMER times out
NEXT-STATE: TO-SYNC
Procedure "set heartbeat interval":If the server elects to perform
no proactive invalidation, set the "heartbeat interval" to
infinite. Otherwise, the server SHOULD pick a value smaller than
any of the freshness guarantees of objects in the volume. This
is where the server has some liberty and can implement some
policy. Picking a large value means less aggressive
synchronization, and thus higher invalidation latency. The
server MAY set the heartbeat interval very high or infinite in
order to reduce load.
7. Security Considerations
In essence, web caches tend to trust the network infrastructure. If
one can spoof IP addresses or poison DNS caches, one can poison web
caches. In contrast, content providers tend to be concerned about
content integrity, besides freshness. With WCIP, web caches should
also be concerned about the denial-of-service attack where the
malicious keeps invalidating objects in a cache, preventing the
cache from doing real work.
To accommodate the various security needs of the invalidation
servers and clients, WCIP provides three channel security modes:
(1) IP-based weak security, i.e., the invalidation client accepts a
channel message if the source IP address of the invalidation
message matches the invalidation server name.
This is for those invalidation server and clients that both do not
need strong security.
(2) Public-key-based strong security with mandatory verification,
i.e., the invalidation client obtains the public key of the
channel during channel subscription (e.g., using HTTPS & SSL).
The invalidation server signs or encrypts the channel messages
with the channel's private key. The invalidation client MUST
verify the signature and discard the message if the signature
doesn't match.
Li & Cao & Dahlin Experimental - September 2001 25
Draft-danli-wrec-wcip-01.txt March 2001
This is when the invalidation server requires strong security for
the channel. The invalidation clients have to comply. For unicast,
the channel can simply be a SSL connection as in HTTPS.
To prevent intermediate node from tampering with the channel
information in the first place, the domain name of the channel MUST
be identical to that of the object's origin server. Upon channel
setup, the origin server MAY then redirect the invalidation client
to the true invalidation server via HTTPS.
(3) Public-key-based strong security with optional verification,
i.e., the invalidation client obtains the public key of the
channel during channel subscription. The invalidation server
signs all the channel messages with the channel's private key.
However, the invalidation client can choose to verify either
the signature (strong) or the source IP address (weak).
This is when the invalidation server doesn't need strong security
but wants to accommodate both clients that need and need not strong
security. The authors cannot determine the necessity of this third
option. Option 1 and 2 may be easier to support because they fit in
the HTTP and HTTPS model well. Option 3 may be easier to support
using a Beep implementation.
The above public-key solution ensures message integrity. To guard
against message replay attacks, the Etag or Last-Modified of the
updated object has to be part of the invalidation material.
8. References
1 Cao, P.; Liu, C.; "Maintaining strong cache consistency in the
World Wide Web" 17th International Conference on Distributed
Computing Systems. 27-30 May 1997. IEEE Transactions on Computers
(April 1998) vol.47, no.4 p. 445-57
2 Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997.
3 R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P.
Leach, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1",
RFC 2616, June 1999.
4 D. Li and D. R. Cheriton. "Scalable Web Caching of Frequently
Updated Objects using Reliable Multicast", 2nd USENIX Symposium
on Internet Technologies and Systems (USITS'99). October 1999.
ftp://ftp.dsg.stanford.edu/pub/papers/mmo.htm
5 Yin, J.; Alvisi, L.; Dahlin, M.; Lin, C.; "Using leases to
support server-driven consistency in large-scale systems"
Li & Cao & Dahlin Experimental - September 2001 26
Draft-danli-wrec-wcip-01.txt March 2001
Proceedings of 18th International Conference on Distributed
Computing Systems. 26-29 May 1998. p. 285-94
6 M. T. Rose, "The Blocks Extensible Exchange Protocol Framework",
IETF Internet Draft draft-ietf-beep-framework-08.
7 Tony Speakman, etc. "PGM Reliable Transport Protocol", IETF
Internet Draft draft-speakman-pgm-spec-06
8 Dilley, John; Arlitt, Martin; Perret, Stephane; Jin, Tai. "The
Distributed Object Consistency Protocol", HP Labs Technical
Report, http://www.hpl.hp.com/techreports/1999/HPL-1999-109.html,
September 1999.
9 Mogul, J.C.; Douglis, F.; Feldmann, A.; Krishnamurthy, B.,
"Potential benefits of delta encoding and data compression for
HTTP", ACM SIGCOMM 97 Conference.
10 Mogul, J.C.; Douglis, F.; Feldmann, A.; Krishnamurthy, B.,
"Potential benefits of delta encoding and data compression for
HTTP", ACM SIGCOMM 97 Conference.
9. Acknowledgments
This draft greatly benefited from the valuable comments from Carl
Sutton, Ian Cooper, Mark Nottingham, Brad Cain, Hilarie Orman, Fred
Douglis and Alex Rousskov.
10. Author's Addresses
Dan Li
Cisco Systems, Inc.
Email: lidan@cisco.com
Pei Cao
Cisco Systems, Inc.
Email: cao@cisco.com
Mike Dahlin
University of Texas
Email: dahlin@cs.utexas.edu
Li & Cao & Dahlin Experimental - September 2001 27
Draft-danli-wrec-wcip-01.txt March 2001
Full Copyright Statement
"Copyright (C) The Internet Society (date). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implmentation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph
are included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into
Li & Cao & Dahlin Experimental - September 2001 28