La limitation du débit permet un contrôle précis du trafic pour gérer les pics de charge, la surcharge des services, l'épuisement des ressources et les attaques malveillantes. Elle protège la stabilité des services backend tout en réduisant les coûts et en améliorant l'expérience utilisateur.
Concepts de la limitation du débit
La limitation du débit restreint le nombre de requêtes envoyées à un service sur une période donnée, par exemple 300 requêtes par minute ou 10 requêtes par seconde. Cela empêche la saturation d'un service par un excès de requêtes provenant d'une adresse IP client spécifique ou de clients du monde entier.
Par exemple, si vous limitez le nombre de requêtes envoyées à un service à 300 par minute, la 301e requête est refusée. Le code d'état HTTP 429, indiquant un nombre excessif de requêtes, est alors renvoyé.
Modes de limitation du débit
Les proxies Envoy prennent en charge deux modes de limitation : la limitation locale et la limitation globale. La limitation locale restreint le taux de requêtes de chaque instance de service. La limitation globale utilise un service gRPC global pour appliquer des limites de débit sur l'ensemble de l'instance Service Mesh (ASM). Combinez les deux modes pour appliquer différents niveaux de limitation.
|
Mode |
Description |
Références |
|
Limitation locale |
|
Configurer la limitation locale dans le Traffic Management Center |
|
Limitation globale ou distribuée |
|
Fonctionnement de la limitation locale
Un proxy Envoy utilise l'algorithme du seau de jetons (token bucket) pour mettre en œuvre la limitation locale. Des jetons sont ajoutés à un seau à un rythme constant. Chaque requête entrante consomme un jeton. Lorsque le seau est vide, les requêtes suivantes sont refusées. Spécifiez généralement les paramètres suivants :
L'intervalle de remplissage du seau
Le nombre de jetons ajoutés au seau à chaque intervalle
Par défaut, un proxy Envoy renvoie le code d'état HTTP 429 lorsqu'une requête est refusée et que l'en-tête x-envoy-ratelimited est défini. Vous pouvez personnaliser le code d'état HTTP et l'en-tête de réponse.
Tenez compte des concepts suivants lors de l'utilisation de la fonctionnalité de limitation :
http_filter_enabled : indique le pourcentage de requêtes pour lesquelles la limite de débit locale est vérifiée mais non appliquée.
http_filter_enforcing : indique le pourcentage de requêtes sur lesquelles la limite de débit locale est appliquée ou imposée.
Définissez les valeurs sous forme de pourcentages. Par exemple, définissez http_filter_enabled à 10 % des requêtes et http_filter_enforcing à 5 % des requêtes. De cette manière, vous pouvez tester l'effet de la limitation avant de l'appliquer à toutes les requêtes.
Fonctionnement de la limitation globale
La limitation globale contrôle les taux de requêtes sur l'ensemble d'une instance ASM en utilisant le service de limitation de débit Envoy. Le service de limitation de débit traite le trafic de manière centralisée et applique des limites de débit basées sur des règles et des quotas prédéfinis.
La configuration de la limitation globale comprend deux parties : le filtre rate_limits d'Envoy et la configuration du service de limitation de débit.
Le filtre rate_limits contient une liste d'
actions. Un proxy Envoy tente de faire correspondre chaque requête avec chaque action du filtre rate_limits. Un descripteur est généré pour chaque action. Un descripteur est composé d'un ensemble d'entrées de descripteur correspondant à une action. Chaque entrée de descripteur est une paire clé-valeur, telle que"descriptor-key-1": "descriptor-value-1"et"descriptor-key-2": "descriptor-value-2". Pour plus d'informations, consultez config-http-filters-rate-limit.La configuration du service de limitation de débit est mise en correspondance avec l'entrée de descripteur générée pour chaque requête. La configuration du service de limitation de débit spécifie la limite de débit pour un ensemble spécifique d'entrées de descripteur. Le service de limitation de débit interagit avec le cache Redis pour déterminer s'il convient de limiter le débit des requêtes et envoie la décision de limitation au proxy Envoy.
Ensemble, le filtre rate_limits et le service de limitation de débit mettent en œuvre la limitation globale. Le filtre génère un descripteur basé sur l'action configurée et l'envoie au service de limitation de débit, qui détermine la limite applicable et renvoie une réponse de limitation. Ce mécanisme vous offre un contrôle total sur les taux de requêtes et protège les services backend contre les pics de trafic.