View a markdown version of this page

Comportamento di scalabilità per Lambda Web Functions - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Comportamento di scalabilità per Lambda Web Functions

Lambda ridimensiona automaticamente l'endpoint di Web Function man mano che arriva il traffico. È scalabile in due dimensioni:

  • Numero di ambienti: Lambda aggiunge più ambienti di esecuzione, fino a. maxEnvironments

  • Richieste simultanee per ambiente: ogni ambiente gestisce più richieste contemporaneamente. Lambda gestisce un limite di concorrenza dinamico per ambiente in base all'utilizzo delle risorse. Puoi controllare il limite superiore di questo limite dinamico utilizzando. maxConcurrencyPerEnvironment Per ulteriori informazioni, consulta Limite di concorrenza dinamico per ambiente.

Puoi anche impostare un endpoint rateLimit in modo da limitarne la frequenza di arrivo delle richieste. Questa è un'impostazione facoltativa e viene applicata prima che le richieste raggiungano gli ambienti.

Un endpoint scala da zero. Quando non c'è traffico, Lambda non funziona in nessun ambiente. Questa pagina spiega le impostazioni di scalabilità di un endpoint, le relative quote di account e come scegliere valori che ottimizzino i costi o le prestazioni.

Ambienti di esecuzione

Un ambiente di esecuzione è un'istanza di calcolo isolata che esegue il server HTTP. Ogni ambiente dispone di memoria, file system e spazio di processo propri. Per informazioni su come Lambda inizializza, riutilizza e chiude un ambiente di esecuzione, vedi. Ciclo di vita dell'ambiente di esecuzione

Lambda crea e rimuove automaticamente gli ambienti in base al traffico:

  • Quando il traffico aumenta, Lambda crea ambienti aggiuntivi per soddisfare la domanda di traffico.

  • Quando il traffico diminuisce, Lambda drena gli ambienti sottoutilizzati e li rimuove.

  • Quando non c'è traffico, Lambda rimuove tutti gli ambienti. L'endpoint viene ridimensionato fino a zero.

Non esiste un'impostazione di ambiente minimo o riservato. Un endpoint scala sempre da zero all'arrivo del traffico. Per evitare partenze a freddo dovute a piccoli aumenti di traffico, Lambda ridimensiona automaticamente gli ambienti di esecuzione prima della domanda per mantenere la capacità di riserva (headroom) per il traffico in entrata. Quando gli ambienti sono sottoutilizzati, Lambda li ridimensiona, fino a zero.

Limite di concorrenza dinamico per ambiente

Il limite di concorrenza dinamico per ambiente è un Lambda-managed limite al numero di richieste che un singolo ambiente di esecuzione gestisce contemporaneamente. In base all'utilizzo delle risorse della funzione, Lambda regola automaticamente questo limite per ottimizzare l'efficienza e le prestazioni. Lambda aumenta la scalabilità dei nuovi ambienti quando gli ambienti esistenti sono vicini al limite. Quando il limite impedisce a tutti gli ambienti esistenti di accettare più richieste, le richieste vengono messe in coda, in attesa del prossimo ambiente disponibile.

Non si configura direttamente il limite dinamico. Puoi invece applicargli un limite superiore maxConcurrencyPerEnvironment impostando la revisione. Il limite dinamico di Lambda può essere inferiore a questo valore, ma non superarlo mai. Ad esempio, se si imposta su maxConcurrencyPerEnvironment 32, Lambda indirizza al massimo 32 richieste simultanee verso qualsiasi ambiente, anche se l'ambiente ha una capacità maggiore.

La maggior parte delle applicazioni può fare affidamento sul limite dinamico senza modifiche. maxConcurrencyPerEnvironment Per indicazioni su quando modificarlo, consultaScelta delle impostazioni di ridimensionamento.

Impostazioni di ridimensionamento

Tre impostazioni controllano il modo in cui Lambda ridimensiona la tua funzione Web. È possibile configurare ogni impostazione sull'endpoint o sulla revisione.

