A distributed transaction is a
database transaction in which two or more network hosts are involved. Usually, hosts provide transactional resources, while the transaction manager is responsible for creating and managing a global transaction that encompasses all operations against such resources. Distributed transactions, as any other
transactions, must have all four
ACID (atomicity, consistency, isolation, durability) properties, where atomicity guarantees all-or-nothing outcomes for the unit of work (operations bundle).
Open Group, a vendor consortium, proposed the
X/Open Distributed Transaction Processing (DTP) Model (X/Open XA), which became a de facto standard for behavior of transaction model components.
Databases are common transactional resources and, often, transactions span a couple of such databases. In this case, a distributed transaction can be seen as a
database transaction that must be
synchronized (or provide
ACID
In computer science, ACID ( atomicity, consistency, isolation, durability) is a set of properties of database transactions intended to guarantee data validity despite errors, power failures, and other mishaps. In the context of databases, a sequ ...
properties) among multiple participating
databases which are
distributed among different physical locations. The
isolation property (the I of ACID) poses a special challenge for multi database transactions, since the (global)
serializability property could be violated, even if each database provides it (see also
global serializability
In concurrency control of ''databases'', ''transaction processing'' (''transaction management''), and other transactional distributed applications, global serializability (or modular serializability) is a property of a ''global schedule'' of tran ...
). In practice most commercial database systems use
strong strict two phase locking (SS2PL) for
concurrency control, which ensures global serializability, if all the participating databases employ it. (see also
commitment ordering for multidatabases.)
A common
algorithm for ensuring
correct completion of a distributed transaction is the
two-phase commit (2PC). This algorithm is usually applied for updates able to
commit in a short period of time, ranging from couple of milliseconds to couple of minutes.
There are also long-lived distributed transactions, for example a transaction to book a trip, which consists of booking a flight, a rental car and a hotel. Since booking the flight might take up to a day to get a confirmation, two-phase commit is not applicable here, it will lock the resources for this long. In this case more sophisticated techniques that involve multiple undo levels are used. The way you can undo the hotel booking by calling a desk and cancelling the reservation, a system can be designed to undo certain operations (unless they are irreversibly finished).
In practice, long-lived distributed transactions are implemented in systems based on
Web Services. Usually these transactions utilize principles of
compensating transactions, Optimism and Isolation Without Locking. X/Open standard does not cover long-lived
DTP.
Several technologies, including
Enterprise Java Beans (EJBs) and
Microsoft Transaction Server (MTS) fully support distributed transaction standards.
See also
*
Java Transaction API (JTA)
*
Enduro/X Open source X/Open XA and XATMI implementation
References
*
*
*
Further reading
* Gerhard Weikum, Gottfried Vossen, ''Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery'', Morgan Kaufmann, 2002,
{{DEFAULTSORT:Distributed Transaction
Data management
Transaction processing