View a markdown version of this page

Comportement de dimensionnement pour les fonctions Web Lambda - AWS Lambda

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.

Comportement de dimensionnement pour les fonctions Web Lambda

Lambda adapte automatiquement le point de terminaison de votre fonction Web à mesure que le trafic arrive. Il s'adapte en deux dimensions :

  • Nombre d'environnements — Lambda ajoute des environnements d'exécution supplémentaires, jusqu'à. maxEnvironments

  • Demandes simultanées par environnement : chaque environnement gère plusieurs demandes à la fois. Lambda gère une limite de simultanéité dynamique par environnement en fonction de votre utilisation des ressources. Vous contrôlez la limite supérieure de cette limite dynamique à l'aide demaxConcurrencyPerEnvironment. Pour plus d’informations, consultez Limite de simultanéité dynamique par environnement.

Vous pouvez également configurer un point rateLimit de terminaison pour limiter le taux d'arrivée de ses demandes. Il s'agit d'un paramètre facultatif qui est appliqué avant que les demandes n'atteignent vos environnements.

Un point de terminaison évolue à partir de zéro. En l'absence de trafic, Lambda n'exécute aucun environnement. Cette page explique les paramètres de dimensionnement d'un point de terminaison, les quotas de compte associés et explique comment choisir des valeurs qui optimisent les coûts ou les performances.

Environnements d'exécution

Un environnement d'exécution est une instance de calcul isolée qui exécute votre serveur HTTP. Chaque environnement possède sa propre mémoire, son propre système de fichiers et son propre espace de traitement. Pour savoir comment Lambda initialise, réutilise et arrête un environnement d'exécution, consultez. Cycle de vie des environnements d'exécution

Lambda crée et supprime des environnements automatiquement en fonction du trafic :

  • Lorsque le trafic augmente, Lambda crée des environnements supplémentaires pour répondre à la demande de trafic.

  • Lorsque le trafic diminue, Lambda vide les environnements sous-utilisés et les supprime.

  • Lorsqu'il n'y a pas de trafic, Lambda supprime tous les environnements. Le point final est redimensionné à zéro.

Il n'y a aucun paramètre d'environnement minimum ou réservé. Un point de terminaison évolue toujours à partir de zéro à mesure que le trafic arrive. Pour éviter les démarrages à froid en cas de faible augmentation du trafic, Lambda adapte automatiquement les environnements d'exécution en fonction de la demande afin de maintenir la capacité inutilisée (marge de manœuvre) pour le trafic entrant. Lorsque les environnements sont sous-utilisés, Lambda les réduit, y compris jusqu'à zéro.

Limite de simultanéité dynamique par environnement

La limite de simultanéité dynamique par environnement est une Lambda-managed limite du nombre de demandes qu'un seul environnement d'exécution gère simultanément. En fonction de l'utilisation des ressources de votre fonction, Lambda ajuste automatiquement cette limite pour optimiser l'efficacité et les performances. Lambda adapte de nouveaux environnements lorsque les environnements existants sont proches de leurs limites. Lorsque la limite empêche tous les environnements existants d'accepter davantage de demandes, les demandes sont mises en file d'attente et attendent le prochain environnement disponible.

Vous ne configurez pas directement la limite dynamique. Au lieu de cela, vous pouvez lui appliquer une limite supérieure maxConcurrencyPerEnvironment en définissant la révision. La limite dynamique de Lambda peut être inférieure à cette valeur, mais ne la dépasse jamais. Par exemple, si vous définissez cette valeur sur maxConcurrencyPerEnvironment 32, Lambda achemine au maximum 32 demandes simultanées vers n'importe quel environnement, même si celui-ci a la capacité d'en recevoir davantage.

La plupart des applications peuvent s'appuyer sur la limite dynamique sans la modifiermaxConcurrencyPerEnvironment. Pour savoir quand le modifier, reportez-vous àChoix des paramètres de dimensionnement.

Paramètres de dimensionnement

Trois paramètres contrôlent la manière dont Lambda adapte votre fonction Web. Vous configurez chaque paramètre sur le point de terminaison ou sur la révision.

