Decomposing and Recomposing Transactional Concepts

Distributed systems are different from concurrent (and parallel) systems because they need to deal with failures, not just concurrency. Transactions are a way of masking the distributed nature of a computation at the programming language level by transforming all failures into aborted transactions. If a communication link goes down or a node crashes, the transaction simply aborts. Users may try again later to rerun their computation, but they are at least guaranteed that the system is left in some consistent state. Transactions are a well-known and fundamental control abstraction that arose out of the database community. They have three properties that distinguish them from normal sequential processes: (1) A transaction is a sequence of operations that is performed atomically ("all-or-nothing"). If it completes successfully, it commits; otherwise, it aborts; (2) concurrent transactions are serializable (appear to occur one-at-a-time), supporting the principle of isolation; and (3) effects of committed transactions are persistent (survive failures).