REL05-BP02 Limiter les demandes - Framework AWS Well-Architected

REL05-BP02 Limiter les demandes

Limitez les demandes pour atténuer l’épuisement des ressources en cas d’augmentation imprévue de la demande. Les demandes inférieures à la limite sont traitées tandis que celles dépassant la limite définie sont rejetées et présentent un message de retour indiquant que la demande a dépassé la limite.

Résultat souhaité : les pics de volume importants, qu’ils soient dus à une augmentation soudaine du trafic client, à des inondations ou à des tempêtes de nouvelles tentatives, sont atténués par la limitation des demandes, ce qui permet aux charges de travail de poursuivre le traitement normal du volume de demandes pris en charge.

Anti-modèles courants :

  • Les limitations des points de terminaison de l’API ne sont pas implémentées ou leurs valeurs par défaut sont conservées sans tenir compte des volumes attendus.

  • Les points de terminaison de l’API ne sont pas testés en termes de charge ou les limites de régulation ne sont pas testées.

  • Limiter les taux de demandes sans tenir compte de la taille ou de la complexité des demandes.

  • Tester les taux de demande maximaux ou la taille maximale des demandes, mais pas les deux simultanément.

  • Les ressources ne sont pas provisionnées selon les mêmes limites établies lors des tests.

  • Aucun plan d’utilisation n’a été configuré ni envisagé pour les utilisateurs d’API d’application à application (A2A).

  • Les utilisateurs de files d’attente qui mettent à l’échelle horizontalement ne disposent pas de paramètres de simultanéité maximaux configurés.

  • La limitation du débit par adresse IP n’a pas été mise en œuvre.

Avantages du respect de cette bonne pratique : les charges de travail qui fixent des limites peuvent fonctionner normalement et traiter correctement le chargement des demandes acceptées en cas de pics de volume inattendus. Les pics soudains ou soutenus de demandes adressées aux API et aux files d’attente sont limités et n’épuisent pas les ressources de traitement des demandes. Les limites de débit limitent les requêtes individuelles afin que les volumes élevés de trafic provenant d’une seule adresse IP ou d’un seul utilisateur d’API n’épuisent pas les ressources et n’aient pas d’impact sur les autres consommateurs.

Niveau d’exposition au risque si cette bonne pratique n’est pas respectée : élevé

Directives d’implémentation

Les services doivent être conçus pour traiter une capacité connue de demandes ; cette capacité peut être établie par des tests de charge. Si les taux d’arrivée des demandes dépassent les limites, la réponse appropriée indique qu’une demande a été limitée. Cela permet au consommateur de gérer l’erreur et de réessayer ultérieurement.

Lorsque votre service nécessite une implémentation de limitation, pensez à implémenter l’algorithme du compartiment à jetons, dans lequel un jeton compte pour une demande. Les jetons sont rechargés à une vitesse limitée par seconde et vidés de manière asynchrone à raison d’un jeton par demande.

Schéma décrivant l’algorithme du compartiment à jetons.

L’algorithme du compartiment à jetons.

Amazon API Gateway implémente l’algorithme du compartiment à jetons en fonction des limites du compte et de la région et il peut être configuré par client avec des plans d’utilisation. En outre, Amazon Simple Queue Service (Amazon SQS) et Amazon Kinesis peuvent mettre en mémoire tampon les demandes afin de réduire le taux de demandes et de permettre des taux de limitation plus élevés pour les demandes pouvant être traitées. Enfin, vous pouvez implémenter une limitation de débit avec AWS WAF pour limiter les consommateurs d’API spécifiques qui génèrent une charge anormalement élevée.

Étapes d’implémentation

Vous pouvez configurer API Gateway avec des limites de régulation pour vos API et renvoyer des erreurs 429 Too Many Requests lorsque les limites sont dépassées. Vous pouvez utiliser AWS WAF avec votre AWS AppSync et vos points de terminaison API Gateway pour activer la limitation du débit par adresse IP. En outre, lorsque votre système peut tolérer un traitement asynchrone, vous pouvez placer les messages dans une file d’attente ou un flux pour accélérer les réponses aux clients du service, ce qui vous permet d’atteindre des taux de limitation plus élevés.

Avec le traitement asynchrone, lorsque vous avez configuré Amazon SQS comme source d’événements pour AWS Lambda, vous pouvez configurer une simultanéité maximale afin d’éviter que des taux d’événements élevés ne consomment le quota d’exécution simultanée du compte disponible nécessaire pour les autres services de votre charge de travail ou de votre compte.

Bien qu’API Gateway propose une implémentation gérée du compartiment à jetons, lorsque vous ne pouvez pas utiliser API Gateway, vous pouvez tirer parti des implémentations open source spécifiques à la langue (voir les exemples associés dans Ressources) du compartiment à jetons pour vos services.

  • Comprenez et configurez les limites de limitation d’API Gateway au niveau du compte par région, de l’API par étape et de la clé d’API par niveau de plan d’utilisation.

  • Appliquez des règles de limitation de débit AWS WAF à API Gateway et aux points de terminaison AWS AppSync pour vous protéger contre les inondations et bloquer les adresses IP malveillantes. Les règles de limitation de débit peuvent également être configurées sur les clés d’API AWS AppSync pour les consommateurs A2A.

  • Déterminez si vous avez besoin d’un contrôle plus limitant qu’une limitation du débit pour les API AWS AppSync et, si c’est le cas, configurez un API Gateway devant votre point de terminaison AWS AppSync.

  • Lorsque les files d’attente Amazon SQS sont configurées comme déclencheurs pour les consommateurs de files d’attente Lambda, définissez la simultanéité maximale sur une valeur qui traite suffisamment pour atteindre vos objectifs de niveau de service, mais qui ne respecte pas les limites de simultanéité ayant un impact sur les autres fonctions Lambda. Envisagez de définir une simultanéité réservée pour d’autres fonctions Lambda du même compte et de la même région lorsque vous utilisez des files d’attente avec Lambda.

  • Utilisez API Gateway avec des intégrations de services natives vers Amazon SQS ou Kinesis pour mettre des demandes en mémoire tampon.

  • Si vous ne pouvez pas utiliser API Gateway, examinez les bibliothèques spécifiques à la langue pour implémenter l’algorithme de compartiment à jetons adapté à votre charge de travail. Consultez la section des exemples et faites vos propres recherches pour trouver une bibliothèque appropriée.

  • Testez les limites que vous envisagez de définir ou d’autoriser à augmenter, et documentez les limites testées.

  • N’augmentez pas les limites au-delà de ce que vous avez établi lors des tests. Lorsque vous augmentez une limite, vérifiez que les ressources provisionnées sont déjà équivalentes ou supérieures à celles des scénarios de test avant d’appliquer l’augmentation.

Ressources

Bonnes pratiques associées :

Documents connexes :

Exemples associés :

Vidéos connexes :

Outils associés :