分散トランザクションは分散環境内で動作し、通常はデータの場所に応じてネットワーク上の複数のノードが関与します。分散トランザクションの重要な側面は原子性であり、これによりトランザクションが完全に完了するか、まったく実行されないことが保証されます。分散トランザクションはデータベースに限定されないことに注意することが重要です。[1]
ベンダーコンソーシアムであるOpen Group は、トランザクションモデルコンポーネントの動作に関する事実上の標準となった X/Open 分散トランザクション処理モデル(X/Open XA) を提案しました。
データベースは一般的なトランザクション リソースであり、多くの場合、トランザクションはそのようなデータベースの 2 つにまたがります。この場合、分散トランザクションは、異なる物理的な場所に分散されている複数の参加データベース間で同期される(またはACIDプロパティを提供する)必要のあるデータベース トランザクションと見なすことができます。分離プロパティ (ACID の I) は、複数のデータベース トランザクションにとって特別な課題となります。これは、各データベースが (グローバル)直列化可能性プロパティを提供している場合でも、そのプロパティに違反する可能性があるためです (グローバル直列化可能性も参照)。実際には、ほとんどの商用データベース システムでは、同時実行制御に強力で厳密な 2 フェーズ ロック (SS2PL) を使用しており、参加しているすべてのデータベースがそれを採用している場合、グローバル直列化可能性が保証されます。
分散トランザクションの正しい完了を保証するための一般的なアルゴリズムは、 2 フェーズ コミット(2PC) です。このアルゴリズムは通常、数ミリ秒から数分の短時間で コミットできる更新に適用されます。
また、長期間存続する分散トランザクションもあります。たとえば、フライト、レンタカー、ホテルの予約からなる旅行の予約トランザクションです。フライトの予約は確認までに最大 1 日かかる場合があるため、2 フェーズ コミットはここでは適用できず、この間リソースがロックされます。この場合、複数の元に戻すレベルを伴うより高度な手法が使用されます。ホテルの予約をデスクに電話して予約をキャンセルすることで元に戻すことができるのと同じように、特定の操作を元に戻すようにシステムを設計できます (元に戻せない形で終了した場合を除く)。
実際には、長期分散トランザクションはWeb サービスに基づくシステムに実装されています。通常、これらのトランザクションは、補償トランザクション、楽観主義、およびロックなしの分離の原則を活用します。X/Open 標準では、長期分散トランザクションはカバーされていません。[引用が必要]
Jakarta Enterprise BeansやMicrosoft Transaction Serverなどのいくつかのテクノロジは、分散トランザクション標準を完全にサポートしています。
同期
イベント駆動型アーキテクチャでは、分散トランザクションはリクエストレスポンスパラダイムを使用して同期することができ、2つの方法で実装できます。[2]
- 2 つの個別のキューを作成します。1 つはリクエスト用、もう 1 つは応答用です。イベント プロデューサーは、応答を受信するまで待機する必要があります。
- リクエストごとに専用の一時キューを 1 つ作成します。
参照
参考文献
- 「Web サービス トランザクション」。2008 年 5 月 11 日時点のオリジナルよりアーカイブ。2005年5 月 2 日閲覧。
- 「トランザクション処理の基本」。トランザクション管理に関する記事。2018 年 7 月 13 日時点のオリジナルからアーカイブ。2005年5 月 3 日閲覧。
- 「Enterprise JavaBeans (EJB) と Microsoft Transaction Server (MTS) モデルの詳細な比較」。
さらに読む
- ゲルハルト・ヴァイクム、ゴットフリート・フォッセン、「トランザクション情報システム:同時実行制御と回復の理論、アルゴリズム、実践」、モーガン・カウフマン、2002年、ISBN 1-55860-508-8
