Amazon SQS キュータイプ - Amazon Simple Queue Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SQS キュータイプ

Amazon SQS は、標準キューと FIFO キューの 2 種類のキューをサポートしています。次の表を使用して、ニーズに最適なキューを決定します。

標準キュー FIFO キュー

無制限のスループット – 標準キューは、アクション (SendMessageReceiveMessage、または DeleteMessage) ごとに 1 秒あたり非常に多くの、ほぼ無制限の API コール数をサポートします。この高スループットにより、リアルタイムデータストリーミングや大規模なアプリケーションなど、大量のメッセージをすばやく処理する必要があるユースケースに最適です。標準キューは需要に応じて自動的にスケーリングされますが、特にワークロードの高いリージョンでは、最適なパフォーマンスを確保するために使用パターンをモニタリングすることが不可欠です。

At-least once 配信 — 少なくとも 1 回の配信が保証されます。つまり、すべてのメッセージは少なくとも 1 回配信されますが、再試行やネットワーク遅延が原因で 2 回以上配信される場合もあります。同じメッセージを複数回処理してもシステムの状態に影響が及ばないように、べき等性オペレーションを使用して重複メッセージに対応できるようにアプリケーションを設計する必要があります。

ベストエフォート型の順序 – ベストエフォート型の順序を提供します。つまり、Amazon SQS はメッセージを送信された順に配信しようとしますが、これは保証されません。場合によっては、特に高スループットまたは障害復旧の条件下では、メッセージが順序どおりに到着しないことがあります。メッセージ処理の順序が重要であるアプリケーションの場合、アプリケーション内で順序変更ロジックを処理するか、FIFO キューを使用して順序を厳密に保証する必要があります。

耐久性と冗長性 – 標準キューは、複数の AWS アベイラビリティーゾーンにまたがって各メッセージの複数のコピーを保存することで、高い耐久性を確保します。これにより、インフラストラクチャに障害が発生しても、メッセージは失われません。

可視性タイムアウト – Amazon SQS では、可視性タイムアウトを設定してメッセージを受信後に非表示にしておく期間を制御できます。これにより、メッセージを完全に処理するか、タイムアウトが期限切れになるまで、他のコンシューマーがメッセージを処理することはありません。

高スループットバッチ処理を使用すると、FIFO キューは API メソッド(SendMessageBatchReceiveMessage、またはDeleteMessageBatch) ごとに 1 秒あたり最大 3,000 件のメッセージを処理します。このスループットでは 1 秒あたりの API コール数を 300 とし、各 API コールで 10 件のメッセージをバッチで処理します。高スループットモードを有効にすると、メッセージグループ内の順序範囲を広げて 1 秒あたりのトランザクション数 (TPS) を最大 30,000 までスケールアップできます。バッチ処理を使用しない場合、FIFO キューは、API メソッド (SendMessageReceiveMessage、または DeleteMessage) ごとに 1 秒あたり最大 300 件の API コールをサポートします。さらにスループットが必要な場合は、AWS サポートセンターにクォータの引き上げをリクエストできます。高スループットモードを有効にするには、「Amazon SQS における FIFO キューの高スループットの有効化」を参照してください。

1 回のみ処理 — FIFO キューは各メッセージを 1 回配信し、処理して削除するまで、そのメッセージを利用可能にします。MessageDeduplicationId やコンテンツベースの重複排除などの機能を使用することで、ネットワークの問題やタイムアウトが原因で再試行した場合でも、メッセージの重複を防ぐことができます。

FIFO 配信 – FIFO キューでは、各メッセージグループ内のメッセージを送信した順序どおりに取り出します。メッセージを複数のグループに分散することで、各グループ内の順序を維持しながら、メッセージを並列処理できます。

標準キューのメッセージ配信。
FIFO キューのメッセージ配信。
標準キューは、スループットが重要であるアプリケーション間でのデータ送信に使用します。以下に例を示します。
  • ライブユーザーのリクエストを集中的なバックグラウンド作業から切り離します。サイズ変更やエンコードなどのタスクをバックグラウンドで処理している間に、ユーザーがメディアをすばやくアップロードできるようにすることで、システムに過負荷をかけずにレスポンス時間を短縮できます。

  • タスクを複数のワーカーノードに割り当てます。多数のクレジットカード検証リクエストを複数のワーカーノードに分散し、べき等性オペレーションを使用して重複メッセージを処理することで処理エラーを回避します。

  • 後で処理するためにメッセージをバッチ処理します。複数のエントリをキューに入れてバッチとしてデータベースに追加します。メッセージの順序は保証されないため、必要に応じて順不同の処理に対応できるようシステムを設計します。

FIFO キューは、イベントの順序が重要であるアプリケーション間でのデータ送信に使用します。以下に例を示します。

  • ユーザーが入力したコマンドが正しい順に実行されていることを確認します。これは、コマンドの順序が重要である FIFO キューの主要なユースケースです。例えば、ユーザーがアプリケーションで一連のアクションを実行する場合、FIFO キューは、アクションが入力された順序どおりに処理されるようにします。

  • 価格変更を正しい順序で送信して、正しい製品価格を表示します。FIFO キューでは、製品価格の複数の更新が到着した順序どおりに処理されます。FIFO を使用しないと、値上げ後に値下げが処理され、誤ったデータが表示される可能性があります。

  • 受講者がアカウントに登録する前にコースに登録することを防ぎます。FIFO キューを使用すると、登録プロセスが正しい順序で実行されるようになります。システムは最初にアカウント登録を処理し、次にコース登録を処理するため、コース登録リクエストが先に実行されることはありません。