メインコンテンツに移動

Amazon SQS

Amazon SQS の特徴

キュータイプ

Amazon SQS には、さまざまなアプリケーション要件に対応する 2 種類のキュータイプが用意されています。

標準キュー

無制限のスループット: 標準キューは、API アクションあたり、ほぼ無制限の数のトランザクション/秒 (TPS) をサポートします。

At Least Once 配信: メッセージは少なくとも 1 回は配信されますが、複数のメッセージのコピーが配信されることもあります。

ベストエフォート型の順序付け: たまに、メッセージが送信時とは異なる順序で配信されることがあります。

乱れた順序で 1 回以上到着するメッセージをアプリケーションが処理できる限り、多くのシナリオで標準のメッセージキューを使用できます。例えば以下のような場合です。

  • 負荷の高いバックグラウンドの作業からライブユーザーリクエストを分離する: ユーザーはサイズ変更中またはエンコード中にメディアをアップロードできます。

  • 複数のワーカーノードにタスクを割り当てる: クレジットカードの検証リクエストを大量に処理します。

  • 今後の処理のためのバッチメッセージ: データベースに追加する複数のエントリをスケジュールします。

FIFO キュー

高スループット: デフォルトでは、FIFO キューはバッチ処理で 1 秒あたり最大 3,000 件のメッセージ、バッチ処理なしで 1 秒あたり最大 300 件のメッセージ (1 秒あたり 300 件の送信、受信、削除オペレーション) をサポートします。より高いスループットが必要な場合は、Amazon SQS コンソールで FIFO の高スループットモードを有効にできます。これにより、バッチ処理なしで 1 秒あたり最大 70,000 件のメッセージがサポートされ、バッチ処理ではさらに多くのメッセージがサポートされます。 リージョンごとの FIFO ハイスループットモードのクォータの詳細な内訳については、AWS ドキュメントを参照してください。

Exactly-Once 処理: メッセージは一度配信されると、ユーザーがそれを処理して削除するまでは使用可能な状態のままとなります。キューでメッセージの重複が起きることはありません。

First-In-First-Out 配信: メッセージが送受信された順序が厳密に保持されます (First-In-First-Out)。 

FIFO キューは、オペレーションやイベントの順序が重要である場合、または重複不可の場合などにアプリケーション間のメッセージングを強化します。たとえば、次のような場合です。

  • ユーザーが入力したコマンドが正しい順序で実行されていることを確認します。

  • 価格の変更を正しい順序で送信して、正しい製品価格を表示します。

  • アカウントを登録する前に受講者がコースに登録できないようにします。

機能

  • 無制限のキューとメッセージ:どのリージョンのメッセージ数でも無制限の Amazon SQS キューを作成できます。

  • ペイロードサイズ: メッセージペイロードには、最大 256 KB のテキストを任意のフォーマットで含めることができます。ペイロードの 64 KB の「チャンク」が、1 つのリクエストとして課金されます。例えば、256 KB のペイロードを持つ単一の API コールは、4 つのリクエストとして課金されます。256 KB を超えるメッセージを送信するには、 Amazon Simple Storage Service (S3) を使用してメッセージペイロードを保存する Java 用 Amazon SQS 拡張クライアントライブラリを使用できます。そのメッセージペイロードへの参照が SQS によって送信されます。

  • バッチ:最大 10 通または 256 KB のメッセージを一括して送信、受信、または削除します。バッチの場合も、料金は単一メッセージと同じです。つまり、バッチを利用すると、SQS のコスト効果がさらに高くなる可能性があります。

  • 公平なキュー:マルチテナントキューにおけるノイズの多いネイバーへの影響を軽減します。1 つのテナントが大量のメッセージを送信する場合や、処理時間が長い場合は、キューを公平にすることで、すべてのテナントでメッセージの送受信時間を一定に保つことができます。メッセージにメッセージグループ ID を追加することでフェアキューを有効にできます。コンシューマーに変更を加える必要はありません。

  • 最大 14 日間メッセージをキューに保持します。

  • 同時にメッセージを送受信します。

  • メッセージのロック: 受信したメッセージが処理されている間は、「ロック」されます。これにより、他のコンピュータでメッセージが同時に処理されるのを防ぐことができます。処理に失敗すると、メッセージのロックは解除されるため、このメッセージは再び利用できるようになります。

  • キュー共有:Amazon SQS キューを匿名で、または特定の AWS アカウントと安全に共有します。キューの共有は、IP アドレスや時刻によっても制限することができます。

  • サーバー側の暗号化 (SSE): AWS キー管理サービス (AWS KMS) で管理されるキーを使用して、Amazon SQS キュー内のメッセージの内容を保護します。SSE では、Amazon SQS でメッセージを受信した時点ですぐに暗号化します。メッセージは暗号化された形式で保存され、Amazon SQS は許可された消費者に送信された場合のみメッセージを復号化します。

  • デッドレターキュー (DLQ): コンシューマーがデッドレターキュー (DLQ) で正常に処理しなかったメッセージを処理します。メッセージの最大受信回数を超えると、Amazon SQS は元のキューと関連付けられている DLQ に移動されます。DLQ はソースキュー (標準または FIFO) と同じタイプである必要があります。DLQ のメッセージを調べると、コンシューマーがメッセージを正常に受信できなかった理由を理解できます。問題を是正したら、メッセージを DLQ からそれぞれのソースキューに移動できます。

Amazon SQS を他の AWS インフラストラクチャウェブサービスと共に使用する

Amazon SQS メッセージキューは、Amazon Redshift、Amazon DynamoDB 、アマゾンリレーショナルデータベースサービス (RDS)、アマゾンエラスティックコンピュートクラウド (EC2)、アマゾンエラスティックコンテナサービス (ECS) 、AWS Lambda、Amazon S3 などの他の AWS サービスと併用して、分散アプリケーションのスケーラビリティと信頼性を高めることができます。以下に、一般的な設計パターンの例をいくつか示します。

  • ワークキュー: 配信されたアプリケーションのコンポーネントのうち、同じ量の作業をすべて同時に処理しない可能性のあるものを疎結合します。

  • バッファおよびバッチオペレーション: スケーラビリティと信頼性をアーキテクチャに追加し、メッセージを失ったり、レイテンシーを増大させたりすることなく、ボリュームの一時的な急増を均一化します。

  • リクエストのオフロード: リクエストをキューに追加することによって、時間がかかっているオペレーションをインタラクティブなリクエストパスから除外します。

  • ファンアウト:SQS を簡易通知サービス (SNS) と組み合わせると、メッセージの同一のコピーを複数のキューに並行して送信できます。

  • 優先順位: 業務の優先順位に応じた個別のキューを使用します。

  • スケーラビリティ: メッセージキューはプロセスを疎結合するため、メッセージの送受信レートを簡単にスケールアップできます。必要なのは別のプロセスを追加するだけです。

  • 回復力: システムの一部で障害が発生することは、システム全体がダウンすることを必ずしも意味しません。メッセージキューによってシステムのコンポーネントが切り離されるため、そのキューからメッセージを読み取り中のプロセスに障害が発生しても、そのキューへのメッセージ追加は継続でき、システム回復時に処理できます。

想定される使用目的と制約