【にふぇーずこみっと】

2フェーズコミット とは?

💡 「全員OK?」→「じゃあ全員確定!」の2段階合意
📌 このページのポイント
2フェーズコミット(2PC) コーディネーター 参加者A (DB1) 参加者B (DB2) 参加者C (DB3) Phase 1: Prepare「コミットできる?」→ 全員「OK!」 Phase 2: Commit「全員確定して!」→ 全員コミット完了 1人でもNG → 全員ロールバック(データの一貫性を保つ)
2フェーズコミットのイメージ
ひよこ ひよこ

2フェーズコミットって何?普通のコミットと何が違うの?

ペンギン先生 ペンギン先生

普通のコミットは1つのデータベースの中で完結するけど、2フェーズコミットは複数のデータベースをまたいだトランザクションを安全に確定する仕組みだよ。たとえば銀行のA口座からB口座に送金するとき、A銀行とB銀行の両方を同時に成功させないとお金が消えちゃうよね

ひよこ ひよこ

たしかに!片方だけ成功したら大変だね。どうやって両方そろえるの?

ペンギン先生 ペンギン先生

まず第1フェーズで「コーディネーター」という司会役が全参加者に「コミットできる準備はできた?」って聞くんだ。全員が「OK!」と返事したら、第2フェーズで「じゃあ全員確定して!」と指示を出すよ

ひよこ ひよこ

もし誰かが「NG」って言ったらどうなるの?

ペンギン先生 ペンギン先生

1人でも「NG」があれば、全員にロールバック命令を出して全部なかったことにするよ。結婚式の「異議のある方はいませんか?」に似てるね。1人でも異議があれば中止だよ

ひよこ ひよこ

わかりやすい!でも弱点とかないの?

ペンギン先生 ペンギン先生

コーディネーターがダウンすると全員が「待ち状態」のまま止まっちゃう問題があるんだ。これを「ブロッキング問題」って呼ぶよ。だから改良版の3フェーズコミット(3PC)や、最近ではSagaパターンのような代替手法も使われるよ

ひよこ ひよこ

マイクロサービスでも使われるのかな?

ペンギン先生 ペンギン先生

マイクロサービスでは2PCは重すぎるから、代わりにSagaパターンで「補償トランザクション」を使うことが多いね。でも従来型のRDBMS間連携ではXAプロトコルという標準仕様で2PCが今も現役で使われているよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「2フェーズコミット」って出てきたら「みんなに"準備OK?"って聞いてから一斉に確定する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Two-Phase Commit」 = 2段階確定
💬 文字通り2つの段階(Phase)を経てコミットするから2フェーズコミットだよ。略して2PCとも呼ばれるよ
← 用語集にもどる