Partager via


Limite de débit d’appels par clé

S’applique à : Développeur | Essentiel | Essentiel v2 | Standard | Standard v2 | Premium | Premium v2

La stratégie rate-limit-by-key évite les pics d’utilisation des API par clé en limitant le débit d’appels à un nombre spécifié pour une période donnée. La clé peut avoir une valeur de chaîne arbitraire ; elle est généralement fournie par le biais d’une expression de stratégie. Une condition d’incrément facultative peut être ajoutée pour spécifier quelles demandes doivent être comptées dans la limite. Lorsque ce débit d’appels est dépassé, l’appelant reçoit le code d’état de réponse 429 Too Many Requests.

Pour comprendre la différence entre les limites de taux et les quotas, consultez Limites de taux et quotas.

Attention

En raison de la nature distribuée de l’architecture de limitation, la limitation de débit n’est jamais complètement précise. La différence entre le nombre configuré de requêtes autorisées et le nombre réel varie en fonction du volume et du taux de requête, de la latence du back-end et d’autres facteurs.

Notes

Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. Pour vous aider à configurer cette stratégie, le portail fournit un éditeur guidé basé sur des formulaires. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.

Instruction de la stratégie

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   retry-after-header-name="custom header name, replaces default 'Retry-After'" 
                   retry-after-variable-name="policy expression variable name"
                   remaining-calls-header-name="header name"  
                   remaining-calls-variable-name="policy expression variable name"
                   total-calls-header-name="header name"/> 

Attributs

Attribut Descriptif Obligatoire Par défaut
Lync Le nombre total maximal d’appels autorisés pour la valeur de clé au cours de l’intervalle de temps spécifié dans renewal-period. Les expressions de stratégie sont autorisées. Oui N/A
contre-clé Clé à utiliser pour la stratégie de limite de débit. Pour chaque valeur de clé, un compteur unique est utilisé pour toutes les étendues auxquelles la stratégie est configurée. Les expressions de stratégie sont autorisées. Oui N/A
incrément-condition Expression booléenne spécifiant si la demande doit être comptée dans le débit (true). Les expressions de politique sont autorisées, mais l'évaluation et l'incrémentation du compteur sont reportées à la fin du pipeline de sortie. Non N/A
incrément-count Nombre par lequel le compteur est augmenté par demande. Les expressions de politique sont autorisées, mais l'évaluation et l'incrémentation du compteur sont à la fin du pipeline de sortie. Non 1
période de renouvellement Durée en secondes de la fenêtre glissante pendant laquelle le nombre de demandes autorisées ne doit pas dépasser la valeur spécifiée dans calls. Valeur maximale autorisée : 300 secondes. Les expressions de stratégie sont autorisées. Oui N/A
retry-after-header-name Le nom d’un en-tête de réponse personnalisé dont la valeur est l’intervalle de nouvelle tentative recommandé, en secondes, après dépassement du débit d’appels spécifié pour la valeur de clé. Les expressions de stratégie ne sont pas autorisées. Non Retry-After
retry-after-variable-name Le nom d’une variable d’expression de stratégie qui stocke l’intervalle de nouvelle tentative recommandé, en secondes, après dépassement du débit d’appels spécifié pour la valeur de clé. Les expressions de stratégie ne sont pas autorisées. Non N/A
remaining-calls-header-name Le nom d’un en-tête de réponse dont la valeur après chaque exécution de stratégie est le nombre d’appels restants autorisés pour la valeur de clé dans l’intervalle de temps spécifié dans renewal-period. Les expressions de stratégie ne sont pas autorisées. Non N/A
restant-calls-variable-name Le nom d’une variable d’expression de stratégie qui, après l’exécution de chaque stratégie, stocke le nombre d’appels restants autorisés pour la valeur de clé dans l’intervalle de temps spécifié dans renewal-period. Les expressions de stratégie ne sont pas autorisées. Non N/A
total-calls-header-name Nom d’un en-tête de réponse dont la valeur est la valeur spécifiée dans calls. Les expressions de stratégie ne sont pas autorisées. Non N/A

Utilisation

Notes d’utilisation

  • Gestion des API utilise un seul compteur pour chaque valeur de counter-key que vous spécifiez dans la stratégie. Le compteur est mis à jour pour toutes les étendues pour lesquelles la stratégie est configurée avec cette valeur de clé. Si vous souhaitez configurer des compteurs distincts pour différentes étendues (par exemple une API ou un produit spécifique), spécifiez des valeurs de clé différentes dans les différentes étendues. Par exemple, ajoutez une chaîne qui identifie l’étendue avec la valeur d’une expression.
  • Les niveaux v2 utilisent un algorithme de seau de jetons pour la limitation de débit, ce qui diffère de l’algorithme à fenêtre glissante dans les niveaux classiques. En raison de cette différence d’implémentation, lorsque vous configurez cette politique dans les niveaux v2 à plus d’un champ et en utilisant la même counter-key valeur, assurez-vous que les renewal-period valeurs et calls sont cohérentes dans toutes les instances de la politique. Des valeurs incohérentes peuvent entraîner des comportements imprévisibles.
  • Dans une passerelle auto-hébergée, les nombres limites de taux peuvent être configurés pour être synchronisés localement (entre les instances de passerelle sur les nœuds de cluster), par exemple par le biais d’un déploiement de graphique Helm pour Kubernetes ou à l’aide des modèles de déploiement du portail Azure. Toutefois, les nombres limites de débit ne se synchronisent pas avec d’autres ressources de passerelle configurées dans l’instance Gestion des API, notamment la passerelle managée dans le cloud. En savoir plus
  • Cette stratégie effectue le suivi des appels indépendamment à chaque passerelle où elle est appliquée, y compris les passerelles d’espace de travail et les passerelles régionales dans un déploiement multirégion. Il n’agrège pas les données d’appel sur l’ensemble de l’instance.
  • Quand increment-condition ou increment-count sont définis à l’aide d’expressions, l’évaluation et l’incrément du compteur de limite de débit sont reportés à la fin du pipeline sortant pour autoriser les expressions de stratégie en fonction de la réponse. La condition de dépassement de limite n'est pas évaluée en même temps dans ce cas et sera évaluée lors du prochain appel entrant. Cela conduit à des cas où le code d'état 429 Too Many Requests est renvoyé avec 1 appel de plus que d'habitude.

Exemple

Dans l’exemple suivant, la limite de débit de 10 appels par 60 secondes est indexée par l’adresse IP de l’appelant. Après l’exécution de chaque stratégie, les appels restants autorisés pour l’adresse IP de cet appelant dans la période de temps sont stockés dans la variable remainingCallsPerIP.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Pour plus d’informations et d’exemples sur cette stratégie, consultez la page Limitation avancée des demandes dans la Gestion des API Azure.

Pour plus d’informations sur l’utilisation des stratégies, consultez :