過去問ドリル

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

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

注文・在庫・決済の各サービスがそれぞれ専用のデータベースを持つマイクロサービス構成で、注文処理全体の整合性をSagaパターンで保つことにした。Sagaの設計に関する説明として適切でないものはどれか。

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

正解:C

解説

Sagaは、各サービスのローカルトランザクションを順に確定させ、途中で失敗したら確定済みのステップを補償トランザクションで打ち消す方式です。各ローカルトランザクションはその時点でコミットされるため、Saga全体が終わる前でも中間状態が他の処理から見えます。つまりACIDの分離性(I)を持たないので、「保留中」のような状態を持たせる、更新前に再読込するなどの対策を設計に組み込む必要があります。2相コミットのように全参加者のロックを保持し続けないため、長時間にわたる業務処理に向いています。

選択肢ごとの解説

  • A誤り(正しい記述)。Sagaはロールバックの代わりに、確定済みのステップを業務的に打ち消す補償トランザクションで整合性を回復します。
  • B誤り(正しい記述)。通信断や再試行で補償が複数回届くことがあるため、補償トランザクションは冪等に作るのが原則です。
  • C正しい(誤っている記述)。各ローカルトランザクションは即座にコミットされるため中間状態は他から見えます。Sagaは分離性を持たないので、その影響を設計で抑える必要があります。
  • D誤り(正しい記述)。どのステップまで進んだかを永続化しておかないと、障害後に再開すべきか補償すべきかを判断できません。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く