Comprendere il ridimensionamento delle funzioni Lambda - 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à.

Comprendere il ridimensionamento delle funzioni Lambda

La concorrenza è il numero di richieste in corso che la tua AWS Lambda funzione gestisce contemporaneamente. Per ogni richiesta simultanea, Lambda fornisce un'istanza separata del tuo ambiente di esecuzione. Man mano che le funzioni ricevono più richieste, Lambda gestisce automaticamente il dimensionamento del numero di ambienti di esecuzione fino al raggiungimento del limite di simultaneità dell'account. Per impostazione predefinita, Lambda fornisce all'account un limite totale di simultaneità pari a 1.000 esecuzioni simultanee per tutte le funzioni in una Regione AWS. Per soddisfare le esigenze specifiche dell'account, è possibile richiedere un aumento della quota e configurare i controlli di simultaneità a livello di funzione in modo che le funzioni critiche non subiscano limitazioni.

Questo argomento spiega i concetti di concorrenza e la scalabilità delle funzioni in Lambda. Alla fine di questo argomento, sarà possibile capire come calcolare la simultaneità, visualizzare le due principali opzioni di controllo della simultaneità (riservata e fornita), stimare le impostazioni di controllo della simultaneità appropriate e visualizzare i parametri per un'ulteriore ottimizzazione.

Comprendere e visualizzare la simultaneità

Lambda richiama la funzione in un ambiente di esecuzione sicuro e isolato. Per gestire una richiesta, Lambda deve prima inizializzare un ambiente di esecuzione (la fase Init) e poi utilizzare tale ambiente per richiamare la funzione (la fase Invoke):

Ciclo di vita tipico di un ambiente di esecuzione, che mostra le fasi Init e Invoke.
Nota

Le durate effettive delle fasi Init e Invoke possono variare in base a molti fattori, come il runtime scelto e il codice della funzione Lambda. Il diagramma precedente non intende rappresentare le proporzioni esatte delle durate delle fasi Init e Invoke.

Il rettangolo nel diagramma rappresenta un singolo ambiente di esecuzione. Quando la funzione riceve la sua primissima richiesta (rappresentata dal cerchio giallo con etichetta 1), Lambda crea un nuovo ambiente di esecuzione ed esegue il codice all'esterno del gestore principale durante la fase Init. Quindi, esegue il codice del gestore principale della funzione durante la fase Invoke. Durante l'intero processo, questo ambiente di esecuzione è occupato e non può elaborare altre richieste.

Quando Lambda termina l'elaborazione della prima richiesta, questo ambiente di esecuzione potrà elaborare richieste aggiuntive per la stessa funzione. Per le richieste successive, Lambda non deve reinizializzare l'ambiente.

Un ambiente di esecuzione che gestisce due richieste in successione.

Nel diagramma precedente, Lambda riutilizza l'ambiente di esecuzione per gestire la seconda richiesta (rappresentata dal cerchio giallo con etichetta 2).

Finora ci siamo concentrati su una sola istanza dell'ambiente di esecuzione (ossia una simultaneità pari a 1). In pratica, Lambda potrebbe dover fornire più istanze dell'ambiente di esecuzione in parallelo in modo da gestire tutte le richieste in entrata. Quando la funzione riceve una nuova richiesta, può succedere una delle due cose:

  • Se è disponibile un'istanza dell'ambiente di esecuzione pre-inizializzata, Lambda la utilizza per elaborare la richiesta.

  • Altrimenti, Lambda crea una nuova istanza dell'ambiente di esecuzione.

Ad esempio, vediamo cosa accade quando la funzione riceve 10 richieste:

Una funzione Lambda che fornisce più ambienti per gestire 10 richieste

Nel diagramma precedente, ogni piano orizzontale rappresenta una singola istanza dell'ambiente di esecuzione (etichettata da A a F). Ecco come Lambda gestisce ogni richiesta:

Richiesta Comportamento di Lambda Ragionamento

1

