キュータイプ
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 超のメッセージを送信する場合、Java 用 Amazon SQS 拡張クライアントライブラリを使用できます。これは、メッセージペイロードを保存するために Amazon Simple Storage Service (S3) を使用します。そのメッセージペイロードへの参照が SQS によって送信されます。
- バッチ: 最大 10 通または 256 KB のメッセージ を一度に送信、受信、または削除できます。バッチの場合も、料金は単一メッセージと同じです。つまり、バッチを利用すると、SQS のコスト効果がさらに高くなる可能性があります。
- ロングポーリング: 外部からのポーリングが削減されることで、コストを最小限に抑えつつ、新しいメッセージを可及的迅速に受信できます。キューが空の場合、ロングポーリングリクエストから次のメッセージが到着するまで、最大で 20 秒かかります。ロングポーリングリクエストのコストは、通常のリクエストと同額です。
- 最大 14 日間メッセージをキューに保持します。
- 同時にメッセージを送受信します。
- メッセージのロック: メッセージが受信された場合、そのメッセージは処理されている間「ロック」されます。これにより、他のコンピュータでメッセージが同時に処理されるのを防ぐことができます。処理に失敗すると、メッセージのロックは解除されるため、このメッセージは再び利用できるようになります。
- キュー共有: 匿名で、または特定の AWS アカウントを使用して、Amazon SQS キューを安全に共有します。キューの共有は、IP アドレスや時刻によっても制限することができます。
- サーバー側の暗号化 (SSE): AWS Key Management Service (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、Amazon Relational Database Service (RDS)、Amazon Elastic Compute Cloud (EC2)、Amazon Elastic Container Service (ECS)、AWS Lambda、Amazon S3 などの他の AWS のサービスで使用できます。以下に、一般的な設計パターンの例をいくつか示します。
- ワークキュー: 配信されたアプリケーションのコンポーネントのうち、同じ量の作業をすべて同時に処理しない可能性のあるものを疎結合します。
- バッファおよびバッチオペレーション: スケーラビリティと信頼性をアーキテクチャに追加し、メッセージを失ったり、レイテンシーを増大させたりすることなく、ボリュームの一時的な急増を均一化します。
- リクエストのオフロード: リクエストをキューに追加することによって、時間がかかっているオペレーションをインタラクティブなリクエストパスから除外します。
- ファンアウト: SQS と Simple Notification Service (SNS) を組み合わせることで、メッセージの同一コピーを複数のキューに並列送信します。
- 優先順位: 業務の優先順位に応じた個別のキューを使用します。
- スケーラビリティ: メッセージキューはプロセスを疎結合するため、メッセージの送受信レートを簡単にスケールアップできます。必要なのは別のプロセスを追加するだけです。
- 回復力: システムの一部で障害が発生することは、システム全体がダウンすることを必ずしも意味しません。メッセージキューによってシステムのコンポーネントが切り離されるため、そのキューからメッセージを読み取り中のプロセスに障害が発生しても、そのキューへのメッセージ追加は継続でき、システム回復時に処理できます。
想定される使用目的と制約
このサービスのご利用には Amazon Web Services カスタマーアグリーメントが適用されます。