Q89 — AWS DVA-C02 第3章

第 89/100 問 | ← 第3章

ある開発者が、顧客が音楽イベントの座席をリアルタイムで選択できるサーバーレスアプリケーションを設計しています。顧客はAWS Lambda関数を使用して注文リクエストをAmazon API Gateway APIに送信し、注文IDを生成します。このアプリケーションには、在庫管理と支払い処理のための2つの追加Lambda関数が含まれており、これらは注文をAmazon DynamoDBテーブルに書き込みます。 アプリケーションは、顧客に座席を割り当てる際に以下の要件を満たす必要があります。ある座席が誤って複数回販売された場合、アプリケーションが受け取った最初の注文はその座席を獲得しなければなりません。この場合、アプリケーションは最初の注文の支払いのみを処理します。しかし、最初の注文の支払い処理中に拒否された場合、2番目の注文が座席を獲得しなければなりません。この場合、アプリケーションは2番目の注文の支払いを処理しなければなりません。 この要件を満たす解決策はどれですか?

正解: A. 注文IDをAmazon Simple Notification Service(Amazon SNS)FIFOトピックに送信し、在庫管理用にAmazon Simple Queue Service(Amazon SQS)FIFOキューをファンアウトし、支払い処理用にもう1つのSQS FIFOキューをファンアウトする。

解説

選択肢Aは要件を満たします。注文IDをAmazon SNS FIFOトピックに送信することで、メッセージの厳密な順序処理が保証されます。在庫管理と支払い処理のそれぞれにSQS FIFOキューをファンアウトすることで、先着順で注文を処理できます。最初の注文の支払いが拒否された場合、2番目の注文が即座に処理され、座席割り当ておよび支払い処理の要件を満たします。他の選択肢Bは並列処理および厳密な注文順序を保証できません。選択肢Cでは、SNSトピックは厳密な順序処理を保証しません。選択肢Dでは、SQSキューのポーリング方式も注文処理の順序および特定の要件を十分に保証できません。したがって、選択肢Aを選択します。