二相コミットプロトコル

Common architectureEdit

多くの場合、2PCプロトコルはコンピュータネットワークで配布されています。 これは、トランザクションごとにプロトコルの実行を実行するトランザクションマネージャ(TMs、2PCエージェントまたはトランザクション処理モニタとも呼ばれる)と呼ばれる複数の専用の2PCコンポーネントを実装することによって容易に配布される(Open GroupのX/Open XAなど)。 分散トランザクションに関係するデータベースである参加者は、コーディネータと参加者の両方が、2PCを使用してそのトランザクションを終了するためにTMsを閉じるために登録します(通常は参加者と同じネットワークノードに存在します)。 各分散トランザクションには、トランザクション参加者が登録するTMsのアドホックセットがあります。 リーダーであるコーディネータTMは、各トランザクションに対して2PC、通常はコーディネータデータベースのTMを調整するために存在します。 ただし、パフォーマンスまたは信頼性の理由から、coordinatorロールを別のTMに転送することができます。 彼ら自身の間で2PCメッセージを交換するのではなく、参加者はそれぞれのTMsとメッセージを交換します。 関連するTmは、上記の2PCプロトコルスキーマを実行するために、それらの間で通信し、そのトランザクションを終了するために、それぞれの参加者を「表す」。 このアーキテクチャでは、プロトコルは完全に分散され(中央処理コンポーネントやデータ構造は必要ありません)、ネットワークノードの数(ネットワークサイズ)に

この共通アーキテクチャは、2PC以外の他の原子コミットメントプロトコルの配布にも有効です。

Protocol optimizationsEdit

データベースの研究では、特定のシステムの動作仮定の下でプロトコルの最適化とプロトコル操作によってコストを削減しながら、二相コミットプロトコルの利点の大部分を得る方法について行われている。

推定中止と推定CommitEdit

推定中止または推定コミットは、このような最適化として一般的です。 コミットまたは中止のいずれかのトランザクションの結果についての仮定は、2PCプロトコルの実行中に参加者によるメッセージとログ操作の両方を保存することができます。 たとえば、推定中止時に、障害からのシステムリカバリ中に、リカバリ手順によってトランザクションのコミットのログに記録された証拠が見つ これは、中止がまったくログに記録されているかどうかは問題ではなく、この仮定の下でそのようなログを保存できることを意味します。 通常、最適化の種類に応じて、障害からの回復中に追加の操作のペナルティが支払われます。 したがって、最適化の最良の変種がある場合は、失敗とトランザクション結果の統計に従って選択されます。

Tree two-phase commit protocolEdit

Tree2PC protocol(ネストされた2PC、または再帰的な2PCとも呼ばれる)は、コンピュータネットワークにおける2PCの一般的な変種であり、基礎となる通信インフラストラクチャをよりよく利用する。 分散トランザクションの参加者は、通常、参加者がノードであり、エッジが呼び出し(通信リンク)であるツリー構造、呼び出しツリーを定義する順序で呼び出され 同じツリーは、2PCプロトコルによってトランザクションを完了するために一般的に利用されますが、原則として別の通信ツリーも利用できます。 ツリー2PCでは、コーディネータは通信ツリー(反転ツリー)のルート(”トップ”)とみなされ、参加者は他のノードとみなされます。 コーディネータは、トランザクションを開始したノード(他の参加者が再帰的に(推移的に)呼び出される)にすることができますが、同じツリー内の別のノードが代わ 2PCコーディネーターからのメッセージはツリーの下に”伝播”され、コーディネーターへのメッセージは、ツリーの上に適切なメッセージを送信する前に、その下のすべての参加者から参加者によって”収集”されます(abortメッセージは、受信時または現在の参加者が中止を開始した場合にすぐに”伝播”されます)。

Dynamic two-phase commit(Dynamic two-phase commitment,D2PC)プロトコルは、あらかじめ決められたコーディネータを持たないツリー2PCの変種である。 これは、以前に提案されたいくつかの最適化を包含しています。 契約メッセージ(はい投票)は、トランザクションに代わってそのタスクを完了すると、すべての葉、各葉から伝播し始めます(準備が整いました)。 中間(非リーフ)ノードは、契約メッセージがまだ受信されていない最後の(単一の)隣接ノードに契約メッセージが送信されたときにレディを送信します。 コーディネータは、トランザクションツリー上の契約メッセージを衝突する場所でレースすることによって動的に決定されます。 これらは、トランザクションツリーノード、コーディネータ、またはツリーエッジで衝突します。 後者の場合、2つのエッジのノードのうちの1つがコーディネーター(任意のノード)として選択されます。 D2PCは時間最適です(特定のトランザクションツリーのすべてのインスタンスと、特定のツリー2PCプロトコル実装の間で、すべてのインスタンスは同じツリーを持ち、各インスタンスはコーディネータとして異なるノードを持ちます): 最適なコーディネータを選択することにより、d2PCはコーディネータと各パーティシパントの両方を可能な限り最小限の時間でコミットし、各トランザクショ

コメントを残す

メールアドレスが公開されることはありません。