過去問ドリル

LinuCレベル4 システムアーキテクト システムアーキテクチャ 問2

システムアーキテクチャ/アーキテクチャの設計原則と主要パターン

航空券と宿泊をまとめて予約するシステムで、航空側と宿泊側の各サービスが「仮押さえ」の状態を業務として扱える。両方の確保に成功したときだけ予約を確定し、どちらかが失敗したら仮押さえを解放したいため、TCC(Try-Confirm/Cancel)パターンを採用する。設計として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「システムアーキテクチャ」に対応。実際の試験問題ではありません)

正解:A

解説

TCCは、Tryで各参加者の資源を業務レベルで仮押さえし、全員のTryが成功したらConfirmで確定、いずれかが失敗したらCancelで仮押さえを解放するパターンです。仮押さえは業務上の状態として表現するため、データベースのロックを長時間保持する必要がありません。ConfirmやCancelは通信断などで再送されうるので冪等に作り、Confirm/Cancelが届かない場合に備えて仮押さえにはタイムアウトによる自動解放を設けるのが一般的です。先に確定してから打ち消すSagaと違い、確定前の資源が「仮押さえ中」として他の利用者から区別できる点が特徴です。

選択肢ごとの解説

  • A正しい。TCCでは参加者ごとにTry・Confirm・Cancelの3操作を用意し、再送に耐えるようConfirmとCancelを冪等にします。
  • B誤り。データベースのロックを全体の確定まで保持するのは2相コミット(XA)に近い方式です。TCCは業務上の仮押さえで資源を確保し、ロックを長く持たないことが利点です。
  • C誤り。先に確定させて失敗時に補償で取り消すのはSagaの考え方です。仮押さえの状態を扱えるこの要件ではTCCの利点が活かせません。
  • D誤り。Confirmも通信断などで失敗しえます。再試行と冪等性、仮押さえのタイムアウトを設計しないと資源が確保されたまま残ります。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く