分散 Two Phase Commit
Two Phase Commit
分散システム内の全ノードがトランザクションのコミットに合意するための分散アルゴリズム・プロトコル
役割
調停者(Corrdinator)
あるノードにたいして割り当てる
参加者(Cohorts)
ネットワーク上の調停者以外のノード
2 phase の構成
調停者が参加者の調整を行う「commit-request phase」と、調停者の決定によって全参加者がトランザクションを完了させる「commit phase」がある。
振る舞い
phase 1:commit-request phase
トランザクションに含まれる参加者から調停者にメッセージが送信され、各自が担当する操作の部分を実行する準備ができていることが調停者に通知される
このフェーズは準備とも呼ばれる
変更のコミット、変更のロールバックのいずれかを実行するために参加者が準備する
調停者が関連する各プログラムから確認を受け取ると、次のフェーズに進む
phase 2:commit phase
調停者から各プログラムに対して、トランザクションの一部として要求された変更のすべてをコミット・ロールバックするように指示が送られる
正常に実行されたロールバックでは、システムが元の状態に戻る
欠点
two phase commit は、ブロックする可能性が高い
メッセージを待っている状態では、ノードはブロックされて何もできない。
あるリソースロックを保持した状態でブロックしている場合、他のプロセスがそのリソースを獲得しようとすると、そのプロセスもブロックされる
調停者がコミットしても良いかと参加者にメッセージを送ったとき、全参加者が応答するまで調停者はブロックされる。
要は、Two Phase Commit は、故障したり復活したりするとすぐ壊れる。
参考
https://ja.wikipedia.org/wiki/2相コミット
https://learn.microsoft.com/ja-jp/host-integration-server/core/two-phase-commit2