分散トランザクションは分散環境内で動作し、通常はデータの場所に応じてネットワーク上の複数のノードが関与します。分散トランザクションの重要な側面はアトミック性であり、トランザクションが完全に完了するか、まったく実行されないかを保証します。分散トランザクションはデータベースに限定されないことに注意することが重要です。[ 1 ]
ベンダーコンソーシアムであるThe Open Groupは、X/Open分散トランザクション処理モデル(X/Open XA)を提案し、これはトランザクションモデルコンポーネントの動作に関する事実上の標準となった。
データベースは一般的なトランザクション処理リソースであり、多くの場合、トランザクションは複数のデータベースにまたがります。この場合、分散トランザクションは、異なる物理的な場所に分散された複数の参加データベース間で同期(またはACID特性の提供)が必要なデータベーストランザクションと見なすことができます。分離特性(ACIDのI)は、各データベースが(グローバルな)直列化可能性特性を提供していても、それが侵害される可能性があるため、マルチデータベーストランザクションにとって特別な課題となります(グローバル直列化可能性も参照)。実際には、ほとんどの商用データベースシステムは、同時実行制御に強力厳密二相ロック(SS2PL)を使用しており、参加データベースすべてがSS2PLを採用していれば、グローバル直列化可能性が保証されます。
分散トランザクションの正しい完了を保証するための一般的なアルゴリズムとして、 2フェーズコミット(2PC)があります。このアルゴリズムは通常、数ミリ秒から数分程度の短い時間でコミット可能な更新に適用されます。
また、長期間にわたる分散トランザクションも存在します。例えば、フライト、レンタカー、ホテルを予約する旅行の予約トランザクションが挙げられます。フライトの予約確認には最大1日かかる場合があるため、2フェーズコミットは適用できません。2フェーズコミットでは、その間リソースがロックされてしまうからです。このような場合は、複数のアンドゥレベルを含む、より高度な手法が用いられます。ホテルの予約をデスクに電話してキャンセルすることで取り消せるように、特定の操作を取り消す(ただし、取り消し不可能な操作は除く)システムを設計することができます。
実際には、長期間にわたる分散トランザクションは、Webサービスに基づくシステムで実装されます。通常、これらのトランザクションは、補償トランザクション、楽観主義、およびロックなしの分離の原則を利用します。X/Open標準は、長期間にわたる分散トランザクションを対象としていません。
Jakarta Enterprise BeansやMicrosoft Transaction Serverなど、いくつかのテクノロジーは分散トランザクション標準を完全にサポートしています。
イベント駆動型アーキテクチャでは、リクエスト・レスポンスパラダイムを使用して分散トランザクションを同期することができ、これは次の2つの方法で実装できます。[ 2 ]