Impostazione Configurato su Intervallo valido Predefinita Description
maxConcurrencyPerEnvironment Revision 1—128 64 Il limite superiore del limite di concorrenza Lambda-managed dinamico per ambiente. Lambda regola automaticamente la concorrenza effettiva per ambiente, in modo che la maggior parte delle applicazioni possa fare affidamento sul limite dinamico senza modificare questo valore.
maxEnvironments Endpoint Opzionale. 2—10.000 Nessuno Limita il numero di ambienti di esecuzione per l'endpoint in ciascuno. Regione AWS Controlla la scala orizzontale. La scalabilità dell'ambiente endpoint è sempre limitata dalla quota vCPU dell'account disponibile, anche se non è impostata. maxEnvironments
rateLimit Endpoint Opzionale. 0—10.000 Nessuno Limita la frequenza di arrivo delle richieste dell'endpoint, in richieste al secondo, per ciascuna. Regione AWS I valori fino a 1.000 devono essere un multiplo di 100 e i valori superiori a 1.000 devono essere un multiplo di 1.000. Il valore 0 blocca tutto il traffico. Le richieste superiori al limite di velocità effettivo ricevono una risposta HTTP 429 (Too Many Requests). Se non è impostata, la velocità di arrivo dell'endpoint è limitata dalla quota tariffaria per account per endpoint.

maxEnvironmentse rateLimit sono proprietà opzionali dell'endpoint. È possibile aggiornarle senza creare una nuova revisione. Per impostazione predefinita, nessuna delle due impostazioni è impostata. Un valore large maxEnvironments non garantisce che l'endpoint possa scalare così tanto. La scalabilità dell'ambiente è sempre limitata dalla quota vCPU regionale dell'account. Un rateLimit di 0 blocca tutto il traffico. Per informazioni dettagliate, vedi Throttling. La frequenza di richiesta degli endpoint è sempre limitata dalla quota di frequenza delle richieste dell'account, anche se non rateLimit è impostata. Per le quote, consulta la sezione successiva.

Per modificare maxEnvironments orateLimit, esegui aws lambda-web update-web-function-endpoint con il --throttle-config parametro --scaling-config or, ad esempio --scaling-config '{"maxEnvironments": 50}' o--throttle-config '{"rateLimit": 8000}'. Omettete un parametro per mantenerne il valore corrente. Per cancellare un valore impostato, passate un oggetto vuoto, ad esempio--scaling-config '{}'. Per ulteriori informazioni, vedereAggiornamento di un endpoint. maxConcurrencyPerEnvironmentè un'impostazione di revisione. Per modificarla, crea una nuova revisione. Il fatto che la nuova revisione riceva traffico dipende dalla modalità di distribuzione automatica dell'endpoint. Per ulteriori informazioni, consulta Creare una revisione.

Quote degli account

Queste quote si applicano per. Regione AWS Si applicano sempre in aggiunta ai limiti degli endpoint configurati opzionalmente.

  • Per-endpoint limite di velocità: 10.000 richieste al secondo (RPS).

  • Limite di velocità totale dell'account: 100.000 RPS su tutti gli endpoint della regione.

  • Limite vCPU dell'account: 2.000 vCPU su tutti gli endpoint della regione. Ogni ambiente di esecuzione utilizza 2 vCPU, quindi questa quota limita il numero totale di ambienti per account. Regione AWS

Per i valori di quota correnti e come richiedere un aumento, consulta. Funzioni Web Lambda

Come interagiscono le impostazioni di ridimensionamento

Queste tre impostazioni di ridimensionamento operano in modo indipendente per determinare la scala dell'endpoint. Ad eccezione delle quote degli account, ogni endpoint ridimensiona in modo indipendente, anche gli endpoint che appartengono alla stessa funzione Web.

Capacità di concorrenza totale