Fornisce il nuovo ambiente A

Questa è la prima richiesta; nessuna istanza dell'ambiente di esecuzione è disponibile.

2

Fornisce il nuovo ambiente B

L'istanza A dell'ambiente di esecuzione esistente è occupata.

3

Fornisce il nuovo ambiente C

Le istanze A e B dell'ambiente di esecuzione esistenti sono entrambe occupate.

4

Fornisce il nuovo ambiente D

Le istanze A, B e C dell'ambiente di esecuzione esistenti sono tutte occupate.

5

Fornisce il nuovo ambiente E

Le istanze A, B, C e D dell'ambiente di esecuzione esistenti sono tutte occupate.

6

Riutilizza l'ambiente A

L'istanza A dell'ambiente di esecuzione ha terminato l'elaborazione della richiesta 1 ed è ora disponibile.

7

Riutilizza l'ambiente B

L'istanza B dell'ambiente di esecuzione ha terminato l'elaborazione della richiesta 2 ed è ora disponibile.

8

Riutilizza l'ambienteC

L'istanza C dell'ambiente di esecuzione ha terminato l'elaborazione della richiesta 3 ed è ora disponibile.

9

Fornisce il nuovo ambiente F

Le istanze A, B, C, D e E dell'ambiente di esecuzione esistenti sono tutte occupate.

10

Riutilizza l'ambiente D

L'istanza D dell'ambiente di esecuzione ha terminato l'elaborazione della richiesta 4 ed è ora disponibile.

Man mano che la funzione riceve più richieste simultanee, Lambda aumenta il numero di istanze dell'ambiente di esecuzione in risposta. L'animazione seguente tiene traccia del numero di richieste simultanee nel tempo:

Animazione che illustra le richieste simultanee nel tempo.

Osservando l'animazione precedente in sei momenti distinti nel tempo, otteniamo il seguente diagramma:

Simultaneità della funzione in sei momenti distinti nel tempo.

Nel diagramma precedente, possiamo tracciare una linea verticale in qualsiasi momento e contare il numero di ambienti che intersecano questa linea. Questo ci dà il numero di richieste simultanee in quel momento. Ad esempio, al momento t1, ci sono tre ambienti attivi che gestiscono tre richieste simultanee. Il numero massimo di richieste simultanee in questa simulazione si verifica nel momento t4, quando ci sono sei ambienti attivi che gestiscono sei richieste simultanee.

Per riassumere, la simultaneità della funzione è il numero di richieste simultanee che sono gestite nello stesso momento. In risposta a un aumento della simultaneità della funzione, Lambda fornisce più istanze dell'ambiente di esecuzione per soddisfare la domanda di richieste.

Calcolo della concorrenza per una funzione

In generale, la simultaneità di un sistema è la capacità di elaborare più di un'attività contemporaneamente. In Lambda, la simultaneità è il numero di richieste in corso che la funzione può gestire nello stesso momento. Un modo rapido e pratico per misurare la simultaneità di una funzione Lambda consiste nell'utilizzare la seguente formula:

Concurrency = (average requests per second) * (average request duration in seconds)

La simultaneità è diversa dalle richieste al secondo. Ad esempio, supponiamo che la funzione riceva in media 100 richieste al secondo. Se la durata media della richiesta è di 1 secondo, anche la simultaneità è 100:

Concurrency = (100 requests/second) * (1 second/request) = 100

Tuttavia, se la durata media della richiesta è di 500 ms, la simultaneità è 50:

Concurrency = (100 requests/second) * (0.5 second/request) = 50

Cosa significa in pratica una simultaneità pari a 50? Se la durata media della richiesta è di 500 ms, si può immaginare che un'istanza della funzione sia in grado di gestire 2 richieste al secondo. Quindi, sono necessarie 50 istanze della funzione per gestire un carico di 100 richieste al secondo. Una simultaneità pari a 50 significa che Lambda deve fornire 50 istanze dell'ambiente di esecuzione per gestire in modo efficiente questo carico di lavoro senza alcuna limitazione. Ecco come esprimerlo in forma di equazione:

