過去問ドリル

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

システムアーキテクチャ/柔軟性を高めるアーキテクチャパターン

注文サービスが発行する注文イベントを、配送・請求の2つのサービスが処理している。新たに需要予測サービスを追加するにあたり、過去7日分の注文イベントを最初から読み直して学習させたい。また、障害で止まったサービスは、再開後に自分が止まった位置から処理を続けたい。既存のサービスの処理には影響させない。イベントの受け渡し方式として最も適切なものはどれか。

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

正解:D

解説

ストリーム(ログ型のメッセージング)は、イベントを順序付きで一定期間保持し、読み手ごとに読み取り位置を管理させる方式です。読み手は互いに独立しているため、新しいサービスを追加しても既存のサービスの処理に影響せず、保持期間内であれば過去のイベントを先頭から読み直せます。障害で止まった読み手も、記録しておいた位置から処理を再開できます。作業キューは取り出したメッセージを消費して消すため、複数サービスへの配信や過去分の再処理には向きません。

選択肢ごとの解説

  • A誤り。作業キューは1件のメッセージを1つのワーカーが処理する負荷分散向けの方式で、取り出したメッセージは削除されます。サービスごとに全件を受け取ることも、過去分を読み直すこともできません。
  • B誤り。同期呼び出しでは呼び出した時点のイベントしか渡せず、過去7日分を読み直す要件を満たせません。呼び出し先が増えるほど注文サービス側の応答時間と改修も増えます。
  • C誤り。保持しないPub/Subでは、購読を始める前に発行されたイベントは受け取れません。複数のサービスへ同じイベントを配る要件には合いますが、過去分の再処理には使えません。
  • D正しい。ストリームはイベントを保持期間の間残すため、新しいサービスは先頭から読み直せます。読み取り位置を各サービスが管理するので、停止後もその位置から再開でき、他のサービスにも影響しません。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く