Si può pensare che il numero massimo di richieste in corso dell'endpoint sia all'incirca maxEnvironments superiore al limite di concorrenza dinamico per ambiente attualmente consentito da Lambda. Il massimo che l'endpoint può gestire contemporaneamente è ×. maxEnvironments maxConcurrencyPerEnvironment Raggiunge quel numero solo quando esegue maxEnvironments ambienti e ognuno gestisce maxConcurrencyPerEnvironment le richieste. Se non maxEnvironments è impostato, l'endpoint viene ridimensionato per soddisfare la domanda, fino alla quota vCPU dell'account.

Limite totale della frequenza di richiesta

rateLimitlimita le richieste al secondo, indipendentemente dalla capacità di concorrenza. Lambda restituisce HTTP 429 per le richieste superiori al limite di velocità, anche quando gli ambienti hanno la capacità di soddisfarle.

Scalabilità

Prima che tutti gli ambienti raggiungano il limite di concorrenza dinamica, Lambda scalerà più ambienti, fino a. maxEnvironments Un endpoint smette di scalare verso l'alto quando raggiunge maxEnvironments o raggiunge la quota vCPU dell'account. Se un endpoint non è in grado di scalare e tutti gli ambienti esistenti sono completamente utilizzati, Lambda limita immediatamente le nuove richieste con una risposta HTTP 429 (Too Many Requests). Lambda non mette in coda le richieste limitate. Se si sta inizializzando un nuovo ambiente di esecuzione, le richieste vengono messe in coda anziché essere limitate immediatamente.

Superamento temporaneo

Durante le modifiche di peso delle revisioni, il ciclo interno della flotta e altri eventi operativi, Lambda potrebbe temporaneamente maxEnvironments superare per dare priorità alla disponibilità. Questo superamento è breve e Lambda torna automaticamente al limite configurato. Se lo desideri, non devi prevedere margini di manovra per questi eventi operativi. maxEnvironments

Esempio Esempio: calcolo della capacità

È possibile configurare le seguenti impostazioni per la funzione Web:

  • maxEnvironments= 10

  • maxConcurrencyPerEnvironment= 64

  • rateLimit= 8000

Queste impostazioni limitano separatamente la concorrenza (richieste in corso) e la frequenza delle richieste (richieste accettate al secondo). Con un massimo di 10 ambienti e fino a 64 richieste simultanee ciascuno, l'endpoint può gestire al massimo circa 640 richieste simultanee (10 × 64). Il limite dinamico è spesso inferiore, quindi la concorrenza sostenuta è generalmente inferiore. Il limite raggiunto per primo dall'endpoint dipende dalla durata di ogni richiesta.

Concurrency-bound endpoint

Supponiamo che ogni richiesta richieda 200 ms, ad esempio perché attende una query sul database. Con 640 richieste in corso, l'endpoint completa al massimo circa 3.200 richieste al secondo (640 ÷ 0,2 s), ossia al di sotto degli 8.000 RPS. rateLimit Quando tutti e 10 gli ambienti sono completamente utilizzati, Lambda limita le nuove richieste con HTTP 429. Per aumentare il traffico, aumenta. maxEnvironments

Request-rate-bound endpoint

Supponiamo che ogni richiesta richieda 10 ms. A 8.000 richieste al secondo, sono in corso circa 80 richieste (8.000 × 0,01 s), ben al di sotto di 640. Lambda restituisce HTTP 429 per richieste superiori a 8.000 RPS, anche se gli ambienti hanno la capacità di soddisfarle. Per accettare più richiesterateLimit, aumenta fino alla quota di 10.000 RPS per endpoint.

Throttling

Quando la frequenza delle richieste in entrata supera l'rateLimitimpostazione, Lambda restituisce una risposta HTTP 429 (Too Many Requests) per le richieste in eccesso. Il limite di velocità si applica all'endpoint nel suo insieme in ciascuno di essi. Regione AWS

Lambda restituisce anche una risposta HTTP 429 quando tutti gli ambienti sono completamente utilizzati, perché l'endpoint ha raggiunto maxEnvironments o l'account ha raggiunto la quota vCPU. Per ulteriori informazioni, consulta Come interagiscono le impostazioni di ridimensionamento.