Concurrency = (100 requests/second) / (2 requests/second) = 50

Se la funzione riceve il doppio del numero di richieste (200 richieste al secondo), ma richiede solo la metà del tempo per elaborare ciascuna richiesta (250 ms), la simultaneità è ancora 50:

Concurrency = (200 requests/second) * (0.25 second/request) = 50

Supponiamo di avere una funzione che richiede, in media, 200 ms per essere eseguita. Durante i picchi di carico, si osservano 5.000 richieste al secondo. Qual è la simultaneità della tua funzione durante i picchi di carico?

La durata media della funzione è di 200 ms o 0,2 secondi. Utilizzando la formula della simultaneità, a partire da questi numeri si ottiene una simultaneità pari a 1.000:

Concurrency = (5,000 requests/second) * (0.2 seconds/request) = 1,000

In alternativa, una durata media della funzione di 200 ms significa che la funzione può elaborare 5 richieste al secondo. Per gestire il carico di lavoro di 5.000 richieste al secondo, sono necessarie 1.000 istanze dell'ambiente di esecuzione. Pertanto, la simultaneità è 1.000:

Concurrency = (5,000 requests/second) / (5 requests/second) = 1,000

Comprensione della concorrenza riservata e della concorrenza accantonata

Per impostazione predefinita, il tuo account ha un limite di simultaneità pari a 1.000 esecuzioni simultanee per tutte le funzioni in una regione. Le funzioni condividono questo pool di simultaneità 1.000 su richiesta. Se si esaurisce la simultaneità disponibile, la tua funzione subisce una limitazione della larghezza di banda della rete, ossia inizia a ignorare le richieste.

Alcune delle tue funzioni potrebbero essere più critiche di altre. Di conseguenza, potresti voler configurare le impostazioni di simultaneità in modo da garantire che le funzioni critiche ottengano la simultaneità di cui hanno bisogno. Lambda fornisce due tipi di controlli della simultaneità: la simultaneità riservata e la simultaneità fornita.

  • Utilizza la simultaneità riservata per riservare una parte della simultaneità riservata del tuo account per una funzione. Ciò è utile se non si desidera che altre funzioni occupino tutta la simultaneità non riservata disponibile.

  • Usa la simultaneità fornita per pre-inizializzare una serie di istanze di ambiente per una funzione. Ciò è utile per ridurre le latenze di avviamento a freddo.

Simultaneità riservata

Se vuoi garantire che una certa quantità di simultaneità sia disponibile per la tua funzione in qualsiasi momento, usa la simultaneità riservata.

La simultaneità riservata è il numero massimo di istanze simultanee che desideri allocare alla funzione. Quando una funzione ha la simultaneità riservata dedicata, nessun'altra funzione potrà utilizzare tale simultaneità. In altre parole, l'impostazione della simultaneità riservata può influire sul pool di simultaneità disponibile per altre funzioni. Le funzioni che non dispongono di simultaneità riservata condividono il pool rimanente di simultaneità non riservata.

La configurazione della simultaneità riservata viene conteggiata ai fini del limite complessivo di simultaneità dell'account. Non è previsto alcun addebito per la configurazione della simultaneità riservata per una funzione.

Per comprendere meglio la simultaneità riservata, considera il seguente diagramma:

Il comportamento di dimensionamento delle funzioni quando configuri la simultaneità riservata su funzioni critiche.

In questo diagramma, il limite di simultaneità dell'account per tutte le funzioni in questa regione è il limite predefinito di 1.000. Supponiamo di avere due funzioni critiche function-blue e function-orange che si aspettino di ottenere regolarmente volumi di chiamate elevati. Decidi di assegnare 400 unità di simultaneità riservata a function-blue e 400 unità di simultaneità riservata a function-orange. In questo esempio, tutte le altre funzioni del tuo account dovranno condividere le restanti 200 unità di simultaneità non riservata.