Paramètre Configuré sur Plage valide Par défaut Description
maxConcurrencyPerEnvironment Révision 1 à 128 64 Limite supérieure de la limite de Lambda-managed simultanéité dynamique par environnement. Lambda ajuste automatiquement la simultanéité réelle par environnement, de sorte que la plupart des applications peuvent s'appuyer sur la limite dynamique sans modifier cette valeur.
maxEnvironments Endpoint Facultatif. 2 à 10 000 Aucune Limite le nombre d'environnements d'exécution pour le point de terminaison dans chacun Région AWS d'eux. Contrôle l'échelle horizontale. Le dimensionnement de l'environnement des terminaux est toujours limité par le quota de vCPU du compte disponible, même maxEnvironments s'il n'est pas défini.
rateLimit Endpoint Facultatif. 0 à 10 000 Aucune Limite le taux d'arrivée des demandes du point de terminaison, en demandes par seconde, pour chacune d'elles Région AWS. Les valeurs inférieures à 1 000 doivent être un multiple de 100, et les valeurs supérieures à 1 000 doivent être un multiple de 1 000. Une valeur de 0 bloque tout le trafic. Les demandes supérieures à la limite de débit effective reçoivent une réponse HTTP 429 (Too Many Requests). Lorsqu'il n'est pas défini, le taux d'arrivée du point de terminaison est limité par le quota tarifaire du compte par point de terminaison.

maxEnvironmentset rateLimit sont des propriétés de point de terminaison facultatives. Vous pouvez les mettre à jour sans créer de nouvelle révision. Par défaut, aucun des deux n'est défini. Une valeur maxEnvironments élevée ne garantit pas que le terminal puisse évoluer aussi loin. Le dimensionnement de l'environnement est toujours limité par le quota de vCPU régional du compte. Une rateLimit valeur de 0 bloque tout le trafic. Pour plus de détails, consultez étranglement. Le taux de demandes du point de terminaison est toujours limité par le quota de taux de demandes du compte, même s'il n'rateLimitest pas défini. Pour les quotas, voir la section suivante.

Pour modifier maxEnvironments ourateLimit, exécutez aws lambda-web update-web-function-endpoint avec le --throttle-config paramètre --scaling-config or, par exemple --scaling-config '{"maxEnvironments": 50}' ou--throttle-config '{"rateLimit": 8000}'. Omettez un paramètre pour conserver sa valeur actuelle. Pour effacer une valeur que vous avez définie, transmettez un objet vide, tel que--scaling-config '{}'. Pour plus d'informations, consultezMise à jour d'un terminal. maxConcurrencyPerEnvironmentest un paramètre de révision. Pour le modifier, créez une nouvelle révision. Le fait que la nouvelle révision reçoive du trafic dépend du mode de déploiement automatique du terminal. Pour plus d’informations, consultez Création d'une révision.

Quotas de comptes

Ces quotas s'appliquent par Région AWS. Elles s'appliquent toujours en plus des limites de points de terminaison éventuellement configurées.

  • Per-endpoint limite de débit : 10 000 demandes par seconde (RPS).

  • Limite de débit totale du compte : 100 000 RPS sur tous les terminaux de la région.

  • Limite de vCPU du compte : 2 000 vCPU sur tous les terminaux de la région. Chaque environnement d'exécution consomme 2 vCPU. Ce quota limite le nombre total d' Région AWS environnements par compte.

Pour connaître les valeurs de quota actuelles et savoir comment demander une augmentation, consultezFonctions Web Lambda.

Comment les paramètres de mise à l'échelle interagissent

Ces trois paramètres de mise à l'échelle fonctionnent indépendamment pour déterminer l'échelle de votre terminal. À l'exception des quotas de compte, chaque point de terminaison évolue indépendamment, même les points de terminaison appartenant à la même fonction Web.

Capacité totale de simultanéité

