DVAトラブルシューティングと最適化
あるワーカーアプリケーションは、SQS標準キューから継続的にReceiveMessageを呼び出してメッセージを処理しています。キューにメッセージがない時間帯でも空のレスポンスを返すReceiveMessage呼び出しが大量に発生し、APIリクエスト課金が高額になっています。処理の遅延を増やさずにコストを削減する最も適切な方法はどれですか。
AReceiveMessageWaitTimeSecondsを20秒に設定してロングポーリングを有効にする
✓ 正解
ロングポーリング(WaitTimeSeconds最大20秒)はメッセージ到着まで接続を保持してから応答するため、空レスポンスの繰り返しを大幅に削減する。メッセージ到着時はすぐ返るので遅延も増えず、API課金を抑えられる。
B可視性タイムアウトを延長して同じメッセージの再受信を防ぐ
可視性タイムアウトは処理中のメッセージが他のコンシューマーに見えなくなる時間であり、空レスポンスによるReceiveMessage呼び出し回数には影響しない。コスト問題の原因に対処していない。
CReceiveMessageのMaxNumberOfMessagesを1に減らして呼び出しあたりの処理量を下げる
MaxNumberOfMessagesを1にすると1回で取得できる件数が減り、必要な呼び出し回数はむしろ増える可能性がある。空レスポンスの問題も解決せず、コスト削減にはならない。
DキューをFIFOに変更して重複したReceiveMessage呼び出しを排除する
FIFOキューは順序保証と重複排除のための機能で、ReceiveMessage呼び出し自体を排除するものではない。空ポーリングによるAPIリクエスト課金は変わらず、問題は解決しない。
解説
ロングポーリング(ReceiveMessageWaitTimeSeconds、最大20秒)は、メッセージが到着するまで接続を保持してから応答するため、空レスポンスを返すReceiveMessage呼び出しの繰り返しを大幅に削減する。
メッセージが到着した時点ですぐに返るため処理の遅延は増えず、API課金を抑えられる。
選択肢Bと選択肢Cと選択肢Dは、いずれも空ポーリングによるAPI呼び出し回数を削減しない。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →