Q1 — 単一選択ECサイトでは、商品詳細APIが付加情報生成サービスを同期呼び出ししています。
付加情報は商品詳細の応答に必須ではありませんが、このサービスで遅延が発生すると商品詳細APIの待機スレッドが増え、最終的には商品閲覧全体の応答時間が悪化します。
モダナイゼーション時に最も優先して確認すべき点はどれですか。
A. 付加情報サービスと商品詳細APIで同じインスタンスタイプを利用しているか
B. 必須ではない下流処理の遅延が上流APIの処理資源を占有し、障害範囲を拡大している依存関係
C. 商品詳細APIと付加情報サービスのログ保存期間を同じ値に設定できるか
D. 付加情報サービスを商品詳細APIと同じデプロイパッケージへ統合できるか
答えと解説
答え:B
本来独立してよい付加処理の遅延が上流APIの処理資源を消費し、利用者向け機能全体へ影響しています。このような障害・性能の波及はTight Couplingを示す運用上の兆候であり、疎結合化候補として優先的に評価します。
Q2 — 単一選択既存システムでは、受付APIがデータベースの作業テーブルへ処理要求を書き込み、複数のワーカーが同じテーブルを定期的にポーリングしています。
作業テーブルのロック制御、処理済み状態、再実行状態をアプリケーション独自で管理しており、テーブル構造を変更すると受付側とワーカー側の両方を変更する必要があります。
モダナイゼーションとして最も適切な検討はどれですか。
A. 作業テーブルの列を増やし、受付側とワーカー側でさらに多くの状態を共有する
B. 1件の作業を後から処理する受け渡し責任をAmazon SQSへ移せるか評価する
C. ポーリング間隔を短くし、データベースへの問い合わせ回数を増やす
D. 受付APIとすべてのワーカーを1つのプロセスへ統合して同時にデプロイする
答えと解説
答え:B
このシステムにはすでに「受付」と「後処理」を分けるAsynchronous Processingが存在します。一方、作業の受け渡しや状態管理を共有データベースへ独自実装しています。1件の作業を後から処理する境界としてAmazon SQSへ責任を移せるかが、モダナイゼーション上の検討点になります。
Q3 — 単一選択顧客向け受付処理と画像変換処理が同じワーカープールを共有しています。
画像変換で異常なCPU使用と大量の再試行が発生した際、共有ワーカープールが枯渇し、画像変換とは無関係な受付要求まで処理できなくなりました。
Failure Isolationを改善するモダナイゼーション目標として最も適切なものはどれですか。
A. 画像変換の負荷が上昇した場合、受付処理も同時に停止させてシステム全体の状態を揃える
B. 受付処理と画像変換で引き続き同じ処理資源を共有し、最大容量だけを増やす
C. すべての受付要求を画像変換完了まで待機させ、処理順序を統一する
D. 画像変換側の障害や高負荷を画像処理側へ限定し、受付処理が独立して処理を継続できる境界を作る
答えと解説
答え:D
ここでの問題は、画像変換の障害が共有処理資源を通じて受付処理まで拡大していることです。Failure Isolationでは、障害をなくすことではなく、画像変換側の障害・高負荷をその処理領域へ限定し、無関係な受付処理へ波及させない境界を作ることを目標にします。
Q4 — 単一選択既存システムでは、受付コンポーネントと画像処理コンポーネントを同じ台数で増減していました。
疎結合化後は受付側が作業要求を非同期に受け渡し、画像処理側が独立して処理できます。
Scalabilityの改善として最も適切なものはどれですか。
A. 受付側と画像処理側を常に同じ台数にし、片方の需要だけが増えても両方を増やす
B. 受付側と画像処理側をそれぞれの需要と処理特性に合わせて独立してスケールさせる
C. キューを導入したため画像処理側の処理能力を監視せず、固定台数のままにする
D. 疎結合化したため受付側の需要が増えても、どのコンポーネントもスケールさせない
答えと解説
答え:B
Loose Couplingによって受付側と画像処理側を独立した拡張境界として扱いやすくなります。疎結合化は処理能力を不要にする仕組みではなく、各コンポーネントをそれぞれの需要と処理特性に応じて拡張できるようにするものです。
Q5 — 単一選択2つのコンポーネントをAmazon SQSで分離しましたが、送信側は受信側の内部データベーステーブルをそのまま表現したメッセージを送っています。
そのため受信側のテーブル変更のたびに送信側も同時改修が必要です。
Loose Couplingを強める改善として最も適切なものはどれですか。
A. 受信側の内部テーブル構造をメッセージ契約として固定し、今後も送信側へ公開し続ける
B. 必要な業務情報だけを含む明示的で互換性を管理したメッセージ契約を定義し、受信側の内部実装から分離する
C. 送信側から受信側データベースへ直接接続し、メッセージを使わず同じテーブルを更新する
D. 受信側の内部実装を変更するたびに送信側を同じリリースで必ず再デプロイする
答えと解説
答え:B
キューを挟んだだけでは、データ契約が受信側の内部実装へ密結合している状態は解消されません。コンポーネント間で必要な業務情報を明示した契約を使用し、受信側の内部テーブル構造などから分離することで、変更の影響を限定しやすくなります。