Vous pouvez considérer que le nombre maximal de demandes en vol du point de terminaison est approximativement maxEnvironments multiplié par la limite de simultanéité dynamique par environnement autorisée actuellement par Lambda. Le maximum que le point de terminaison peut gérer en une fois est maxEnvironments ×maxConcurrencyPerEnvironment. Il n'atteint ce nombre que lorsqu'il exécute maxEnvironments des environnements et que chacun gère les maxConcurrencyPerEnvironment demandes. Si maxEnvironments ce n'est pas le cas, le point de terminaison évolue pour répondre à la demande, dans la limite du quota de vCPU du compte.

Limite du taux total de demandes

rateLimitlimite les demandes par seconde, indépendamment de la capacité de simultanéité. Lambda renvoie le protocole HTTP 429 pour les requêtes supérieures à la limite de débit, même lorsque les environnements ont la capacité de les traiter.

Mise à l'échelle

Avant que tous les environnements n'atteignent la limite de simultanéité dynamique, Lambda étend davantage d'environnements, jusqu'à. maxEnvironments Un point de terminaison cesse d'augmenter lorsqu'il atteint maxEnvironments le quota de vCPU du compte. Si un point de terminaison ne parvient pas à évoluer et que tous les environnements existants sont pleinement utilisés, Lambda limite immédiatement les nouvelles requêtes avec une réponse HTTP 429 (Too Many Requests). Lambda ne met pas en file d'attente les demandes limitées. Si un nouvel environnement d'exécution est en cours d'initialisation, les demandes sont mises en file d'attente au lieu d'être limitées immédiatement.

Dépassement temporaire

Lors des révisions, des modifications du poids, du cycle interne de la flotte ou d'autres événements opérationnels, Lambda peut temporairement dépasser le poids maxEnvironments afin de prioriser la disponibilité. Ce dépassement est bref et Lambda revient automatiquement à la limite configurée. Vous n'avez pas à prévoir de marge de manœuvre budgétaire pour ces événements opérationnels lorsque vous le souhaitez. maxEnvironments

Exemple Exemple : calcul de capacité

Vous configurez les paramètres suivants pour votre fonction Web :

  • maxEnvironments= 10

  • maxConcurrencyPerEnvironment= 64

  • rateLimit= 8000

Ces paramètres limitent séparément la simultanéité (demandes en vol en une seule fois) et le taux de demandes (demandes acceptées par seconde). Avec jusqu'à 10 environnements et jusqu'à 64 demandes simultanées chacun, le point de terminaison peut traiter au maximum 640 demandes simultanées (10 × 64). La limite dynamique étant souvent inférieure, la simultanéité prolongée est généralement moindre. La limite atteinte en premier par le terminal dépend de la durée de chaque demande.

Concurrency-bound point de terminaison

Supposons que chaque demande prenne 200 ms, par exemple parce qu'elle attend une requête de base de données. Avec 640 demandes en cours, le point de terminaison traite au maximum environ 3 200 demandes par seconde (640 ÷ 0,2 s), ce qui est inférieur aux 8 000 rateLimit RPS. Lorsque les 10 environnements sont pleinement utilisés, Lambda limite les nouvelles requêtes avec le protocole HTTP 429. Pour augmenter le trafic, augmentezmaxEnvironments.

Request-rate-bound point de terminaison

Supposons que chaque demande prenne 10 ms. À 8 000 demandes par seconde, environ 80 demandes sont en cours (8 000 × 0,01 s), soit bien moins de 640. Lambda renvoie le protocole HTTP 429 pour les requêtes supérieures à 8 000 RPS, même si les environnements ont la capacité de les traiter. Pour accepter davantage de demandesrateLimit, augmentez le quota jusqu'à 10 000 RPS par point de terminaison.

étranglement

Lorsque le taux de demandes entrantes dépasse le rateLimit paramètre, Lambda renvoie une réponse HTTP 429 (Too Many Requests) pour les demandes excédentaires. La limite de débit s'applique à l'ensemble du point de terminaison dans chaque cas Région AWS.

Lambda renvoie également une réponse HTTP 429 lorsque tous les environnements sont pleinement utilisés, soit parce que le point de terminaison a atteint maxEnvironments son quota de vCPU, soit parce que le compte a atteint son quota de vCPU. Pour plus d’informations, consultez Comment les paramètres de mise à l'échelle interagissent.

