分散トランザクション

分散トランザクション（ぶんさんトランザクション、）は、コンピュータ分野におけるトランザクション処理の処理形態の1つであり、ネットワーク上の2つ以上のホスト（処理するコンピュータ）が関連する、1まとまりの操作（処理、取引、トランザクション）のことを示す。

概要 
トランザクション処理では通常、ホストが"トランザクション的資源"を提供し、"トランザクションマネージャ"が、資源に対する全ての操作を含んだトランザクションを管理する。分散トランザクションの場合も、他のトランザクションと同様に、4つのACID特性全てを満たし、作業の単位（一まとまりの操作）に対して、結果が完了するか全く行われないかのどちらかになるという原子性が保証される。

Open Group コンソーシアムがX/Open Distributed Transaction Processing (DTP) Modelを提唱しており、これは分散トランザクションモデルに従うコンポーネントの振る舞いのデファクトスタンダードになっている。

データベースはトランザクション的な永続性記憶資源として一般的なもので、複数のデータベースにトランザクションがまたがることも頻繁にある。厳密には、単一DBMS内で異なる物理的ノードに分散コンピューティングしたデータベースにするのが分散データベースであり、複数DBMS間にまたがるトランザクションが分散トランザクションである。異なるDBMSが異なる資源管理であり、異なる資源管理間の同期を取る (あるいは、ACID特性を実現させる）サブシステムがトランザクションマネージャである。

分離性(ACIDのI, Isolation)は、複数のデータベースにかかわるトランザクションにおいて、特別な考慮を必要とする。各データベースが直列化可能性 を守っていても、大域的には特性が破られてしまう（大域直列化可能性参照)可能性がある。実際には、商用のデータベースシステムは並行性制御のために、厳密な二相ロック(SS2PL)を使用する。参加する全てのデータベースがこれを採用すれば、大域的な直列化可能性を保証することができる(コミット順序を参照）。

分散トランザクションの正しい完了を保証する一般的な方法は2相コミットプロトコルである。このアルゴリズムは通例数ミリ秒から数分単位の短い時間でコミットできる更新操作に適用される。

寿命の長い分散トランザクションも存在する。たとえば旅行を予約するトランザクションは航空券の予約、レンタカー、ホテルの予約などからなる。航空券の予約は確認が取れるまで数日かかることもあるため、資源を長期間ロックしてしまう二相コミットは適用できない。この場合より適切な方法は、複数のアンドゥレベルを持つことである。これにより、ホテルの予約をキャンセルし、システムは特定の操作をアンドゥできるよう設計することができる（不可逆な操作が完了の場合を除く）。

長寿命の分散トランザクションは、Webサービス上に実装されている。これらのトランザクションは補償トランザクションの原則を用いており、ロックを施さず楽観的に分離性が保たれているものとする。 X/Open の標準でも、超寿命の分散トランザクション処理は対象としていない。

Enterprise JavaBeans(EJB) やMicrosoft Transaction Server(TMS)といった多数の現代的なテクノロジーが分散トランザクションの業界標準をそれなりにサポートしている。

参照

関連項目
トランザクション
トランザクション処理
トランザクションモニター
分散システム
分散処理

データベース
分散処理