Lambda può anche restituire HTTP 429 con il tipo di Platform.EndpointConcurrentInitThrottle errore quando vengono inizializzati troppi ambienti di esecuzione contemporaneamente. Questo acceleratore non incrementa una metrica dell'acceleratore. Per le metriche incrementate dagli altri tipi di acceleratore, consulta. Utilizzo CloudWatch delle metriche con Lambda Web Functions

Quando quello di un endpoint rateLimit è 0, Lambda restituisce HTTP 503 (servizio non disponibile) anziché HTTP 429, con l'intestazione. lambda-web-error-type Platform.EndpointDisabled Lambda può anche restituire HTTP 503 quando scarica il carico per proteggere il servizio. Riprova un 503 senza lambda-web-error-type intestazione con backoff e jitter. Un 503 con Platform.EndpointDisabled continua finché non viene impostato su un valore diverso da zero. rateLimit

Lambda misura il limite di velocità su base al secondo. Potrebbero essere accettate brevi esplosioni al di sopra del limite. Il traffico prolungato al di sopra del limite comporta un rallentamento.

Quando l'applicazione riceve risposte HTTP 429, implementa il backoff esponenziale con jitter nel codice client per riprovare le richieste limitate.

Scalabilità verso l'alto e verso il basso

Dimensionamento

Quando il traffico aumenta e gli ambienti esistenti si avvicinano al limite di concorrenza dinamico per ambiente, Lambda crea ambienti di esecuzione aggiuntivi. Ogni nuovo ambiente viene inizializzato prima di soddisfare le richieste. Per i passaggi di inizializzazione e il limite di tempo di avvio, vedere. Inizializzazione (avvio a freddo)

Durante l'inizializzazione di un nuovo ambiente, Lambda indirizza le richieste agli ambienti esistenti che dispongono di capacità disponibile. Quando nessun ambiente dispone di capacità, la richiesta attende mentre Lambda ne inizializza una nuova (avvio a freddo). Lambda restituisce HTTP 429 solo quando si Throttling applica uno dei limiti indicati, ad esempio la quota maxEnvironments vCPU dell'account.

Ridimensiona

Quando il traffico diminuisce, Lambda identifica gli ambienti sottoutilizzati e li rimuove. Lambda drena un ambiente prima di rimuoverlo. Interrompe l'instradamento di nuove richieste verso l'ambiente, consente che le richieste in corso vengano completate nel miglior modo possibile e invia. SIGTERM Per informazioni dettagliate, vedi Ciclo di vita dell'ambiente di esecuzione.

Lambda si ridimensiona fino a zero ambienti in assenza di traffico. La richiesta successiva avvia un nuovo ambiente (avvio a freddo).

Scelta delle impostazioni di ridimensionamento

Considerate quanto segue quando scegliete i valori per endpointrateLimit, endpoint maxEnvironments e revisione. maxConcurrencyPerEnvironment

Scelta rateLimit

Il valore predefinito è none, il che significa che la frequenza di richieste di un endpoint è limitata sia dalla quota RPS di 10.000 per endpoint che dalla quota RPS di 100.000 account. Valuta la possibilità di impostare un rateLimit valore se desideri limitare l'importo che un endpoint può richiedere alla quota RPS del tuo account, che è condivisa da tutti gli endpoint.

L'impostazione di a rateLimit può essere utile anche per limitare il traffico totale alle dipendenze a valle.

Scegliere maxEnvironments

Il valore predefinito è none, il che significa che il conteggio dell'ambiente di un endpoint è limitato solo dalla quota vCPU dell'account. Valuta la possibilità di impostare un maxEnvironments valore se desideri limitare l'importo che un endpoint può richiedere alla quota vCPU del tuo account, condivisa da tutti gli endpoint.

Quando impostate un maxEnvironments valore, prendete in considerazione la possibilità di monitorare il conteggio dell'ambiente dell'endpoint, in modo da essere avvisati quando il valore si avvicina al maxEnvironments limite, e prendete provvedimenti per evitare che le applicazioni registrino una crescita organica nel tempo.