Lambda peut également renvoyer le HTTP 429 avec le type Platform.EndpointConcurrentInitThrottle d'erreur lorsque trop d'environnements d'exécution s'initialisent en même temps. Cet accélérateur n'augmente pas la métrique de l'accélérateur. Pour les mesures que les autres types d'accélérateurs augmentent, consultez. Utilisation de CloudWatch métriques avec les fonctions Web Lambda

Lorsque le point de terminaison rateLimit est égal à 0, Lambda renvoie HTTP 503 (Service Unavailable) au lieu de HTTP 429, avec l'lambda-web-error-typeen-tête. Platform.EndpointDisabled Lambda peut également renvoyer HTTP 503 lorsqu'il perd de la charge pour protéger le service. Réessayez un 503 qui n'a pas d'lambda-web-error-typeen-tête avec backoff et jitter. Un 503 avec Platform.EndpointDisabled continue jusqu'à ce que vous rateLimit définissiez une valeur différente de zéro.

Lambda mesure la limite de débit par seconde. De brèves rafales au-dessus de la limite peuvent être acceptées. Le trafic soutenu au-dessus de la limite entraîne un ralentissement.

Lorsque votre application reçoit des réponses HTTP 429, implémentez un backoff exponentiel avec gigue dans votre code client pour réessayer les requêtes limitées.

À la hausse et à la réduction

Mise à l'échelle ascendante

Lorsque le trafic augmente et que les environnements existants approchent de la limite de simultanéité dynamique par environnement, Lambda crée des environnements d'exécution supplémentaires. Chaque nouvel environnement s'initialise avant de répondre aux demandes. Pour les étapes d'initialisation et le délai de démarrage, consultezInitialisation (démarrage à froid).

Lorsqu'un nouvel environnement s'initialise, Lambda achemine les demandes vers les environnements existants disposant de capacités disponibles. Lorsqu'aucun environnement n'a de capacité, la demande attend que Lambda en initialise un nouveau (démarrage à froid). Lambda renvoie le HTTP 429 uniquement lorsque l'une des limites étranglement s'applique, telle que maxEnvironments le quota de vCPU du compte.

Diminuer

Lorsque le trafic diminue, Lambda identifie les environnements sous-utilisés et les supprime. Lambda vide un environnement avant de le supprimer. Il arrête d'acheminer les nouvelles demandes vers l'environnement, laisse les demandes en cours de traitement dans le meilleur des cas et envoie. SIGTERM Pour plus de détails, consultez Cycle de vie des environnements d'exécution.

Lambda réduit les environnements à zéro lorsqu'il n'y a pas de trafic. La demande suivante lance un nouvel environnement (démarrage à froid).

Choix des paramètres de dimensionnement

Tenez compte des points suivants lorsque vous choisissez des valeurs pour le point de terminaison rateLimitmaxEnvironments, le point de terminaison et la révisionmaxConcurrencyPerEnvironment.

Choisir rateLimit

La valeur par défaut est aucun, ce qui signifie que le taux de demandes d'un point de terminaison est limité à la fois par le quota de 10 000 RPS par point de terminaison et par le quota de 100 000 RPS par compte. Envisagez de définir une rateLimit valeur lorsque vous souhaitez limiter le montant qu'un terminal peut réclamer du quota RPS de votre compte, qui est partagé par tous vos points de terminaison.

La définition d'un rateLimit peut également être utile pour limiter le trafic total aux dépendances en aval.

Choisir maxEnvironments

La valeur par défaut est none, ce qui signifie que le nombre d'environnements d'un point de terminaison est uniquement limité par le quota de vCPU du compte. Envisagez de définir une maxEnvironments valeur lorsque vous souhaitez limiter le montant qu'un point de terminaison peut réclamer du quota de vCPU de votre compte, qui est partagé par tous vos points de terminaison.

