Démarrage rapide : Définir des limites de taux de requêtes

Notes

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à :❌ De base/Standard ✔️ Enterprise

Ce démarrage rapide vous explique comment définir des limites de taux de requêtes à l’aide de Spring Cloud Gateway sur le plan Enterprise d’Azure Spring Apps.

La limitation du taux vous permet d’éviter les problèmes qui surviennent avec des pics de trafic. Lorsque vous définissez des limites de taux de requêtes, votre application peut rejeter des requêtes excessives. Cette configuration vous permet de réduire les erreurs de limitation et de prédire plus précisément le débit.

Prérequis

Définir des limites de taux de demandes

Spring Cloud Gateway inclut des filtres d’itinéraire à partir de la version Open Source et plusieurs filtres d’itinéraire supplémentaires. L’un de ces filtres est RateLimit : limitation du filtre des requêtes utilisateurs. Le filtre RateLimit limite le nombre de requêtes autorisées par itinéraire pendant une fenêtre de temps.

Lorsque vous définissez un itinéraire, vous pouvez ajouter le filtre RateLimit en l’incluant dans la liste des filtres de l’itinéraire. Le filtre accepte quatre options :

  • Nombre de requêtes acceptées pendant la fenêtre.
  • Durée de la fenêtre. Cette valeur est exprimée en millisecondes par défaut, mais vous pouvez spécifier un suffixe s, m ou h pour indiquer que la valeur est exprimée en secondes, en minutes ou en heures.
  • (Facultatif) Clé de partition utilisateur. Vous pouvez également appliquer la limitation du taux par utilisateur. Autrement dit, différents utilisateurs peuvent avoir leur propre débit autorisé en fonction d’un identificateur trouvé dans la requête. Indiquez si la clé se trouve dans une revendication JWT ou un en-tête HTTP avec la syntaxe claim ou header.
  • (Facultatif) Vous pouvez limiter le taux par adresses IP, mais pas en combinaison avec la limitation du taux par utilisateur.

L’exemple suivant limite tous les utilisateurs à deux requêtes toutes les cinq secondes vers l’itinéraire /products :

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

Si vous souhaitez exposer un itinéraire pour différents ensembles d’utilisateurs, chacun identifié par son propre en-tête HTTP client_id, utilisez la définition d’itinéraire suivante :

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

Lorsque la limite est dépassée, les réponses échouent avec l’état 429 Too Many Requests.

Utilisez la commande suivante pour appliquer le filtre RateLimit à l’itinéraire /products :

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

Utilisez les commandes suivantes pour récupérer l’URL de l’itinéraire /products dans Spring Cloud Gateway :

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

Effectuez plusieurs requêtes vers l’URL de /products pendant une période de cinq secondes pour voir les requêtes qui échouent avec un état 429 Too Many Requests.

Nettoyer les ressources

Si vous prévoyez d’utiliser d’autres guides de démarrage rapide et tutoriels, vous pouvez conserver ces ressources. Quand vous n’en avez plus besoin, supprimez le groupe de ressources, ce qui supprime également les ressources qu’il contient. Pour supprimer le groupe de ressources à l’aide d’Azure CLI, utilisez les commandes suivantes :

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Étapes suivantes

Passez à l’un des guides de démarrage rapide facultatifs suivants :