翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS 公平キューの仕組み
Amazon SQS 公平キューは、単一のテナントが他のテナントのメッセージ処理を遅くするのを防ぐことで、マルチテナントキューのノイズの多い近隣の影響を自動的に軽減します。公平キューは、あるテナントがキューのコンシューマーキャパシティの不釣り合いな共有を使用していることを検出した場合、クワイエットテナントからのメッセージの配信を優先します。
テナント ID
公平キューは、各メッセージの MessageGroupIdプロパティによってテナントを識別します。同じ を共有するメッセージは、同じテナントにMessageGroupId属します。公平キューには、 の有無にかかわらず、複数のメッセージを含めることができますMessageGroupId。のない各メッセージMessageGroupIdは、独自のテナントに属するものとして扱われます。
公平キューに送信するすべてのメッセージMessageGroupIdに、顧客 ID、クライアントアプリケーション ID、リクエストタイプなど、システム内の実際のエンティティにマッピングされる識別子を使用して を設定することをお勧めします。
検出の仕組み
Amazon SQS は、次の 2 つのメジャーを使用してノイズの多い近隣を検出します。
-
同時実行数の共有 — テナントのインフライトメッセージは、キュー内のすべてのインフライトメッセージの一部です。これにより、送信量が多いか、処理が遅いか、またはその両方が原因で、多数のメッセージが一度に処理されているテナントが検出されます。
-
処理時間共有 — テナントの合計コンシューマー処理時間の最近の共有。これにより、メッセージの数は少ないが処理が遅いテナントが検出されるため、テナントは大量のメッセージを一度に処理することなく、かなりのコンシューマー時間を占有します。
次のいずれかに当てはまる場合、テナントはノイズの多い隣人としてマークされます。
-
同時実行数の共有: テナントはキュー内の処理中のメッセージの 10% 以上を占め、少なくとも 30 個の独自のメッセージが処理中です。
-
処理時間共有: テナントの合計コンシューマー処理時間の最近の割合が 10% を超えています。
Amazon SQS は分散システムであるため、これらのしきい値は概算であり、記述された正確な値では検出がアクティブ化されない場合があります。
メッセージ配信順序の変更方法
テナントがノイズの多い隣人として検出されると、Amazon SQS はクワイエットテナントからのメッセージの配信を優先します。メッセージをポーリングするコンシューマーインスタンスは、クワイエットテナントメッセージが利用可能になると、クワイエットテナントからメッセージを受信します。この優先順位付けは、ノイズの多い近隣の同時実行共有と処理時間共有がクワイエットテナントと同等のレベルに低下するまで続きます。
ノイズの多いネイバーメッセージはドロップまたはスロットリングされません。クワイエットテナントメッセージが優先される間にドウェル時間が長くなり、バックログがクリアされると通常に戻ります。クワイエットテナントメッセージが待機していない場合、コンシューマーインスタンスは通常どおりノイズの多いネイバーメッセージを受信します。
複数のテナントがノイズの多い隣人として同時に検出された場合、コンシューマーインスタンスはノイズの多いテナントからメッセージを受信し、処理中のメッセージが最も少なくなります。これにより、ノイズの多いテナント間で処理時間のバランスを取ることができます。
ノイズの多い隣人がクワイエットしたとき
次のいずれかが当てはまる場合、テナントはノイズの多い隣人として扱われなくなります。
-
テナントのバックログが完全に消費されました。
-
テナントからのメッセージが 5 分間連続して送信されていません。
その後、テナントのメッセージは優先順位が下がらず、他のクワイエットテナントからのメッセージと同じように扱われます。
コンシューマーの容量に関する考慮事項
同時実行共有メジャーを効果的に機能させるには、1 つのテナントのインフライトメッセージ共有が目立つのに十分なメッセージを同時に処理する必要があります。コンシューマーフリートのサイズを設定するときは、この点を考慮してください。
イベントソースマッピングを通じて Lambda をコンシューマーとして使用する場合、処理中のメッセージの数は Lambda 関数の同時実行数とバッチサイズの両方によって異なります。コンシューマーのサイズを設定するときは、これらの設定を一緒に評価します。
同時実行共有しきい値をトリガーするには、処理中のメッセージの数が少なすぎる場合でも、処理時間共有メジャーはノイズの多い近隣を検出できます。ただし、公平キューは、コンシューマーが両方のメジャーを評価するのに十分なメッセージを同時に処理する場合に最適です。