Lorsque vous définissez une maxEnvironments valeur, pensez à surveiller le nombre d'environnements du point de terminaison afin d'être alerté lorsqu'il est proche de votre maxEnvironments limite, et prenez des mesures pour éviter de ralentir une application qui connaît une croissance organique au fil du temps.

La définition d'une faible valeur de maxEnvironments peut contribuer à limiter le coût de fonctionnement des environnements pour votre terminal. Envisagez d'utiliser une valeur faible pour les projets de loisirs non critiques.

Choisir maxConcurrencyPerEnvironment

Une révision maxConcurrencyPerEnvironment est la limite supérieure de la limite de simultanéité dynamique gérée par environnement de Lambda. La valeur par défaut est 64 et la plupart des utilisateurs ne devraient pas avoir à sélectionner une valeur optimale.

Pour les applications dont la mémoire est limitée, une valeur maxConcurrencyPerEnvironment inférieure à la valeur par défaut peut permettre d'obtenir un comportement plus prévisible.

Pour les CPU-bound applications, un réglage maxConcurrencyPerEnvironment inférieur à la valeur par défaut peut réduire la saturation du processeur et améliorer la latence en régime permanent dans les environnements chauds, mais peut également entraîner des démarrages à froid plus fréquents. Une valeur maxConcurrencyPerEnvironment supérieure à la valeur par défaut n'aura probablement aucun effet si la limite de simultanéité dynamique gérée par Lambda limite le trafic vers l'environnement.

Pour les I/O-bound applications, une valeur maxConcurrencyPerEnvironment supérieure à la valeur par défaut peut améliorer l'utilisation par environnement et réduire les coûts.

Surveillez les CloudWatch mesures suivantes pour déterminer si vos paramètres de mise à l'échelle sont appropriés. Pour les définitions des métriques, voirUtilisation de CloudWatch métriques avec les fonctions Web Lambda.

  • EndpointRequestThrottleset AccountRequestThrottles — Si la valeur EndpointRequestThrottles est constamment supérieure à zérorateLimit, augmentez-la jusqu'au quota par point de terminaison de 10 000 RPS. AccountRequestThrottlesaugmente lorsque le compte atteint son quota de taux de demandes dans la Région. Pour réduire ces limites, demandez une augmentation ou une baisse du quota rateLimit sur les autres terminaux.

  • EndpointActiveEnvironmentThrottleset AccountActiveVCPUArm64Throttles — Ces mesures s'incrémentent lorsque maxEnvironments le quota de vCPU du compte empêche un scale-out supplémentaire. Pour réduire ces limites, augmentez maxEnvironments ou demandez une augmentation du quota de vCPU.

  • EndpointActiveEnvironmentset EnvironmentConcurrentRequests — Si les environnements actifs approchent maxEnvironments ou si les demandes simultanées par environnement restent prochesmaxConcurrencyPerEnvironment, augmentez le paramètre correspondant.

  • Latence des applications : mesurez la latence à l'aide d'une métrique d'application, à partir de journaux structurés ou à l'aide des mesures de latence de votre porte d'entrée. Si la latence augmente à mesure que la simultanéité augmente par environnement, réduisez-la maxConcurrencyPerEnvironment pour réduire la contention par environnement et répartissez la charge sur un plus grand nombre d'environnements.

Mise à l'échelle en fonction MultiRegion des points de PerRegion terminaison

Pour les fonctions Web avec MultiRegionou PerRegionpoints de terminaison, les paramètres de mise à l'échelle s'appliquent indépendamment dans chaque Région AWS endroit où le point de terminaison fonctionne.

Chaque région crée et gère son propre pool d'environnements d'exécution. Le trafic d'une région ne consomme pas la capacité de mise à l'échelle d'une autre région.

Exemples de dimensionnement

Lambda adapte votre point de terminaison pour maintenir une marge de manœuvre supérieure à sa charge actuelle. La marge de manœuvre est la différence entre la charge de demandes entrantes et la charge totale de demandes que les environnements d'exécution à chaud peuvent prendre en charge. Il absorbe les petites augmentations de trafic sans attendre le démarrage de nouveaux environnements. La capacité augmente progressivement, car chaque nouvel environnement n'ajoute de la capacité qu'une fois son initialisation terminée. Lorsque le point de terminaison atteint une limite, la capacité cesse de croître et Lambda limite les demandes qui dépassent ce que le point de terminaison peut accepter.

Les exemples suivants montrent comment le point de terminaison gère une rafale de trafic et comment il se comporte lorsque la charge atteint chaque type de limite. Les graphiques illustrent le comportement général et ne sont pas dessinés à l'échelle.

Gérer une explosion de trafic

Lorsque la charge augmente progressivement, la marge de manœuvre absorbe l'augmentation tandis que Lambda adapte de nouveaux environnements en arrière-plan. Lorsque la charge augmente plus rapidement que la marge de manœuvre ne peut être absorbée, les environnements chauds ne peuvent pas gérer toutes les demandes entrantes. Lambda démarre de nouveaux environnements pour gérer la charge supérieure à la marge de manœuvre, et ces demandes attendent que les nouveaux environnements démarrent à froid. Une fois que les nouveaux environnements sont prêts, Lambda rétablit la marge de manœuvre au-dessus de la nouvelle charge.

Graphique de la charge entrante augmentant doucement, puis brusquement. Le RPS supporté par les environnements chauds augmente progressivement. L'espace libre absorbe la légère remontée. Pendant cette forte hausse, les demandes supérieures à la capacité maximale attendent les démarrages à froid.

Atteinte de la limite de taux de demandes par point de terminaison

La limite de taux de demande limite la charge que le terminal peut accepter, afin que la capacité ne dépasse pas cette limite. À mesure que la charge approche du quota tarifaire par point de terminaison ou de votre rateLimit paramètre, la marge de manœuvre diminue. Lorsque la charge dépasse la limite, Lambda renvoie le protocole HTTP 429 pour les requêtes supérieures à cette limite. Pour accepter davantage de demandesrateLimit, augmentez jusqu'au quota tarifaire par point de terminaison.

Graphique du RPS pris en charge par les environnements chauds, qui augmente progressivement au fur et à mesure que la charge augmente jusqu'à la limite du taux de demandes par point de terminaison, puis reste stable. La marge de manœuvre se réduit à mesure que la charge augmente, et les demandes dépassant la limite sont limitées.

Atteindre le maximum d'environnements

Dans cet exemple, maxEnvironments est inférieur à la limite du taux de demande. Lorsque le point de terminaison atteintmaxEnvironments, Lambda arrête d'ajouter des environnements d'exécution. La charge peut continuer à augmenter, ce qui réduit l'espace libre. Lorsque la charge dépasse ce que les environnements peuvent gérer, Lambda limite les nouvelles requêtes avec le protocole HTTP 429, même si le taux de requêtes est toujours inférieur à la limite de débit. Pour augmenter la capacité, augmentezmaxEnvironments.

Graphique du RPS pris en charge par les environnements chauds, augmentant progressivement jusqu'à MaxEnvironments, en dessous de la limite de débit de demandes, puis restant stable. La marge de manœuvre diminue à mesure que la charge augmente, et les demandes supérieures à cette capacité sont limitées.

Atteindre le quota de vCPU du compte

Tous les points de terminaison d'un compte partagent le quota de vCPU de chacun d'entre eux. Région AWS Les environnements utilisés par d'autres points de terminaison réduisent la capacité d'évolution de ce point de terminaison. Dans cet exemple, le quota de vCPU disponible pour le point de terminaison est inférieur à sa maxEnvironments configuration et à sa limite de débit de requêtes. Lorsque le compte atteint le quota, Lambda arrête d'ajouter des environnements et limite les demandes qui dépassent la capacité disponible, même si le point de terminaison n'a pas atteint ses propres limites. Pour augmenter la capacité, demandez une augmentation du quota de vCPU.

Graphique du RPS pris en charge par les environnements chauds, augmentant progressivement jusqu'au quota de vCPU disponible pour le point de terminaison. Le paramètre MaxEnvironments et la limite de taux de requêtes sont tous deux plus élevés. Les demandes dépassant le quota sont limitées.