2相コミットで分散トランザクションの原子性を保証する場合,ネットワーク障害の発生によって参加者のトランザクションが,コミットすべきか又はロールバックすべきかを判断できなくなることがある。
このような状況を発生させるネットワーク障害に関する説明として,適切なものはどれか。
正答2
解説
正解は2です。
2相コミット(2フェーズコミット)で、参加者がコミットかロールバックかを判断できなくなる状況を問う問題です。
2相コミットでは、調停者がまず全参加者にコミット可否を問い合わせます(第1相)。
全員から可の応答がそろえばコミット、一つでも否や無応答があればロールバックを決定し、参加者に送ります(第2相)。
可と応答した参加者は、決定が届くまで自分ではどちらにも決められない状態で待ちます。
【選択肢別解説】
1:× 問合せ前に障害が起きた場合、参加者はまだ可否を応答していません。
調停者もコミットを決定できないので、参加者はロールバックしても整合が保てます。
2:○ 可と応答した参加者は、調停者の決定を待つ状態にあります。
決定を送る直前に障害が起きると、調停者がどちらに決めたかを知る手段がなく、判断できなくなります。
3:× 応答を返す直前に障害が起きると、調停者には応答が届きません。
調停者はコミットを決定できずロールバックするので、参加者もロールバックすれば整合します。
4:× 完了を返す直前の時点では、参加者はすでに決定を受け取って実行しています。
判断に迷う状況にはなりません。
【ポイント】
2相コミットの弱点は、可と応答した後に調停者からの決定が届かないと参加者が待ち続けること(ブロッキング)です。
これを改善した方式に3相コミットがあります。