Interactive
2相コミット(2PC)可視化
複数のDBにまたがる更新を「全部成功」か「全部取消」にそろえる仕組みが2相コミットです。 ECサイトの注文確定(在庫DB・決済DB・ポイントDB)を題材に、PREPARE→投票→COMMIT/ABORTの流れをシーケンス図で1ステップずつ追えます。 正常系・アボート系に加えて、コーディネータがフェーズ2の途中でクラッシュするとロックが解放されなくなる「ブロッキング問題」も再生できます。
在庫・決済・ポイントの3DBが全員YES → 全員に確定を指示
PREPARE投票判定COMMITABORT / 障害ACK
1 / 14
フェーズ1: PREPAREコーディネータ → 参加者A
1. PREPARE(在庫を引き当てられるか)
PREPARE tx=8842item=A-1001 qty=1コーディネータがトランザクションIDを発行し、全参加者に「準備はできているか」を問い合わせる(フェーズ1の開始)。
要点この時点ではまだ何も確定しない。参加者は「実行できる状態」まで用意して待つだけ——ここがフェーズを2段階に分ける理由。
ここが分かる
- フェーズ1(PREPARE)でYESを返した参加者はロックを取得し、以後は自分の判断でコミットもアボートもできなくなる。コーディネータの指示を待つしかない。
- 全会一致が条件なので、1参加者のNOだけで全体のアボートが即座に決まる(原子性)。
- フェーズ2の途中でコーディネータが落ちると、指示を受け取れなかった参加者はコミットかアボートか分からない「in-doubt状態」でロックを保持したまま止まる——これが2PCの代表的な弱点。3PCやSagaパターンはこの問題を緩和するために生まれた。