1.2. CHALLENGES 5
data items. Our company employes a Read-one-write-all (ROWA) replication strategy: the update
of a data item is performed at all replicas, while a read operation accesses a single replica. ROWA
can be implemented in various ways. The fundamental differences between existing approaches lie
in where and when copies are updated [Gray et al., 1996]. In regard to where, our company uses a
primary copy approach.There is one database replica that is considered the primary (replica). It holds
the primary copy of the database. The other replicas hold secondary copies and are called secondary
(replicas). All update requests are sent to the primary replica and are first executed there. An update
request might read and write several data items. All writes are forwarded to the secondaries where
they are also executed. Read-only requests can be executed at the primary or the secondaries. They
can execute completely locally without coordination with other replicas.
In regard to when copies are updated, our company uses an eager approach, also referred to
as synchronous replication. The secondaries apply the changes to their own copies immediately when
they receive them, and then send a confirmation to the primary. Only when the primary knows that
all secondaries have the changes, it confirms to the user that the execution was successful.
Primary copy vs. update anywhere. The use of a primary replica forces all updates to be executed
first at a single node.This simplifies the coordination of concurrent update requests. However, it has
several disadvantages. For example, the primary can become a bottleneck. The alternative is to use
an update anywhere approach (also called update everywhere). Each replica accepts both update and
read-only requests and is responsible for their execution. While it avoids the pitfalls of the primary
copy approach, it has its own problems. In particular, it is much harder to guarantee consistency as
data copies might now be updated concurrently at different replicas.
Eager vs. lazy. By using eager replication, the primary only returns a confirmation to the user once
all secondaries have the updates executed. Thus, copies are “virtually" consistent. However, clients
might experience prolonged response times due to the replication coordination.Especially with wide
area replication, this can become a serious problem. Also network connectivity can be spotty in wide
area networks, and the entire service might render unavailable if one replica is not reachable due to
network problems.The alternative is to use lazy replication, also called asynchronous replication. With
lazy replication, an update request is completely executed at one replica, which propagates the writes
to the other replicas after returning a confirmation to the client.Thus, the coordination tasks do not
affect the user. However, maintaining consistency is more difficult, as the same update takes place
at different times at the various replicas.
Additionally, when lazy replication is combined with update anywhere, two updates concur-
rently submitted to two replicas can update the same data item and succeed. Later,when the updates
are propagated, the system has to detect such conflict, possibly undo one of the updates despite the
fact that the client was already informed that the update was successful.
Transactions. Although we have not yet mentioned it, but to many readers, it will probably already
be obvious that many of the applications that require replication will also require transactions and
their properties – in particular atomicity, isolation and durability. In fact, it is pretty straightforward