The design for this system centers on replication of shared data. When a cached object is modified, an update record is created. The update must be transmitted to all clients. Each client will decide if the update should be applied.
There are many design decisions that affect the path an update takes between the client that creates it and the clients that apply it. How does an update enter the system? How is it replicated to all clients? What criteria determines if it is applied? When is it applied and exposed to the user?
Our implementation of a simple shared data space is based on a client/server structure. Client-side Relay caches accept updates from DCA applications, and forward them to a Relay server for propagation to all clients. When caches receive an update from the server, they use timestamps from logical clocks [11] and a ``last writer wins'' policy to determine if the update should be applied.