LinuCレベル4 システムアーキテクト システムアーキテクチャ 問14
システムアーキテクチャ/アーキテクチャの設計原則と主要パターン取引先から届く売上データのファイルを、文字コードの変換、形式の検証、名寄せ、集計の4工程で処理している。取引先ごとに一部の工程を差し替えたり工程を追加したりする要望が多い。また工程ごとの処理時間の差が大きく、時間のかかる名寄せの工程だけを増強したい。処理の構成として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「システムアーキテクチャ」に対応。実際の試験問題ではありません)
- A4工程を1つのプログラムにまとめて順番に実行させ、そのプログラム全体を複数同時に起動して並列度を上げる
- B取り込み時に1つのイベントをトピックへ発行し、4つの工程がそれぞれ購読して同じデータを同時に処理する
- C各工程を前段の出力だけを受け取って次段へ渡す独立した処理とし、工程間をキューでつないで工程ごとに並列度を決める
- D各工程を個別のサービスにし、前の工程が次の工程のAPIを同期的に呼び出して、最後の工程の応答まで待ち続ける
正解:C
解説
処理を順に適用する工程の連なりで、工程の差し替え・追加や工程ごとの増強が求められる場合は、パイプライン(パイプ/フィルター)パターンが適しています。各フィルターは入力を受け取って加工し出力を渡すだけで、他の工程の内部を知らないため、組み替えや追加が容易です。工程間をキューなどのパイプでつなげば、遅い工程だけワーカーを増やして並列度を上げられます。一方で、工程をまたぐ進行状態の管理や途中の分岐が複雑な業務では、オーケストレーションの方が向くこともあります。
選択肢ごとの解説
- A誤り。全体をまとめて多重化すると、名寄せ以外の工程も一緒に増えて資源を無駄にします。工程の差し替えもプログラム全体の改修になります。工程間の独立性が不要な単純なバッチなら妥当な構成です。
- B誤り。Pub/Subで同じデータを複数の購読者が同時に受け取る構成は、互いに独立した処理を並行させる場合に向きます。この処理は前の工程の結果を次の工程が使う順序のある流れなので合いません。
- C正しい。パイプ/フィルターの構成で、工程の差し替え・追加が容易になり、名寄せの工程だけを増強できます。
- D誤り。同期呼び出しの連鎖では、最も遅い工程が全体の応答を縛り、1つの工程の停止が前の工程すべてに波及します。工程ごとの並列度を独立に調整するのにも向きません。