【にふぇーずこみっと】

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とも呼ばれるよ
← 用語集にもどる