Q21 — AWS SAA-C03 第3章

第 21/65 問 | ← 第3章

Q151. ある企業が、注文をデータベースに書き込み、支払い処理のためのサービスを呼び出すECサイトのチェックアウトワークフローを運用しています。ユーザーはチェックアウト中にタイムアウトを頻繁に経験しており、再送信した際に、同一の取引に対して複数の重複する注文(ユニークな注文IDを持つ)が作成されています。ソリューションアーキテクトは、このワークフローをどのようにリファクタリングすれば、重複注文の作成を防ぐことができますか?

正解: D. 注文をデータベースに保存します。注文番号を含むメッセージをAmazon Simple Queue Service (Amazon SQS) FIFOキューに送信します。支払いサービスをメッセージを取得・処理し、キューからメッセージを削除するように設定します。

解説

重複注文の問題は、ユーザーによる再送信(リトライ)時に、同じ注文が複数回処理されてしまう「冪等性(idempotency)」の欠如によって引き起こされます。これを解決するには、注文の受付と支払い処理を分離し、かつ処理の順序性・重複防止を保証する仕組みが必要です。Amazon SQS FIFOキューは、メッセージの厳密な順序保証と、重複メッセージの自動除外(Message Deduplication IDによる)を提供し、冪等な処理を実現するのに最適です。オプションDでは、まず注文をデータベースに保存(一意な注文IDを生成済み)した後、その注文番号をFIFOキューに送信し、支払いサービスがキューから1回だけ取得・処理・削除することで、重複処理を確実に防止できます。一方、AはKinesis Data Firehoseは主にストリーミングデータのロードに使用され、メッセージの重複防止や厳密な順序保証は提供せず、BはCloudTrailはAPI呼び出しの監査ログ用であり、アプリケーションレベルのイベント駆動処理には不適、CはSNSはパブリッシュ/サブスクライブ型でメッセージの配信保証や重複防止機能を持たず、ポーリングも非効率です。したがって、正解はDです。