Il diagramma presenta cinque punti di interesse:

  • Su t1, sia function-orange che function-blue iniziano a ricevere richieste. Ogni funzione inizia a utilizzare la parte allocata di unità di simultaneità riservata.

  • Al momento t2, function-orange e function-blue stanno ricevendo costantemente più richieste. Allo stesso tempo, vengono implementate altre funzioni Lambda, che iniziano a ricevere richieste. La simultaneità riservata non viene assegnata a queste altre funzioni. Iniziano a utilizzare le restanti 200 unità di simultaneità non riservata.

  • Su t3, function-orange raggiunge la simultaneità massima di 400. Sebbene sia presente una simultaneità inutilizzata altrove nel tuo account, function-orange non può accedervi. La linea rossa indica che per function-orange si sta verificando una limitazione e Lambda potrebbe eliminare le richieste.

  • Su t4, function-orange inizia a ricevere meno richieste e non è più limitato. Tuttavia, le altre funzioni registrano un picco di traffico e iniziano a rallentare. Sebbene sia presente una simultaneità inutilizzata altrove nel tuo account, queste funzioni non possono accedervi. La linea rossa indica che le altre funzioni sono soggette a limitazioni.

  • Su t5, le altre funzioni iniziano a ricevere meno richieste e non sono più limitate.

Da questo esempio, nota che riservare la simultaneità ha i seguenti effetti:

  • La funzione può essere dimensionata indipendentemente dalle altre funzioni nel tuo account. Tutte le funzioni dell'account nella stessa regione che non dispongono di simultaneità riservata condividono il pool di simultaneità non riservata. Senza simultaneità riservata, altre funzioni possono utilizzare potenzialmente tutta la simultaneità disponibile. Ciò impedisce alle funzioni critiche di aumentare quando necessario.

  • La tua funzione non può essere aumentata orizzontalmente senza controllo. La simultaneità riservata pone un limite alla simultaneità massima della funzione. Ciò significa che la funzione non può utilizzare la simultaneità riservata ad altre funzioni o la simultaneità dal pool non riservato. È possibile riservare la simultaneità per evitare che la funzione utilizzi tutta la simultaneità disponibile nell'account oppure sovraccarichi le risorse in downstream.

  • Potresti non essere in grado di utilizzare tutta la simultaneità disponibile del tuo account. La simultaneità di prenotazione viene conteggiata ai fini del limite di simultaneità dell'account, ma ciò significa anche che altre funzioni non possono utilizzare quella parte di simultaneità riservata. Se la tua funzione non utilizza tutta la simultaneità riservata, stai effettivamente sprecando quella simultaneità. Questo non è un problema a meno che altre funzioni del tuo account non possano trarre vantaggio dallo spreco di simultaneità.

Per gestire le impostazioni di simultaneità riservata per le tue funzioni, consulta la pagina Configurazione della concorrenza riservata per una funzione.

Simultaneità fornita

La simultaneità riservata viene utilizzata per definire il numero massimo di ambienti di esecuzione riservati a una funzione Lambda. Tuttavia, nessuno di questi ambienti è pre-inizializzato. Di conseguenza, le chiamate delle funzioni potrebbero richiedere più tempo perché Lambda deve inizializzare il nuovo ambiente prima di poterlo utilizzare per richiamare la funzione. Quando Lambda deve inizializzare un nuovo ambiente per eseguire una chiamata, si parla di avvio a freddo. Per mitigare gli avviamenti a freddo, è possibile utilizzare la simultaneità fornita.

La simultaneità assegnata è il numero di ambienti di esecuzione pre-inizializzati che si desidera allocare alla funzione. Se si imposta la simultaneità fornita su una funzione, Lambda inizia quel numero di ambienti di esecuzione in modo che siano preparati a rispondere immediatamente alle richieste della funzione.

Nota

