Amazon SQS の FIFO キューの高スループット - Amazon Simple Queue Service

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

Amazon SQS の FIFO キューの高スループット

Amazon SQS の高スループットの FIFO キューは、厳格なメッセージ順序を維持しながら、高いメッセージスループットを効率的に管理することで、多数のメッセージを処理するアプリケーションの信頼性とスケーラビリティを確保します。このソリューションは、高スループットおよび順序付けられたメッセージ配信の両方を必要とするシナリオに最適です。

Amazon SQS の高スループットの FIFO キューは、厳密なメッセージの順序付けが重要ではなく、受信メッセージのボリュームが比較的低いか散発的である場合には必要ありません。例えば、低頻度または非連続のメッセージを処理する小規模なアプリケーションの場合、高スループットの FIFO キューに伴う複雑さやコストの増加は割に合わない場合があります。さらに、高スループットの FIFO キューが提供する拡張スループット機能を必要としないアプリケーションでは、Amazon SQS の標準キューを選択する方が、コスト効率が高まり、管理が容易になる場合があります。

高スループットの FIFO キューのリクエストキャパシティを強化するには、メッセージグループの数を増やすことをお勧めします。高スループットのメッセージクォータの詳細については、「Amazon Web Services 全般のリファレンス」の「Amazon SQS Service Quotas」を参照してください。

キューごとのクォータとデータ分散戦略については、「Amazon SQS のメッセージキュー」および「SQS FIFOキューの高スループットを実現するパーティションとデータ分散」を参照してください。

Amazon SQS FIFO キューの高スループットのユースケース

以下のユースケースでは、高スループットの FIFO キューのさまざまな用途に注目し、さまざまな業界やシナリオにわたる有効性を示します。

  1. リアルタイムのデータ処理: イベント処理やテレメトリデータインジェストなど、リアルタイムのデータストリームを扱うアプリケーションは、高スループットの FIFO キューを利用することで、メッセージの継続的な流入を処理しながら、メッセージの順序を維持し、正確な分析を行うことができます。

  2. e コマースの注文処理: 顧客取引の順序を維持することが重要な e コマースプラットフォームでは、高スループットの FIFO キューにより、ショッピングのピークシーズンでも注文を遅滞なく順番に処理できます。

  3. 金融サービス: 高頻度の取引データやトランザクションデータを処理する金融機関は、高スループットの FIFO キューに依存することで、メッセージの順序付けに関する厳格な規制要件を遵守しながら、レイテンシーを最小限に抑えて市場データやトランザクションを処理できます。

  4. メディアストリーミング: ストリーミングプラットフォームやメディア配信サービスは、高スループットの FIFO キューを使用してメディアファイルとストリーミングコンテンツの配信を管理し、コンテンツ配信の正しい順序を維持しながら、ユーザーにスムーズな再生エクスペリエンスをもたらすことができます。

SQS FIFOキューの高スループットを実現するパーティションとデータ分散

Amazon SQSは、FIFOキューデータをパーティションに保存します。パーティションは、 AWS リージョン内の複数のアベイラビリティーゾーンに自動的にレプリケートされるキューのストレージの割り当てです。パーティションは管理しません。代わりに Amazon SQSがパーティション管理を処理します。

FIFOキューの場合、Amazon SQSは次の状況でキューのパーティションの数を変更します。

  • 現在のリクエストレートが既存のパーティションがサポートできる値に近づいたり超えたりすると、キューがリージョナルクォータに達するまで追加のパーティションが割り当てられます。クオータの詳細については、{Amazon SQS のメッセージキュー}を参照してください。

  • 現在のパーティションの使用率が低い場合は、パーティションの数が減ることがあります。

パーティション管理は自動的にバックグラウンドで自動的に発生し、アプリケーションに対して透過的です。キューとメッセージは常に利用可能です。

メッセージグループ ID によるデータの配布

FIFOキューにメッセージを追加するには、Amazon SQSは各メッセージのメッセージグループ ID の値を内部ハッシュ関数への入力として使用します。ハッシュ関数からの出力値によって、どのパーティションにメッセージが保存されるが決まります。

次の図は、複数のパーティションにまたがるキューを示しています。キューのメッセージグループ IDは、アイテム番号に基づきます。Amazon SQSは、ハッシュ関数を使用して、新しい項目の保存場所を決定します。この場合は、文字列のハッシュ値に基づいていますitem0。アイテムは、キューに追加される順序と同じ順序で格納されることに注意してください。各アイテムの場所は、メッセージグループIDのハッシュ値によって決まります。

キューは複数のパーティションにまたがっています。
注記

Amazon SQS は、パーティションの数に関係なく、FIFO キューのパーティション間で項目を均一に分散するように最適化されています。 AWS では、多数の異なる値を持つことができるメッセージグループ IDs を使用することをお勧めします。

パーティション使用率の最適化

サポートされているリージョンにおいては、各パーティションは、バッチ処理により 1 秒あたり最大 3,000 件のメッセージ、または送信、受信、削除操作では 1 秒あたり最大 300 件のメッセージをサポートします。高スループットのメッセージクォータの詳細については、「Amazon Web Services 全般のリファレンス」の「Amazon SQS Service Quotas」を参照してください。

バッチAPI を使用する場合、各メッセージはメッセージグループ ID によるデータの配布で説明されているプロセスに基づいてルーティングされます。同じパーティションにルーティングされたメッセージは、単一のトランザクションでグループ化され、処理されます。

SendMessageBatch API のパーティション使用率を最適化するために、 では、可能な場合は同じメッセージグループ IDs を持つメッセージのバッチ処理 AWS を推奨します。

DeleteMessageBatch および ChangeMessageVisibilityBatch APIs のパーティション使用率を最適化するために、 AWS は MaxNumberOfMessagesパラメータを 10 に設定してReceiveMessageリクエストを使用し、1 つのReceiveMessageリクエストによって返される受信ハンドルをバッチ処理することをお勧めします。

次の例では、さまざまなメッセージグループ IDを持つメッセージのバッチが送信されます。バッチは3つのグループに分割され、それぞれがパーティションのクォータに対してカウントされます。

異なるメッセージグループ IDを持つメッセージのバッチは、パーティションに保存されます。
注記

Amazon SQS では、同じメッセージグループ ID の内部ハッシュ関数を持つメッセージがバッチリクエスト内でグループ化されている場合にのみ保証されます。内部ハッシュ関数の出力とパーティションの数に応じて、異なるメッセージグループ IDを持つメッセージがグループ化されることがあります。ハッシュ関数またはパーティションの数はいつでも変更できるため、ある時点でグループ化されたメッセージは後でグループ化されない場合があります。