2フェーズコミット 【2-phase commit】 2相コミット
トランザクション処理では、振り込みにおける出金と入金のように一体不可分な連続した処理を、すべて成功かすべて失敗(途中の処理が失敗したら実行済みの処理を取り消して開始前の状態に戻す)のどちらかに制御する。
分散トランザクションでは複数の独立した処理主体が一連の処理を分担して実行するため、通常のコミット処理によって結果を確定させることができない。このような場合に、準備と確定の2段階に分けてコミットを実施する方式を2フェーズコミットという。
トランザクションの制御を司るコーディネータはまず、処理を実行して結果を返すよう参加者に通知する。各参加者はトランザクションを構成する処理を実行し、成功したら「コミット可能」の応答を返す。すべての参加者から成功の通知を受け取ったら、コーディネータはコミットを確定するよう参加者に通知する。これを受けてすべての参加者がコミットを実行することにより、トランザクション全体のコミットが完了する。
準備段階で処理に失敗した参加者がいた場合、コーディネータはトランザクションの失敗を全参加者に伝え、行った処理を取り消して巻き戻すロールバック処理を行うよう促す。参加者がコミット可能な状態で待っている際にコーディネータが故障などで停止すると、コミットもロールバックもできないまま放置されてしまうという問題がある。
(2019.1.17更新)