Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Meilleures pratiques en matière de limites de débit
Cette rubrique fournit des conseils sur la conception, le déploiement et le fonctionnement efficaces des limites de débit sur votre passerelle.
Motifs de conception
- Accès hiérarchisé
-
Créez plusieurs limites de débit avec la même clé de dimension (
$.context.jwt.subou$.context.jwt.tier) mais des entrées différentes pour chaque niveau. Utilisez des entrées exactes pour les utilisateurs premium connus et une*entrée comme niveau par défaut. - Défense en profondeur
-
Limites de débit de couche à plusieurs granularités. Par exemple, combinez une limite de RPS par cible (protège la capacité du backend) avec une limite de RPS par appelant (empêche les abus individuels) et une limite de jeton par outil (contrôle des coûts).
- Infrastructure en tant que code avec BatchPut
-
Utilisez-le
BatchPutGatewayRateLimitspour gérer de manière déclarative la configuration de votre limite de débit. Batch put utilise une sémantique ascendante, ce qui permet de l'exécuter à plusieurs reprises en toute sécurité à partir de CI/CD pipelines ou de modèles d'infrastructure. - Déploiement progressif
-
Commencez par des limites tarifaires généreuses et resserrez-les au fil du temps en fonction des tendances de trafic observées. Surveillez l'attribut d'étendue
aws.agentcore.gateway.throttle.customer.decisionOTEL et les taux de réponse de 429 avant de réduire les limites. - Bloc d'urgence
-
Utilisez des
rate: 0entrées pour bloquer des appelants, des cibles ou des outils spécifiques lors d'un incident. Le blocage prend effet une fois la propagation terminée (30 secondes maximum).
Guide de sélection des touches Dimension
Choisissez des clés de dimension qui produisent un nombre limité et prévisible de tranches tarifaires :
| Clé Dimension | Cardinalité | Recommendation |
|---|---|---|
|
|
Faible (ensemble connu) |
Un excellent choix. À utiliser pour une protection par cible. |
|
|
Low-medium |
Bon choix pour les passerelles MCP avec des ensembles d'outils connus. |
|
|
Faible (ensemble connu) |
Excellent pour les passerelles d'inférence. |
|
|
Medium-high |
Idéal pour les limites par utilisateur. Cardinalité limitée par votre base d'utilisateurs. |
|
|
Faible |
Excellent pour les quotas par équipe. |
|
|
Moyenne |
Idéal pour les limites par rôle dans les IAM-authenticated configurations. |
|
|
Sans limites |
Ne pas utiliser. Crée un compartiment unique par jeton. |
|
|
Sans limites |
Ne pas utiliser. Crée un compartiment unique par demande. |
Avertissement
Les clés de dimensions illimitées (telles $.context.jwt.jti que les réclamations limitées à la demande) créent un nombre infini de tranches tarifaires. Cela gaspille de la mémoire, dégrade les performances et désactive efficacement la limitation de débit, car chaque requête possède son propre compartiment et n'est jamais limitée.
Considérations relatives aux limites de débit des jetons
Les limites de débit des jetons nécessitent une attention particulière en raison de leur modèle d'application basé sur le budget :
-
Utilisation du budget : la passerelle estime les jetons d'entrée avant le transfert et enregistre l'utilisation réelle après la réponse. Short-lived les rafales peuvent temporairement dépasser le débit configuré.
-
Options de diffusion : pour les demandes de diffusion en continu (
/v1/chat/completions), la passerelle ajoute automatiquement"stream_options": {"include_usage": true}au corps de la demande lorsqu'une limite de débit de jetons est active et que l'option n'est pas déjà présente. Cela permet une comptabilisation précise des jetons pour l'application du TPM. -
Chemins pris en charge : les limites de débit des jetons s'appliquent uniquement aux demandes portant sur des chemins d'inférence connus (
/v1/chat/completions,/v1/messages,/v1/responses). Les requêtes vers d'autres chemins ne sont pas soumises à des limites de jetons. -
Pass-through cibles : si votre cible fait appel à un fournisseur de modèles sans utiliser de chemin d'inférence connu, les limites de débit des jetons ne s'appliquent pas. Envisagez d'utiliser des limites de taux de demande ou de restructurer votre cible pour utiliser un chemin pris en charge.
FAQ sur la limite de débit des jetons
Cette section répond aux questions courantes sur la manière dont l'application du code jeton par minute (TPM) fonctionne dans la pratique.
- Comment fonctionne l'application de la TPM ?
-
La passerelle utilise un modèle d'exécution basé sur le budget. Lorsqu'une demande arrive, la passerelle estime le nombre de jetons d'entrée et réserve ce montant à partir de votre budget TPM configuré. Si l'estimation dépasse le budget restant, la demande est rejetée avec une réponse HTTP 429 avant d'atteindre le modèle. Une fois la demande terminée, la passerelle réconcilie le budget en remplaçant l'estimation initiale par l'utilisation réelle des jetons (jetons d'entrée + jetons de sortie) signalée par le fournisseur du modèle.
- Comment fonctionne le TPM avec la mise en cache rapide ?
-
La passerelle prend en compte les jetons en fonction des
output_tokensvaleursinput_tokenset que le fournisseur de modèle renvoie dans la réponse d'inférence. La passerelle n'effectue pas le suivi ou ne s'ajuste pas de manière indépendante pour une mise en cache rapide. L'inclusion des jetons mis en cacheinput_tokensdépend de la manière dont votre fournisseur de modèles signale l'utilisation. Ce comportement varie d'un fournisseur à l'autre. Consultez la documentation de votre fournisseur de modèles pour comprendre comment la mise en cache rapide affecte le nombre de jetons signalés et votre consommation effective de TPM. - Si ma limite de TPM est de 50 et que le tokenizer estime 51 jetons d'entrée, la demande est-elle limitée ?
-
Oui. La passerelle évalue l'estimation du tokenizer par rapport au budget TPM restant avant de transmettre la demande. Si l'estimation dépasse le budget disponible, la demande est rejetée avec une réponse HTTP 429. La réponse inclut un
retryAfterchamp indiquant quand un budget suffisant sera disponible. - Si une demande de longue durée consomme plus de jetons que prévu initialement, la réponse est-elle limitée ?
-
Non Une fois que la passerelle accepte et transmet une demande, la réponse est toujours fournie dans son intégralité. La passerelle réserve des jetons estimés au moment de la demande, et les autres demandes continuent d'être évaluées par rapport au budget restant pendant que la demande est en cours de traitement. Une fois la réponse terminée, la passerelle concilie l'utilisation réelle avec l'estimation. Si la consommation réelle était plus élevée, le budget est ajusté, ce qui peut entraîner une limitation des demandes ultérieures, mais la réponse initiale n'est jamais interrompue.
- Comment fonctionne la comptabilité des jetons avec les réponses en streaming ?
-
La passerelle utilise le segment de réponse final comme source de vérité pour la réconciliation des jetons. Les fournisseurs de modèles ne signalent pas tous l'utilisation de jetons dans chaque segment diffusé en streaming ; certains ne l'incluent que dans le dernier segment. La passerelle attend la réponse complète avant de réconcilier le budget du TPM. Pour le streaming OpenAI Chat Completions, la passerelle ajoute automatiquement
"stream_options": {"include_usage": true}au corps de la requête lorsqu'une limite de débit de jetons est active et que cette option n'est pas déjà présente, garantissant ainsi un nombre précis de jetons disponibles dans le dernier segment.
Considérations opérationnelles
- Délai de propagation
-
Les modifications des limites de débit peuvent prendre jusqu'à 30 secondes pour se propager. Prévoyez ce délai en cas d'incident : une entrée bloquée (
rate: 0) n'est pas immédiate. - Comportement classé zéro
-
Un taux de 0 bloque tout le trafic correspondant. Utilisez-le délibérément pour un blocage d'urgence. Double-check valeurs de dimension d'entrée avant le réglage
rate: 0pour éviter de bloquer accidentellement le trafic légitime. - Clés de dimensions immuables
-
Vous ne pouvez pas modifier
dimensionKeysla limite de débit existante. Si vous avez besoin de dimensions différentes, supprimez la limite de débit existante et créez-en une nouvelle. Planifiez votre structure de clés dimensionnelles avant de créer des limites de cadence de production.
Important
Les limites de débit utilisent un comportement d'ouverture automatique. Si le service de limite de débit est temporairement indisponible, le trafic est autorisé. N'utilisez pas les limites de débit comme seul mécanisme de sécurité. Associez-les à l'authentification, à l'autorisation, aux règles de passerelle et au WAF pour une défense en profondeur.
Contrôle
Utilisez les signaux suivants pour contrôler l'efficacité de la limite de débit :
Signaux de réponse limités :
-
Surveillez les réponses HTTP 429 depuis votre passerelle.
-
Analysez le
limitKeychamp dans les réponses limitées pour identifier la limite de débit qui se déclenche. -
Utilisez cette
retryAftervaleur pour comprendre la fenêtre d'application.
OpenTelemetry attributs de span :
| Attribut | Eléments à surveiller |
|---|---|
|
|
Nombre de requêtes bloquées. Alerte en cas de pics inattendus. |
|
|
Identifiez les limites de débit les plus actives. Recherchez une application déséquilibrée. |
|
|
Déterminez si les requêtes, les jetons ou les connexions constituent le goulot d'étranglement. |
|
|
Identifiez les appelants ou les cibles qui atteignent les limites le plus fréquemment. |
|
|
Liste ordonnée de tous les compartiments cochés. Utile pour comprendre quelles limites s'appliquent à une demande spécifique. |
Exemples de requêtes de surveillance :
Utilisez Amazon CloudWatch Logs Insights sur le groupe de aws/spans journaux pour interroger les spans OTEL de votre passerelle. Les exemples suivants permettent d'identifier les modèles d'étranglement.
Comptez les demandes limitées par limite de débit :
filter attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled" | stats count(*) as throttle_count by attributes.`aws.agentcore.gateway.throttle.customer.limit_key` | sort throttle_count desc
Identifiez les appelants les plus sollicités :
filter attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled" | stats count(*) as throttle_count by attributes.`aws.agentcore.gateway.throttle.customer.matched_entry` | sort throttle_count desc | limit 20
Comparez les demandes autorisées et les demandes limitées au fil du temps :
filter ispresent(attributes.`aws.agentcore.gateway.throttle.customer.decision`) | stats count(*) as total, sum(attributes.`aws.agentcore.gateway.throttle.customer.decision` = "throttled") as throttled by bin(5m)
Si une seule limite de débit est à l'origine de la plupart des problèmes d'accélération, déterminez si le débit configuré est trop restrictif ou si le modèle de trafic indique un abus.
Création d'alarmes à partir des limites de débit
Vous pouvez convertir les attributs de plage OTEL de la limite de débit en CloudWatch mesures et en alarmes afin de surveiller de manière proactive le comportement en matière d'étranglement. Cela nécessite d'activer l'observabilité de la passerelle (voir Activation de l'observabilité pour les ressources de la AgentCore passerelle).
Étape 1 : activer les étendues de passerelle
Assurez-vous que l'observabilité est activée sur votre passerelle. Les étendues de passerelle sont exportées vers CloudWatch et peuvent être consultées dans CloudWatch Transaction Search et sur la page d'observabilité générative de l'IA.
Étape 2 : Création d'un filtre CloudWatch métrique
Créez un filtre métrique sur le groupe de aws/spans journaux pour extraire les événements d'accélération sous forme de métrique personnalisée. L'exemple suivant crée une métrique qui compte les demandes limitées par limite de débit :
{ "filterPattern": "{ $.attributes.aws\\.agentcore\\.gateway\\.throttle\\.customer\\.decision = \"throttled\" }", "metricTransformations": [ { "metricName": "GatewayRateLimitThrottleCount", "metricNamespace": "AgentCore/Gateway/RateLimits", "metricValue": "1", "defaultValue": 0, "dimensions": { "LimitKey": "$.attributes.aws\\.agentcore\\.gateway\\.throttle\\.customer\\.limit_key" } } ] }
Étape 3 : Création d'une CloudWatch alarme
Une fois le filtre métrique en place, créez une alarme qui se déclenche lorsque le taux d'accélération dépasse un certain seuil.
Exemple
Étape 4 : Création d'un tableau de bord
Créez un CloudWatch tableau de bord pour visualiser les taux d'accélération au fil du temps. La configuration du widget suivante affiche le nombre d'accélérateurs groupés par limite de débit :
{ "metrics": [ [ "AgentCore/Gateway/RateLimits", "GatewayRateLimitThrottleCount", "LimitKey", "per-target-rps" ], [ "AgentCore/Gateway/RateLimits", "GatewayRateLimitThrottleCount", "LimitKey", "per-caller-rpm" ] ], "period": 60, "stat": "Sum", "title": "Rate Limit Throttles by Limit" }
Astuce
Vous pouvez également utiliser la Throttles métrique intégrée (disponible par défaut sous les métriques d'invocation de la passerelle) pour obtenir un nombre total d'accélérations sans granularité par limite. Utilisez des filtres métriques personnalisés sur les attributs de span lorsque vous avez besoin d'une visibilité par limite ou par appelant.