Insider's Eye:Webサービスのフレームワークを定義するGXA
|
|
Greg DeMichillie |
Microsoft、IBM、BEA Systemsの3社が開発し、8月に公開したWS-Transactionは、データベース操作の整合性を確保することを目的に、Webサービスが自身の動作を調整する方法を規定した仕様だ。WS-Transactionでは、Webサービスによるトランザクションのモデルが2つ定義されている。最高レベルの保護が要求される場合のためのアトミック・トランザクションと、より緩やかな保護を採用して高い拡張性を提供するビジネス・アクティビティ・トランザクションだ。
強力な保護を実現するアトミック・トランザクション
WS-Transactionは、アトミック(オール・オア・ナッシングの)トランザクションをサポートする。アトミック・トランザクションでは、コーディネータがトランザクションの各参加者に問い合わせを行い、参加者が更新を処理可能かどうか確認する。各参加者は通常、トランザクションの処理中にデータが変更されるのを防ぐため、トランザクションにかかわるすべてのデータベース・レコードをロックする。すべての参加者からコミットの準備が整っていることを通知された場合にのみ、コーディネータは参加者に変更を指示する。いずれかの参加者がトランザクションを拒否するか、応答しなかった場合は、コーディネータはすべての参加者にトランザクションの中止と変更の破棄を指示する。こうしたプロセスは「2フェーズ・コミット」(2PC)と呼ばれており、MicrosoftのDistributed Transaction Coordinator(DTC)やIBMのCICSなどの製品で広く利用されている。
WS-Transactionは、Webサービスが2フェーズ・コミットを用いて自身の要求を登録する方法と、Webサービス同士が状態情報(トランザクションの拒否など)をやりとりする方法を規定する。
2フェーズ・コミットは企業内アプリケーションで広く使われている技術だが、難点もある。このアプローチでは、トランザクションにかかわる各データベースはトランザクションの間、レコードの何らかのロックを保持する必要があり、ほかのクライアントはロックされているレコードを使用できないことだ。
一般に、企業内ネットワークで実行されるトランザクションの時間は比較的短いが、インターネットは非常に分散的な構造を持っているため、Web上でのロックの保持、そして企業の垣根を越えたWebサービスにおけるロックの保持は、厄介な問題をはらんでいる。例えば、メーカーは流通業者が注文を処理したにもかかわらず、流通業者を信頼して在庫データベースを何日もロックするといったハメになるのは避けたいはずだ。また、一時的なネットワーク障害により、保留中だったすべてのトランザクションのロールバックと再実行が必要になるのも望ましい事態ではない。
長時間のトランザクションをサポートする
ビジネス・アクティビティ・モデル
すべてのデータベース・レコードのロックを要求せずにトランザクションをサポートする必要性に対処するため、WS-Transactionではビジネス・アクティビティと呼ばれるトランザクション・モデルも定義している。ビジネス・アクティビティは、実行時間の長さと参加者間の緩やかな信頼関係からアトミック・トランザクション・モデルの適用が不適切となる長時間のトランザクション向けに設計されている。
ビジネス・アクティビティでは補償がキー概念となっている。補償の概念に基づくトランザクション・モデルは、トランザクションの各参加者に対し、全参加者が承認するまでデータをロックして、変更のコミットを待機するよう要求することなく、すべての更新が成功すると仮定し、変更を即時にコミットする。だが、その一方で、変更を取り消す手段も用意しており、いかなる要素の失敗も修正する。銀行の口座振替の例でいえば、口座から出金するビジネス・アクティビティは、トランザクションのもう一方の要素が失敗した場合に更新を無効にする(この例では、借方記入を相殺するために貸方に記入する)準備を行う。
WS-Transactionは密結合型のアトミック・トランザクションに加え、疎結合型のビジネス・アクティビティ・トランザクションをサポートする。このサポートは、あるWebサービスが別のWebサービスに以前の変更を無効にするよう要求する方法を規定することで実現されている。いずれかの参加者が失敗を通知した場合、プロセス全体を開始したWebサービスは、ほかのすべての参加者に変更の取り消しを要求できる。
しかし、ビジネス・アクティビティにも短所がないわけではない。変更が即時にコミットされるため、ビジネス・アクティビティ・トランザクションでは、中間結果がほかのデータベース・クライアントからアクセス可能になる。アトミック・トランザクションが実行中のトランザクションの高度な分離を行うのとは対照的だ。前述した銀行の口座振替の例でいえば、借方記入が行われてから、問題が生じた結果として貸方に記入されるまでの間の時間に、ほかのアプリケーションが口座残高を問い合わせ、誤った結果を取得する恐れがある。
Directions on Microsoft日本語版 本記事は、(株)メディアセレクトが発行するマイクロソフト技術戦略情報誌「Directions on Microsoft日本語版」から、同社の許可を得て内容を転載したものです。Directions on Microsoftは、同社のWebサイトより定期購読の申込みができます。 |
INDEX | ||
Insider's Eye | ||
Webサービスのフレームワークを定義するGXA(1) | ||
Webサービスのフレームワークを定義するGXA(2) | ||
コラム:Web Services Development Kitの最新プレビュー版が公開 | ||
コラム:WS-Transaction仕様がリリース | ||
Insider's Eye |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|