1つの宛先から複数のサービスへ確実に配る

正解は エ です。 SNS→複数のSQS(ファンアウト) にすると、各サービスが 自分のキュー を持ち、停止中のサービスの分はキューに残って復旧後に処理されます。 方式 サービスの独立 停止中の未処理分 SNS→SQSのファンアウト ○ キューに残る 同期の連続呼び出し × 全体が失敗 1つのキューを共有 ×(1件を1サービスしか受け取れない) - SQSの1件のメッセージは1つの処理者しか処理しないため、3つのサービスすべてに届かない。 1つのサービスの停止で全体が失敗し、結合度が高い。 読み取りの負荷が大きく、処理済みの管理も自作になる。 各サービスが独立したキューで処理でき、停止しても未処理分が失われない。

注文が確定したら、在庫、配送、通知の3つのサービスがそれぞれ処理を行う。どれかのサービスが停止していても、他のサービスは処理を続け、停止していたサービスは復旧後に未処理分を処理できるようにしたい。

最も適切なものを1つ選択してください。

出典AWS非公式・オリジナル問題
ア
1つのSQSキューに注文を入れ、3つのサービスが同じキューからメッセージを取り合って処理する
イ
注文サービスから3つのサービスのAPIを順に同期で呼び出し、失敗したら全体を取り消してやり直す
ウ
注文をDynamoDBに書き、3つのサービスが毎分テーブル全体を読み取って新しい注文を探す
エ
注文の確定をSNSトピックで通知し、各サービス用の3つのSQSキューへファンアウトして処理させる