La configurazione della simultaneità fornita comporta addebiti sul tuo account. Se lavori con i runtime Java 11 o Java 17, puoi anche usare SnapStart Lambda per mitigare i problemi di avvio a freddo senza costi aggiuntivi. SnapStart utilizza istantanee memorizzate nella cache dell'ambiente di esecuzione per migliorare significativamente le prestazioni di avvio. Non è possibile utilizzare entrambe le funzioni SnapStart e assegnare la concorrenza nella stessa versione della funzione. Per ulteriori informazioni su SnapStart funzionalità, limitazioni e regioni supportate, consulta. Migliorare le prestazioni di avvio con Lambda SnapStart

Quando si utilizza la simultaneità fornita, Lambda riavvia comunque gli ambienti di esecuzione in background. Tuttavia, in qualsiasi momento, Lambda garantisce sempre che il numero di ambienti pre-inizializzati sia uguale al valore dell'impostazione di simultaneità fornita dalla funzione. Questo comportamento è diverso dalla simultaneità riservata, in cui Lambda può terminare completamente un ambiente dopo un periodo di inattività. Il diagramma seguente illustra ciò confrontando il ciclo di vita di un singolo ambiente di esecuzione quando si configura la funzione utilizzando la simultaneità riservata rispetto alla simultaneità fornita.

Confronto tra il comportamento della concorrenza riservata e quella della concorrenza fornita

Il diagramma presenta 4 punti di interesse:

Orario Simultaneità riservata Simultaneità fornita

t1

Non succede niente.

Lambda pre-inizializza un'istanza dell'ambiente di esecuzione.

t2

Arriva la richiesta 1. Lambda deve inizializzare una nuova istanza dell'ambiente di esecuzione.

Arriva la richiesta 1. Lambda utilizza l'istanza pre-inizializzata dell'ambiente.

t3

Dopo una certa inattività, Lambda termina l'istanza dell'ambiente attivo.

Non succede niente.

t4

Arriva la richiesta 2. Lambda deve inizializzare una nuova istanza dell'ambiente di esecuzione.

Arriva la richiesta 2. Lambda utilizza l'istanza pre-inizializzata dell'ambiente.

Per comprendere meglio la simultaneità fornita, considera il seguente diagramma:

Comportamento di dimensionamento della funzione quando si configura la simultaneità assegnata per una funzione critica.

In questo diagramma, hai un limite di simultaneità dell'account pari a 1.000. Decidi di assegnare 400 unità di simultaneità fornita a function-orange. Tutte le funzioni del tuo account, inclusa function-orange, possono utilizzare le restanti 600 unità di simultaneità non riservata.

Il diagramma presenta cinque punti di interesse:

  • Su t1, function-orange inizia a ricevere richieste. Poiché Lambda ha pre-inizializzato 400 istanze dell'ambiente di esecuzione, function-orange è pronta per la chiamata immediata.

  • Su t2, function-orange raggiunge le 400 richieste simultanee. Di conseguenza, function-orange esaurisce la simultaneità fornita. Tuttavia, poiché è ancora disponibile la simultaneità non riservata, Lambda può utilizzarla per gestire richieste aggiuntive a function-orange (senza limitazioni). Lambda deve creare nuove istanze per soddisfare queste richieste e la funzione potrebbe presentare latenze di avvio a freddo.

  • Su t3, function-orange torna a 400 richieste simultanee dopo un breve picco di traffico. Lambda è nuovamente in grado di gestire tutte le richieste senza latenze di avvio a freddo.

  • Su t4, le funzioni del tuo account subiscono un'impennata di traffico. Questa impennata può provenire da function-orange o da qualsiasi altra funzione del tuo account. Per gestire queste richieste, Lambda utilizza la simultaneità non riservata.

  • Su t5, le funzioni del tuo account raggiungono il limite massimo di simultaneità pari a 1.000 e subiscono una limitazione.

