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.
maxConcurrencyPerEnvironmentPer 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
maxEnvironmentssuperiore al limite di concorrenza dinamico per ambiente attualmente consentito da Lambda. Il massimo che l'endpoint può gestire contemporaneamente è ×.maxEnvironmentsmaxConcurrencyPerEnvironmentRaggiunge quel numero solo quando eseguemaxEnvironmentsambienti e ognuno gestiscemaxConcurrencyPerEnvironmentle richieste. Se nonmaxEnvironmentsè 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.
maxEnvironmentsUn endpoint smette di scalare verso l'alto quando raggiungemaxEnvironmentso 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
maxEnvironmentssuperare 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.
rateLimitQuando 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ù richieste
rateLimit, 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
rateLimitvalore 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
rateLimitpuò 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
maxEnvironmentsvalore se desideri limitare l'importo che un endpoint può richiedere alla quota vCPU del tuo account, condivisa da tutti gli endpoint.Quando impostate un
maxEnvironmentsvalore, prendete in considerazione la possibilità di monitorare il conteggio dell'ambiente dell'endpoint, in modo da essere avvisati quando il valore si avvicina almaxEnvironmentslimite, e prendete provvedimenti per evitare che le applicazioni registrino una crescita organica nel tempo.L'impostazione di un valore basso di
maxEnvironmentspuò 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
maxConcurrencyPerEnvironmentinferiore a quella predefinita può aiutare a ottenere un comportamento più prevedibile.Per CPU-bound le applicazioni, un'impostazione
maxConcurrencyPerEnvironmentinferiore 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'impostazionemaxConcurrencyPerEnvironmentsuperiore 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
maxConcurrencyPerEnvironmentsuperiore 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
-
EndpointRequestThrottleseAccountRequestThrottles— SeEndpointRequestThrottlesè 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 quandomaxEnvironmentso la quota vCPU dell'account impedisce un'ulteriore scalabilità orizzontale. Per ridurre queste limitazioni, aumentamaxEnvironmentso richiedi un aumento della quota di vCPU. -
EndpointActiveEnvironmentseEnvironmentConcurrentRequests— Se gli ambienti attivi si avvicinano omaxEnvironmentsle 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
maxConcurrencyPerEnvironmentper 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.
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.
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
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.