L'impostazione di un valore basso di maxEnvironments può aiutare a limitare il costo di esecuzione degli ambienti per l'endpoint. Prendi in considerazione l'utilizzo di un valore basso per progetti hobbistici non critici.

Scelta maxConcurrencyPerEnvironment

La revisione maxConcurrencyPerEnvironment è il limite massimo del limite di concorrenza dinamica gestita per ambiente di Lambda. Il valore predefinito è 64 e la maggior parte degli utenti non dovrebbe dover selezionare un valore ottimale.

Per le applicazioni legate alla memoria, un'impostazione maxConcurrencyPerEnvironment inferiore a quella predefinita può aiutare a ottenere un comportamento più prevedibile.

Per CPU-bound le applicazioni, un'impostazione maxConcurrencyPerEnvironment inferiore a quella predefinita può ridurre il conflitto della CPU e migliorare la latenza dello stato stazionario degli ambienti caldi, ma può anche comportare avviamenti a freddo più frequenti. Un'impostazione maxConcurrencyPerEnvironment superiore a quella predefinita probabilmente non avrà alcun effetto se il limite di concorrenza dinamica gestito di Lambda limita il traffico verso l'ambiente.

Per I/O-bound le applicazioni, un'impostazione maxConcurrencyPerEnvironment superiore a quella predefinita può migliorare l'utilizzo per ambiente e ridurre i costi.

Monitora le seguenti CloudWatch metriche per determinare se le impostazioni di ridimensionamento sono appropriate. Per le definizioni delle metriche, consulta. Utilizzo CloudWatch delle metriche con Lambda Web Functions

  • EndpointRequestThrottlese AccountRequestThrottles — Se EndpointRequestThrottles è costantemente maggiore di zerorateLimit, aumenta fino alla quota per endpoint di 10.000 RPS. AccountRequestThrottlesincrementa quando l'account raggiunge la quota di tasso di richiesta nella regione. Per ridurre questi limiti, richiedi un aumento o una riduzione della quota su altri endpoint. rateLimit

  • EndpointActiveEnvironmentThrottleseAccountActiveVCPUArm64Throttles: queste metriche aumentano quando maxEnvironments o la quota vCPU dell'account impedisce un'ulteriore scalabilità orizzontale. Per ridurre queste limitazioni, aumenta maxEnvironments o richiedi un aumento della quota di vCPU.

  • EndpointActiveEnvironmentse EnvironmentConcurrentRequests — Se gli ambienti attivi si avvicinano o maxEnvironments le richieste simultanee per ambiente rimangono vicinemaxConcurrencyPerEnvironment, aumentate l'impostazione pertinente.

  • Latenza delle applicazioni: misura la latenza con una metrica dell'applicazione, dai log strutturati o con le misurazioni della latenza fornite dalla porta di casa. Se la latenza aumenta all'aumentare della contemporaneità per ambiente, riducila maxConcurrencyPerEnvironment per ridurre la conflittualità per ambiente e distribuisci il carico su più ambienti.

Scalabilità MultiRegion per endpoint ed endpoint PerRegion

Per Web Functions con MultiRegiono PerRegionendpoint, le impostazioni di ridimensionamento si applicano indipendentemente in ciascuna area in Regione AWS cui opera l'endpoint.

Ogni regione crea e gestisce il proprio pool di ambienti di esecuzione. Il traffico in una regione non consuma la capacità di scalabilità di un'altra regione.

Esempi di scalabilità

Lambda ridimensiona l'endpoint per mantenere un margine di crescita superiore al carico corrente. L'headroom è la differenza tra il carico delle richieste in entrata e il carico totale delle richieste che possono soddisfare gli ambienti di esecuzione caldi. Assorbe i piccoli aumenti di traffico senza attendere l'avvio di nuovi ambienti. La capacità aumenta gradualmente, poiché ogni nuovo ambiente aggiunge capacità solo al termine dell'inizializzazione. Quando l'endpoint raggiunge un limite, la capacità smette di crescere e Lambda limita le richieste che superano quelle che l'endpoint può accettare.