L'esempio precedente considerava solo la simultaneità assegnata. In pratica, su una funzione è possibile impostare sia la simultaneità fornita che la simultaneità riservata. Ciò sarebbe possibile se si avesse una funzione che gestisce un carico costante di chiamate nei giorni feriali, ma registra regolarmente picchi di traffico durante i fine settimana. In questo caso, è possibile utilizzare la simultaneità fornita per impostare una quantità di base di ambienti per gestire le richieste durante i giorni feriali e utilizzare la simultaneità riservata per gestire i picchi del fine settimana. Considera il seguente diagramma:

Comportamento di dimensionamento delle funzioni quando si utilizza sia la simultaneità riservata che quella fornita.

In questo diagramma, supponiamo di configurare 200 unità di simultaneità fornita e 400 unità di simultaneità riservata per function-orange. Poiché è stata configurata la simultaneità riservata, function-orange non può utilizzare nessuna delle 600 unità di simultaneità non riservata.

Il diagramma presenta cinque punti di interesse:

  • Su t1, function-orange inizia a ricevere richieste. Poiché Lambda ha pre-inizializzato 200 istanze dell'ambiente di esecuzione, function-orange è pronta per la chiamata immediata.

  • Su t2, function-orange utilizza tutta la simultaneità fornita. function-orange può continuare a gestire le richieste utilizzando la simultaneità riservata, ma queste richieste potrebbero presentare latenze di avvio a freddo.

  • Su t3, function-orange raggiunge le 400 richieste simultanee. Di conseguenza, function-orange utilizza tutta la sua simultaneità riservata. Poiché function-orange non può utilizzare la simultaneità non riservata, le richieste iniziano a rallentare.

  • Su t4, function-orange inizia a ricevere meno richieste e non è più limitato.

  • Al momento t5, function-orange scende a 200 richieste simultanee, quindi tutte le richieste possono nuovamente utilizzare la simultaneità assegnata (ossia nessuna latenza di avvio a freddo).

Sia la simultaneità riservata che la simultaneità fornita vengono conteggiate ai fini del limite di simultaneità dell'account e delle quote regionali. In altre parole, l'impostazione della simultaneità riservata e fornita può influire sul pool di simultaneità disponibile per altre funzioni. La configurazione della concorrenza fornita comporta addebiti a carico dell'utente. Account AWS

Nota

Se la quantità di simultaneità assegnata nelle versioni e negli alias di una funzione si somma alla simultaneità riservata della funzione, tutte le chiamate vengono eseguite sulla simultaneità assegnata. Questa configurazione ha anche l'effetto di limitare il throttling della funzione ($LATEST), che ne impedisce l'esecuzione. Non è possibile allocare più simultaneità fornita rispetto alla simultaneità riservata per una funzione.

Per gestire le impostazioni di simultaneità riservata delle tue funzioni, consulta la pagina Configurazione della concorrenza fornita per una funzione. Per automatizzare il dimensionamento della simultaneità assegnata in base a una pianificazione o all'utilizzo dell'applicazione, consulta la pagina Utilizzo di Application Auto Scaling per automatizzare la gestione simultanea fornita.

Come Lambda alloca la simultaneità fornita

La simultaneità fornita non è disponibile online immediatamente dopo la configurazione. Lambda avvia l'allocazione della simultaneità con provisioning dopo uno o due minuti di preparazione. Per ogni funzione, Lambda può fornire fino a 6.000 ambienti di esecuzione al minuto, indipendentemente da. Regione AWSÈ esattamente la stessa della velocità di scalabilità simultanea per le funzioni.

Quando invii una richiesta di allocazione della simultaneità fornita, non puoi accedere a nessuno di questi ambienti finché Lambda non completa l'allocazione. Ad esempio, se richiedi 5.000 ambienti di esecuzione simultanei, nessuna delle tue richieste può utilizzare la concorrenza fornita fino a quando Lambda non avrà completato completamente l'allocazione dei 5.000 ambienti di esecuzione.

Simultaneità riservata e simultaneità fornita di Lambda.

Di seguito è riportata una tabella che riassume e mette a confronto la simultaneità riservata e la simultaneità assegnata.

Argomento Simultaneità riservata Simultaneità fornita

Definizione

Numero massimo di istanze dell'ambiente di esecuzione per la funzione.

Imposta il numero massimo di istanze dell'ambiente di esecuzione pre-fornito per la funzione.

Comportamento del provisioning

Lambda fornisce nuove istanze su richiesta.

Lambda fornisce le istanze in anticipo, ossia prima che la funzione inizi a ricevere richieste.

Comportamento dell'avvio a freddo

È possibile una latenza di avvio a freddo, poiché Lambda deve creare nuove istanze su richiesta.

La latenza di avvio a freddo non è possibile, poiché Lambda non deve creare istanze on demand.

Comportamento della limitazione

Funzione limitata quando viene raggiunto il limite di simultaneità riservata.

Se la simultaneità riservata non è impostata: quando viene raggiunto il limite di simultaneità fornita la funzione utilizza la simultaneità non riservata.

Se è impostata la simultaneità riservata: quando viene raggiunto il limite di simultaneità riservata la funzione viene limitata.

Comportamento predefinito se non impostato

La funzione utilizza la simultaneità non riservata disponibile nel tuo account.

Lambda non fornisce alcuna istanza in anticipo. Invece, se la simultaneità riservata non è impostata: la funzione utilizza la simultaneità non riservata disponibile nel tuo account.

Se è impostata la simultaneità riservata: la funzione utilizza la simultaneità riservata.

Prezzi

Nessun costo aggiuntivo.

Incorre in costi aggiuntivi.

Comprensione della concorrenza e delle richieste al secondo

Come indicato nella sezione precedente, la simultaneità è diversa dalle richieste al secondo. Questa distinzione è particolarmente rilevante quando si lavora con funzioni con una durata media della richiesta inferiore a 100 ms.

In tutte le funzioni del tuo account, Lambda applica un limite di richieste al secondo pari a 10 volte la frequenza simultanea dell'account. Ad esempio, poiché il limite di contemporaneità predefinito dell'account è 1.000, le funzioni dell'account possono gestire un massimo di 10.000 richieste al secondo.

Ad esempio, consideriamo una funzione con una durata media della richiesta di 50 ms. A 20.000 richieste al secondo, ecco la concorrenza di questa funzione:

Concurrency = (20,000 requests/second) * (0.05 second/request) = 1,000

In base a questo risultato, potresti aspettarti che il limite di concomitanza dell'account di 1.000 sia sufficiente per gestire questo carico. Tuttavia, a causa del limite di 10.000 richieste al secondo, la funzione può gestire solo 10.000 richieste al secondo sulle 20.000 richieste totali. Questa funzione subisce una limitazione.

Pertanto, quando si configurano le impostazioni di simultaneità per le funzioni, è necessario considerare sia la simultaneità sia le richieste al secondo. In questo caso, devi richiedere un aumento del limite di concorrenza dell'account a 2.000, poiché ciò aumenterebbe il limite totale di richieste al secondo a 20.000.

Nota

In base a questo limite di richieste al secondo, non è corretto affermare che ogni ambiente di esecuzione Lambda può gestire solo un massimo di 10 richieste al secondo. Invece di osservare il carico su ogni singolo ambiente di esecuzione, Lambda considera solo la concorrenza complessiva e le richieste complessive al secondo nel calcolo delle quote.

Supponiamo di avere una funzione che richiede, in media, 20 ms per essere eseguita. Durante i picchi di carico, si osservano 30.000 richieste al secondo. Qual è la simultaneità della tua funzione durante i picchi di carico?

La durata media della funzione è di 20 ms o 0,02 secondi. Utilizzando la formula di concorrenza, puoi inserire i numeri per ottenere una concorrenza di 600:

Concurrency = (30,000 requests/second) * (0.02 seconds/request) = 600

