Amazon Simple Queue Service (SQS) とは

Amazon Simple Queue Service

Amazon Simple Queue Service (Amazon SQS) は、分散されたソフトウェアシステムとコンポーネントを統合および疎結合化できる、安全性、耐久性、可用性に優れたホストキューを提供します。 Amazon SQS はデッドレターキューおよびコスト配分タグなど、一般的な構造を提供します。汎用ウェブサービス API を提供し、AWS SDK がサポートする任意のプログラミング言語を使用してアクセスできます。

Amazon SQS は標準および FIFO キューを両方サポートします。

Amazon SQS を使用するメリット

  • セキュリティ

    • Amazon SQS キューでメッセージを送受信できるユーザーはユーザーが管理します。
      • サーバー側の暗号化 (SSE) は AWS Key Management Service (AWS KMS) で管理されているキーを使用してキュー内のメッセージの内容を保護して機密データを送受信できます。
  • 耐久性

    • メッセージの安全性を確立するため、Amazon SQS は複数サーバーに保存します。標準キューは最低 1 回のメッセージ配信をサポートし、FIFO キューは 1 回限りのメッセージ処理をサポートします。
  • 可用性

    • Amazon SQS は、冗長なインフラストラクチャを使用してメッセージへ同時実行性が高いアクセスと、メッセージの作成と消費に高い可用性を提供します。
  • スケーラビリティ

    • Amazon SQS はすべてのバッファされたリクエストを個別に処理と透過的にスケールして、プロビジョニング指示なしで負荷の増大やスパイクに対応できます。
  • 信頼性

    • Amazon SQS は処理中にメッセージをロックするため、複数プロデューサーのメッセージ送信と、複数コンシューマのメッセージ受信を同時に実現できます。
  • カスタマイズ

    • キューは完全に似た内容である必要はありません。たとえば、キューにデフォルト遅延を設定することができます。Amazon SQS がポインターを Amazon S3 オブジェクトに向けた状態で Amazon Simple Storage Service (Amazon S3) を使用または Amazon DynamoDB を使用して、256 KB を超える容量のメッセージのコンテンツを保存できます。または、大容量のメッセージを小さいメッセージに分割することができます。

Amazon SQS、Amazon MQ、Amazon SNS の違い

Amazon SQS および Amazon SNS

スケーラビリティに優れ、使用しやすく、メッセージブローカーのセットアップが不要なキューおよびトピックサービスです。 これらのサービスは、ほぼスケーラビリティの拡張性とシンプルな API からメリットを得ることができる新規のアプリケーションに推奨されます。

Amazon MQ

多くの一般的なメッセージブローカーとの互換性をもたらすマネージドメッセージブローカーサービスです。 API (JMS など) やプロトコル (AMQP、MQTT、OpenWire、STOMP など) との互換性に依存する既存のメッセージブローカーからアプリケーション移行に Amazon MQ をお勧めします。

キュータイプ

標準キュー

  • 無限のスループット
    • 標準キューは、1 件の API アクションにつき、1 秒あたりほぼ無制限の API コールをサポートします (SendMessage、ReceiveMessage または DeleteMessage)。
  • 最低 1 回配信
    • メッセージは少なくとも 1 回配信されますが、メッセージの複数コピーが配信される場合もあります。
  • ベストエフォート型の順序付け
    • メッセージが送信された順序と異なって配信される場合があります。

FIFO キュー

  • 高スループット
    • バッチ処理を使用する場合、FIFO キューは API メソッドごとに 1 秒あたり最大 3,000 件のメッセージをサポートします (SendMessageBatch、ReceiveMessage または DeleteMessageBatch)。1 秒あたり 3000 件のメッセージは 300 件の API コールを表しており、それぞれ 10 件のメッセージで構成されたバッチです。クォータの引き上げをリクエストするには、サポートリクエストを送信します。バッチ処理を行わない場合、FIFO キューは、API メソッド (SendMessage、ReceiveMessage、または DeleteMessage) ごとに 1 秒あたり最大 300 の API コールをサポートします。
  • 1 回限りの処理
    • メッセージは 1 度のみ配信され、コンシューマが処理して削除するまでは使用可能な状態に保たれます。このキューでは、重複は導入されていません。
  • 先入れ先出し配信
    • メッセージが送受信された順序が厳密に保持されます。

Amazon SQS可視性タイムアウト

コンシューマーがキューからメッセージを受信して処理しても、そのメッセージはキューに保留されたままです。 Amazon SQSでは、メッセージが自動的に削除されません。Amazon SQSは分散システムであり、接続の問題やコンシューマーアプリケーションの問題などが原因で、コンシューマーが実際にメッセージを受信するという保証がありません。 そのため、コンシューマーはメッセージを受信して処理した後、キューからメッセージを削除する必要があります。

メッセージが受信された直後は、メッセージはキューに保留されたままです。 他のコンシューマーが同じメッセージを再び処理しないように、 Amazon SQSは可視性タイムアウトを設定しています。 Amazon SQSは、この時間内では、他のコンシューマーによる同じメッセージの受信と処理が防止されます。 デフォルトの可視性タイムアウトは30秒です。最小は0秒です。最大は12時間です。

可視性タイムアウトの設定

可視性タイムアウトはAmazon SQSがメッセージを返した時点で開始します。タイムアウト時間内に、コンシューマーはメッセージを処理して削除します。ただし、コンシューマーでメッセージを削除する前に障害が発生して、DeleteMessageアクションが呼び出されないまま可視性タイムアウトの期限が切れると、そのメッセージは他のコンシューマーに見えるようになり、再度受信されます。メッセージを一度だけ受信する必要がある場合、コンシューマーは可視性タイムアウトの時間内にメッセージを削除する必要があります。

すべてのAmazon SQSキューの可視性タイムアウトはデフォルトで 30秒に設定されています。この設定はキュー全体で変更できます。通常、可視性タイムアウトは、アプリケーションがキューのメッセージを処理して削除するまでの最大所要時間に設定します。メッセージを受信したら、キュー全体のタイムアウトを変更しなくても、返されるメッセージに特別な可視性タイムアウトを設定することもできます。

メッセージの処理に要する時間がわからない場合は、ハートビートコンシューマプロセスの場合:初期可視性タイムアウト (2 分など) を指定し、コンシューマがメッセージで作業している限り、可視性タイムアウトを1分ごとに2分延長します。

最大可視性タイムアウトは、Amazon SQSがReceiveMessage リクエストメッセージを受信してから12時間です。可視性タイムアウトを延長しても、12時間という最大時間はリセットされません。コンシューマーが12時間以上必要とする場合は、ステップ機能 の使用を検討してください。

see also: