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 de
maxConcurrencyPerEnvironment. 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
maxEnvironmentsmultiplié 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 estmaxEnvironments×maxConcurrencyPerEnvironment. Il n'atteint ce nombre que lorsqu'il exécutemaxEnvironmentsdes environnements et que chacun gère lesmaxConcurrencyPerEnvironmentdemandes. SimaxEnvironmentsce 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'à.
maxEnvironmentsUn point de terminaison cesse d'augmenter lorsqu'il atteintmaxEnvironmentsle 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
maxEnvironmentsafin 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
rateLimitRPS. 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 demandes
rateLimit, 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
rateLimitvaleur 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
rateLimitpeut é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
maxEnvironmentsvaleur 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
maxEnvironmentsvaleur, pensez à surveiller le nombre d'environnements du point de terminaison afin d'être alerté lorsqu'il est proche de votremaxEnvironmentslimite, 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
maxEnvironmentspeut 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
maxConcurrencyPerEnvironmentest 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
maxConcurrencyPerEnvironmentinférieure à la valeur par défaut peut permettre d'obtenir un comportement plus prévisible.Pour les CPU-bound applications, un réglage
maxConcurrencyPerEnvironmentinfé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 valeurmaxConcurrencyPerEnvironmentsupé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
maxConcurrencyPerEnvironmentsupé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.
-
EndpointRequestThrottlesetAccountRequestThrottles— Si la valeurEndpointRequestThrottlesest 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 quotarateLimitsur les autres terminaux. -
EndpointActiveEnvironmentThrottlesetAccountActiveVCPUArm64Throttles— Ces mesures s'incrémentent lorsquemaxEnvironmentsle quota de vCPU du compte empêche un scale-out supplémentaire. Pour réduire ces limites, augmentezmaxEnvironmentsou demandez une augmentation du quota de vCPU. -
EndpointActiveEnvironmentsetEnvironmentConcurrentRequests— Si les environnements actifs approchentmaxEnvironmentsou 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
maxConcurrencyPerEnvironmentpour 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.
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.
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.
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.