Gli esempi seguenti mostrano come l'endpoint gestisce un'impennata di traffico e come si comporta quando il carico raggiunge ogni tipo di limite. I grafici illustrano il comportamento generale e non sono disegnati in scala.

Gestire un'esplosione di traffico

Quando il carico aumenta gradualmente, Headroom assorbe l'aumento mentre Lambda ridimensiona nuovi ambienti in background. Quando il carico aumenta più rapidamente di quanto Headroom possa assorbire, gli ambienti caldi non sono in grado di gestire tutte le richieste in arrivo. Lambda crea nuovi ambienti per gestire il carico al di sopra dello spazio di crescita e tali richieste attendono che i nuovi ambienti vengano avviati a freddo. Una volta che i nuovi ambienti sono pronti, Lambda ripristina lo spazio di crescita al di sopra del nuovo carico.

Grafico del carico in entrata che aumenta lentamente, poi bruscamente. L'RPS supportato da ambienti caldi aumenta gradualmente. Headroom assorbe la leggera salita. In caso di forte aumento, le richieste superiori alla capacità di riscaldamento attendono l'avvio a freddo.

Raggiungimento del limite di frequenza delle richieste per endpoint

Il limite di frequenza delle richieste limita la quantità di carico che l'endpoint può accettare, in modo che la capacità non superi tale limite. Man mano che il carico si avvicina alla quota di velocità per endpoint o alle impostazioni impostate, il rateLimit margine di crescita si riduce. Quando il carico supera il limite, Lambda restituisce HTTP 429 per le richieste superiori a tale limite. Per accettare più richiesterateLimit, aumenta fino alla quota di tariffa per endpoint.

Grafico dell'RPS supportato da ambienti caldi, che aumenta gradualmente man mano che il carico raggiunge il limite di frequenza di richieste per endpoint, per poi rimanere invariato. Il margine di manovra si riduce all'aumentare del carico e le richieste che superano il limite vengono limitate.

Raggiungere MaxEnvironments

In questo esempio, maxEnvironments è inferiore al limite di frequenza delle richieste. Quando l'endpoint lo raggiungemaxEnvironments, Lambda smette di aggiungere ambienti di esecuzione. Il carico può continuare a crescere, quindi il margine di manovra si riduce. Quando il carico supera quello che gli ambienti sono in grado di gestire, Lambda limita le nuove richieste con HTTP 429, anche se la frequenza delle richieste è ancora inferiore al limite di velocità. Per consentire una maggiore capacità, aumenta. maxEnvironments

Grafico dell'RPS supportato dagli ambienti caldi che sale gradualmente fino a MaxEnvironments, al di sotto del limite di frequenza di richiesta, per poi rimanere invariato. Il margine di manovra si riduce all'aumentare del carico e le richieste superiori a tale capacità vengono limitate.

Raggiungimento della quota vCPU dell'account

Tutti gli endpoint di un account condividono la quota di vCPU in ciascuno di essi. Regione AWS Gli ambienti utilizzati da altri endpoint riducono la scalabilità di questo endpoint. In questo esempio, la quota di vCPU disponibile per l'endpoint è inferiore sia all'maxEnvironmentsimpostazione che al limite di frequenza delle richieste. Quando l'account raggiunge la quota, Lambda smette di aggiungere ambienti e limita le richieste che superano la capacità disponibile, anche se l'endpoint non ha raggiunto i propri limiti. Per consentire una maggiore capacità, richiedi un aumento della quota di vCPU.

Grafico dell'RPS supportato da ambienti caldi che aumenta gradualmente fino alla quota di vCPU disponibile per l'endpoint. L'impostazione MaxEnvironments e il limite di frequenza di richiesta sono entrambi più elevati. Le richieste superiori alla quota vengono limitate.