Per impostazione predefinita, il limite di concorrenza dell'account di 1.000 sembra sufficiente per gestire questo carico. Tuttavia, il limite di 10.000 richieste al secondo non è sufficiente per gestire le 30.000 richieste in entrata al secondo. Per soddisfare appieno le 30.000 richieste, devi richiedere un aumento del limite di concorrenza dell'account a 3.000 o più.

Il limite di richieste al secondo si applica a tutte le quote in Lambda che prevedono la concorrenza. In altre parole, si applica alle funzioni sincrone su richiesta, alle funzioni che utilizzano la concorrenza assegnata e il comportamento di ridimensionamento simultaneo. Ad esempio, ecco alcuni scenari in cui è necessario considerare attentamente sia i limiti di concorrenza che quelli di richieste al secondo:

  • Una funzione che utilizza la concorrenza su richiesta può registrare un aumento improvviso di 500 simultanee ogni 10 secondi o di 5.000 richieste al secondo ogni 10 secondi, a seconda dell'evento che si verifica per primo.

  • Si supponga di disporre di una funzione con un'allocazione simultanea assegnata pari a 10. Questa funzione si ripercuote sulla concorrenza su richiesta dopo 10 operazioni simultanee o 100 richieste al secondo, a seconda dell'evento che si verifica per primo.

Quote di simultaneità

Lambda imposta le quote per la quantità totale di simultaneità che è possibile utilizzare in tutte le funzioni di una regione. Queste quote esistono su due livelli:

Per verificare la quota di concorrenza a livello di account corrente, utilizzate il comando () per eseguire il seguente comando: AWS Command Line Interface AWS CLI

aws lambda get-account-settings

L'output restituito dovrebbe essere simile al seguente:

{ "AccountLimit": { "TotalCodeSize": 80530636800, "CodeSizeUnzipped": 262144000, "CodeSizeZipped": 52428800, "ConcurrentExecutions": 1000, "UnreservedConcurrentExecutions": 900 }, "AccountUsage": { "TotalCodeSize": 410759889, "FunctionCount": 8 } }

ConcurrentExecutions è la quota di simultaneità totale a livello di account. UnreservedConcurrentExecutions è la quantità di simultaneità riservata che puoi ancora destinare alle tue funzioni.

Man mano che la funzione riceve altre richieste, Lambda aumenta automaticamente il numero di ambienti di esecuzione per gestire le richieste fino al raggiungimento della quota di simultaneità dell'account. Tuttavia, per proteggersi dall'eccessivo aumento in risposta a improvvisi picchi di traffico, Lambda limita la velocità di dimensionamento delle funzioni. Questa velocità di scalabilità simultanea è la velocità massima alla quale le funzioni del tuo account possono scalare in risposta a un aumento delle richieste. Si tratta della velocità con cui Lambda può creare nuovi ambienti di esecuzione. Il tasso di scalabilità simultanea è diverso dal limite di concorrenza a livello di account, che è la quantità totale di concorrenza disponibile per le tue funzioni.

In ciascuna funzione e per ogni funzione Regione AWS, la velocità di scalabilità simultanea è di 1.000 istanze dell'ambiente di esecuzione ogni 10 secondi (o 10.000 richieste al secondo ogni 10 secondi). In altre parole, ogni 10 secondi, Lambda può allocare al massimo 1.000 istanze aggiuntive dell'ambiente di esecuzione o soddisfare 10.000 richieste aggiuntive al secondo, a ciascuna delle tue funzioni.

Di solito, non è necessario preoccuparsi di questa limitazione. La velocità di dimensionamento di Lambda è sufficiente per la maggior parte dei casi d'uso.

È importante sottolineare che il tasso di scalabilità della concorrenza è un limite a livello di funzione. Ciò significa che ogni funzione del tuo account può dimensionarsi indipendentemente dalle altre funzioni.

Per ulteriori informazioni sul comportamento di dimensionamento, consulta la pagina Comportamento del dimensionamento Lambda.