Simple Message Queue (formerly MNS) は、基盤となるリソースへの過剰な負荷を防ぐため、しきい値を超えるリクエストに対してスロットリング (速度制限) を行います。
スロットリング動作
トラフィックがスロットリングのしきい値に近づくか、または達した場合、サーバーサイドはリアルタイムのリソース使用量に基づいて、しきい値を自動的かつ弾力的に調整します。ほとんどのシナリオでは、この動的な調整により、ユーザーに影響を与えることなく、より高い同時実行性がサポートされます。バーストトラフィックやクラスターリソースのボトルネックなどのイベントによって一時的なスロットリングがトリガーされた場合、システムは自動的にスケールアウトした後、トラフィック処理を再開し、スロットリングのしきい値を引き上げます。
スロットリングエラーがトリガーされると、システムはバックプレッシャーメカニズムを有効にします。サーバーサイドは、エラーを返す前に、しきい値を超えたリクエストを約 500 ms 一時停止します。これにより、システムの過負荷が全体のパフォーマンスと安定性に影響を与えることを防ぎます。
エラーコード
スロットリングポリシーがトリガーされると、Simple Message Queue (formerly MNS) のサーバーサイドは次のエラーコードを返します。
HTTP ステータスコード | エラーコード | エラーメッセージ |
429 | TooManyRequests | リクエストが多すぎるため、クラスターのフローリミッターによってリクエストが拒否されました。 |
スロットリングのしきい値の詳細
キュー消費パターンにおける異常な動作に対するスロットリングポリシー
標準的なキュー消費パターンでは、クライアントはメッセージを処理した後に削除する必要があります。クライアントが繰り返しメッセージを受信するにもかかわらず、削除リクエストを送信しない場合、システムはこの動作を異常と判断します。この動作は、システムの安定性を保護するためにスロットリングをトリガーし、クライアントがメッセージを受信できるレートを大幅に低下させます。
スロットリングは、次のいずれかの条件が満たされた場合にトリガーされます:
期間:異常な動作が 30 分以上継続した場合。
メッセージ数:受信されたが削除されていないメッセージの総数が 5,000 に達した場合。
レート:メッセージを受信したものの削除しないという瞬時のレートが 1,000 TPS (Transactions Per Second) を超えた場合。
高トラフィックリクエストに対するスロットリングポリシー
デフォルトのスロットリングのしきい値は、各リージョンの各 Alibaba Cloud アカウントあたり 20,000 TPS です。トラフィックが 20,000 TPS を超える場合は、チケットを送信してデフォルトのしきい値を引き上げることができます。
リクエストは次のようにカウントされます:
API 操作の各呼び出しは 1 つのリクエストとしてカウントされます。
バッチ送信の TPS 計算:BatchSendMessage API 操作を使用してキューにメッセージを送信する場合、BatchSendMessage の TPS は「1 秒あたりの実際のリクエスト数 × リクエスト内のメッセージ数」として計算されます。たとえば、1 秒あたり 100 回の BatchSendMessage リクエストを行い、各リクエストに 10 件のメッセージが含まれている場合、そのキューの TPS は 100 × 10 = 1,000 となります。
バッチ消費の TPS 計算:BatchReceiveMessage API 操作を使用してキューからメッセージを受信する場合、BatchReceiveMessage の TPS は「1 秒あたりの実際のリクエスト数 × リクエスト内のメッセージ数」として計算されます。たとえば、1 秒あたり 100 回の BatchReceiveMessage リクエストを行い、各リクエストに 10 件のメッセージが含まれている場合、そのキューの TPS は 100 × 10 = 1,000 となります。
スロットリングの影響を回避する
ビジネスへのスロットリングの影響を回避するには、次の点を考慮してください: