View a markdown version of this page

Meilleures pratiques en matière de limites de débit - Base rocheuse de l'Amazonie AgentCore

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 BatchPutGatewayRateLimits pour 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.decision OTEL et les taux de réponse de 429 avant de réduire les limites.

Bloc d'urgence

Utilisez des rate: 0 entré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

targetName

Faible (ensemble connu)

Un excellent choix. À utiliser pour une protection par cible.

toolName

Low-medium

Bon choix pour les passerelles MCP avec des ensembles d'outils connus.

qualifiedModelId

Faible (ensemble connu)

Excellent pour les passerelles d'inférence.

$.context.jwt.sub

Medium-high

Idéal pour les limites par utilisateur. Cardinalité limitée par votre base d'utilisateurs.

$.context.jwt.team

Faible

Excellent pour les quotas par équipe.

$.context.iam.principal

Moyenne

Idéal pour les limites par rôle dans les IAM-authenticated configurations.

$.context.jwt.jti

Sans limites

Ne pas utiliser. Crée un compartiment unique par jeton.

$.context.jwt.nonce

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_tokens valeurs input_tokens et 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 cache input_tokens dé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 retryAfter champ 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: 0 pour éviter de bloquer accidentellement le trafic légitime.

Clés de dimensions immuables

Vous ne pouvez pas modifier dimensionKeys la 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 limitKey champ dans les réponses limitées pour identifier la limite de débit qui se déclenche.

  • Utilisez cette retryAfter valeur pour comprendre la fenêtre d'application.

OpenTelemetry attributs de span :

Attribut Eléments à surveiller

aws.agentcore.gateway.throttle.customer.decision = throttled

Nombre de requêtes bloquées. Alerte en cas de pics inattendus.

aws.agentcore.gateway.throttle.customer.limit_key

Identifiez les limites de débit les plus actives. Recherchez une application déséquilibrée.

aws.agentcore.gateway.throttle.customer.metric

Déterminez si les requêtes, les jetons ou les connexions constituent le goulot d'étranglement.

aws.agentcore.gateway.throttle.customer.matched_entry

Identifiez les appelants ou les cibles qui atteignent les limites le plus fréquemment.

aws.agentcore.gateway.throttle.customer.evaluated

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
AWS CLI
  1. Exécutez la commande suivante :

    aws cloudwatch put-metric-alarm \ --alarm-name "GatewayRateLimitThrottleSpike" \ --namespace "AgentCore/Gateway/RateLimits" \ --metric-name "GatewayRateLimitThrottleCount" \ --statistic Sum \ --period 300 \ --evaluation-periods 1 \ --threshold 100 \ --comparison-operator GreaterThanThreshold \ --alarm-description "Alert when rate limit throttles exceed 100 in 5 minutes" \ --alarm-actions "arn:aws:sns:us-west-2:123456789012:my-alarm-topic"
AWS Python SDK (Boto3)
  1. import boto3 cloudwatch = boto3.client("cloudwatch", region_name="us-west-2") cloudwatch.put_metric_alarm( AlarmName="GatewayRateLimitThrottleSpike", Namespace="AgentCore/Gateway/RateLimits", MetricName="GatewayRateLimitThrottleCount", Statistic="Sum", Period=300, EvaluationPeriods=1, Threshold=100, ComparisonOperator="GreaterThanThreshold", AlarmDescription="Alert when rate limit throttles exceed 100 in 5 minutes", AlarmActions=["arn:aws:sns:us-west-2:123456789012:my-alarm-topic"], ) print("Alarm created successfully")

É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.