2相コミットの解説(応用情報技術者シラバス用語)

目次

2相コミットとは

2相コミット(2フェーズコミット)とは、複数のサーバーに分散しているデータベース群において、データの更新処理(トランザクション)を行う際、すべてのデータベースで一斉に更新を確定(コミット)させるか、あるいは一斉に取り消す(ロールバック)かを厳密に揃えるためのプロトコル(ルール)です。

システムがいくつかのサーバーに分かれている場合、一部のサーバーだけ更新に成功し、別のサーバーが通信エラーなどで失敗してしまうと、システム全体でデータの矛盾が生じてしまいます。これを防ぐために、司令塔となる「調整役(コーディネーター)」が、各データベースの「参加者(コホート)」に対して、第1段階で「準備はできたか?」と問いかけ、全員からOKの返事を貰った後の第2段階で初めて「実行(コミット)せよ」と指示を出す、2段階のステップを踏んで処理を進めます。

具体例

ネットショッピングの決済と在庫管理の連携を考えます。「決済サーバー」で代金を引き落とし、「倉庫サーバー」で商品の在庫を減らす処理を同時に行う際、2相コミットを使います。まず両方に「準備はいい?」と聞き、もし倉庫サーバーで「在庫が切れた」などの理由でNGが出れば、決済処理も即座に取り消して、お金だけ引き落とされるような最悪のトラブルを防ぎます。

もう少し詳しく

2相コミットプロトコル(2PC)は、分散トランザクションにおけるアトミック性(All or Nothing)を保証するための最も標準的な手法です。第1相は「準備相(Prepare Phase)」と呼ばれ、コーディネーターがすべてのコホートに準備要求を送信し、コホートは自身のローカルデータにロックをかけ、更新可能であれば「Vote Commit(コミット可)」、不可能であれば「Vote Abort(中断)」の返答を送ります。第2相は「コミット相(Commit Phase)」で、全員が「Vote Commit」を返した場合にのみ、コーディネーターが全員へ「Global Commit(全体確定)」を送信します。1台でも「Vote Abort」を返した、あるいはタイムアウトした場合は「Global Abort(全体取消)」となり、全員が元の状態にロールバックします。2PCの欠点として、コーディネーターが第2相の途中でダウンした場合、コホートがロックを保持したまま待機状態になってしまう「ブロッキング状態」が発生するリスクがあり、これを克服するために3相コミット(3PC)などの発展型プロトコルも考案されています。

試験でのポイント

試験では、2相コミットの第1フェーズ(準備)と第2フェーズ(実行)でそれぞれどのような情報のやり取りが行われるかが問われます。また、一部のサーバーで障害が発生した際(例えば、準備フェーズで1台でも「否」を応答した場合、あるいはコミットフェーズ中にコホートが異常終了した場合)にシステム全体がどのようにロールバックまたはコミットの同期をとるのか、処理のフロー図と合わせて理解しておく必要があります。さらに、分散データベースの特性である「アトミック性」を維持するための重要な基盤技術であるという位置づけもしっかり押さえておきましょう。

関連する用語

2相コミットに関連する用語としては、分散処理を統制する「調整役(コーディネーター)」や、処理を実行する「参加者(コホート)」があります。また、トランザクションの取り消しを意味する「ロールバック」や、2相コミットのブロッキング問題を解決する「3相コミット(3PC)」、そしてデータ処理の信頼性を保証する「ACID特性」も重要な関連概念です。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