2相コミットとは?
分散トランザクションで複数のデータベースサーバーに対して一貫してコミットまたはロールバックを保証するプロトコル。Prepare(準備)とCommit(確定)の2段階で合意を取る
詳細解説
2相コミット(Two-Phase Commit: 2PC)は、複数のデータベースノード(参加者)にまたがる分散トランザクションで、全ノードがトランザクションをコミット(確定)するか全ノードがロールバック(取り消す)かを一致させるための合意プロトコルです。「部分的なコミット(一部ノードはコミット・他はロールバック)」を防ぎ、分散環境でのACID特性のうち「Atomicity(原子性)」を実現します。2相コミットの流れは次の2段階です。第1相(Prepare Phase:準備フェーズ):コーディネーター(調整役サーバー)が全参加者に「コミットできるか?」を問い合わせます。各参加者はトランザクションを実行済み・ロールバック可能な状態にして「Yes(コミット可)」または「No(コミット不可)」を返答します。第2相(Commit Phase:確定フェーズ):全参加者が「Yes」の場合、コーディネーターは全参加者に「コミットせよ」を送信。全員がコミットを完了します。一人でも「No」または応答なし(タイムアウト)の場合、コーディネーターは全参加者に「ロールバックせよ」を送信。全員がロールバックします。2相コミットの問題点はコーディネーター単一障害点(コーディネーターが第2相途中で障害すると参加者がコミット・ロールバックの判断をできない「ブロッキング問題」)・レイテンシ増加(通信ラウンドトリップが2往復必要)・スループット低下です。これを改善した3相コミット(3PC)やSaga パターン(補償トランザクション)が分散システムで使われます。ITパスポートでは「2相コミットの目的(分散原子性)」「Prepare/Commitの2段階の流れ」「ブロッキング問題」が出題されます。
ITパスポートでの出題ポイント
- 1分散トランザクションで全ノード一致してコミットorロールバックを保証
- 2第1相(Prepare:コミット可否確認)→第2相(Commit/Rollback指示)の2段階
- 3全参加者がYesの場合のみコミット・一人でもNoや無応答でロールバック
- 4コーディネーター障害時のブロッキング問題が欠点