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à.
Scalabilità delle istanze gestite Lambda
Le istanze gestite Lambda non sono scalabili all'arrivo delle chiamate e non supportano gli avviamenti a freddo. Al contrario, è scalabile in modo asincrono utilizzando segnali di consumo delle risorse. Le istanze gestite attualmente sono scalabili in base all'utilizzo delle risorse della CPU e alla saturazione di più valute.
Principali differenze:
-
Lambda (impostazione predefinita): scala quando non esiste un ambiente di esecuzione libero per gestire una chiamata in entrata (avvio a freddo)
-
Istanze gestite Lambda: scalabilità asincrona in base all'utilizzo delle risorse della CPU e alla saturazione multiconcorrenza degli ambienti di esecuzione
Se il traffico raddoppia più che nel giro di 5 minuti, potresti riscontrare rallentamenti man mano che Lambda ridimensiona le istanze e gli ambienti di esecuzione per soddisfare la domanda.
Il ciclo di vita della scalabilità
Lambda Managed Instances utilizza un'architettura distribuita per gestire la scalabilità:
Componenti:
-
Istanze gestite: esegui nel tuo account nelle sottoreti fornite
-
Router e scaler: componenti Lambda condivisi che indirizzano le chiamate e gestiscono la scalabilità
-
Lambda Agent: viene eseguito su ogni istanza gestita per gestire il ciclo di vita dell'ambiente di esecuzione e monitorare il consumo di risorse
Come funziona:
-
Quando pubblichi una versione della funzione con un provider di capacità, Lambda avvia Managed Instances nel tuo account. Per impostazione predefinita, ne avvia tre per la resilienza AZ e avvia tre ambienti di esecuzione prima di contrassegnare la versione della funzione come ATTIVA.
-
Ogni istanza gestita può eseguire ambienti di esecuzione per più funzioni mappate allo stesso provider di capacità.
-
Man mano che il traffico fluisce verso l'applicazione, gli ambienti di esecuzione consumano risorse. L'agente Lambda invia una notifica allo Scaler, che decide se scalare nuovi ambienti di esecuzione o istanze gestite.
-
Se Router tenta di inviare una chiamata a un ambiente di esecuzione con un elevato consumo di risorse, l'agente Lambda su quell'istanza gli notifica di riprovare su un'altra istanza.
-
Quando il traffico diminuisce, Lambda Agent invia una notifica a Scaler, che decide di ridimensionare gli ambienti di esecuzione e scalare nelle istanze gestite.
Regolazione del comportamento di scalabilità
Puoi personalizzare il comportamento di scalabilità delle istanze gestite tramite cinque controlli:
Controlli a livello di funzione
1. Memoria funzionale e vCPU
Scegli la dimensione della memoria e l'allocazione della vCPU per la tua funzione. La dimensione minima della funzione supportata è 2 GB e 1 vCPU.
Considerazioni:
-
Scegli un'impostazione di memoria e vCPU che supporti le esecuzioni simultanee della tua funzione
-
Non è possibile configurare una funzione con meno di 1 vCPU, poiché le funzioni in esecuzione su istanze gestite dovrebbero supportare carichi di lavoro multi-concorrenti.
-
Non puoi scegliere meno di 2 GB perché corrisponde al rapporto 2 a 1 tra memoria e vCPU delle istanze c, che hanno il rapporto più basso.
-
Per le applicazioni Python, potrebbe essere necessario scegliere un rapporto più elevato tra memoria e vCPU, ad esempio 4 a 1 o 8 a 1, a causa del modo in cui Python gestisce la multi-concorrenza
-
Se si eseguono CPU-intensive operazioni o si eseguono poche operazioni di I/O, è necessario scegliere più di una vCPU
2. Simultaneità massima
Imposta la concorrenza massima per ambiente di esecuzione.
Comportamento predefinito: Lambda sceglie impostazioni predefinite ragionevoli che bilanciano il consumo di risorse e la velocità effettiva, adatte a un'ampia varietà di applicazioni.
Linee guida per la regolazione:
-
Aumentare la concorrenza: se le chiamate alle funzioni utilizzano pochissima CPU, è possibile aumentare la concorrenza massima fino a un massimo di 64 per vCPU
-
Riduzione della concorrenza: se l'applicazione consuma una grande quantità di memoria e pochissima CPU, è possibile ridurre la concorrenza massima
Importante: poiché le istanze gestite Lambda sono pensate per applicazioni multi-concorrenti, gli ambienti di esecuzione con una concorrenza molto bassa possono presentare problemi di scalabilità.
3. Ambienti di esecuzione per funzione
Imposta il numero minimo e massimo di ambienti di esecuzione per la tua funzione.
Comportamento predefinito: Lambda mantiene un minimo predefinito di 3 ambienti di esecuzione per garantire un'elevata disponibilità nelle zone di disponibilità.
Linee guida per la regolazione:
-
Imposta il minimo: aumenta la capacità necessaria per il traffico di base e riduci l'acceleratore in caso di raffiche improvvise.
-
Imposta il massimo: limita il numero di ambienti di esecuzione per controllare lo scale-out ed evitare problemi legati ai rumori adiacenti quando più funzioni condividono un Capacity Provider.
-
Disattiva la funzione: imposta il minimo e il massimo su 0 per disattivare una funzione senza eliminarla.
Esempio:
aws lambda put-function-scaling-config \ --function-name my-lmi-function \ --qualifier '$LATEST.PUBLISHED' \ --function-scaling-config MinExecutionEnvironments=5,MaxExecutionEnvironments=20 \ --region us-east-1
Note importanti:
-
Ambito del qualificatore: queste configurazioni si applicano a livello di funzione per ogni ARN qualificato. Se impostata
$LATEST.PUBLISHED, la configurazione si propaga alle$LATEST.PUBLISHEDversioni future. Se impostate su una versione specifica, le versioni appena pubblicate tornano ai valori predefiniti. -
Configurazione associata: è necessario impostare contemporaneamente i valori minimo e massimo. Qualsiasi impostazione non specificata ritorna al valore predefinito. Valori validi per entrambi
MinExecutionEnvironmentseMaxExecutionEnvironmentscompresi tra 0 e 15000.
Controlli a livello di provider di capacità
4. Utilizzo mirato delle risorse
Scegli il tuo obiettivo per il consumo di utilizzo della CPU.
Comportamento predefinito: Lambda mantiene un margine di manovra sufficiente per raddoppiare il traffico entro 5 minuti senza acceleratori.
Opzioni di ottimizzazione:
-
Se il carico di lavoro è molto costante o se l'applicazione non è sensibile alle limitazioni, è possibile impostare l'obiettivo su un livello elevato per ottenere un maggiore utilizzo e ridurre i costi
-
Se si desidera mantenere un margine di manovra sufficiente in caso di picchi di traffico, è possibile impostare obiettivi di risorse a un livello basso, il che richiederà una maggiore capacità
5. Selezione del tipo di istanza
Imposta i tipi di istanza consentiti o esclusi.
Comportamento predefinito: Lambda sceglie i tipi di istanza migliori per il tuo carico di lavoro. Si consiglia di lasciare che le istanze gestite Lambda scelgano i tipi di istanze, poiché limitare il numero di tipi di istanze possibili può comportare una minore disponibilità.
Configurazione personalizzata:
-
Requisiti hardware specifici: imposta i tipi di istanze consentiti su un elenco di istanze compatibili. Ad esempio, se disponi di un'applicazione che richiede un'elevata larghezza di banda di rete, puoi selezionare diversi tipi di istanze n
-
Ottimizzazione dei costi: per gli ambienti di test o sviluppo, puoi scegliere tipi di istanze più piccoli, come i tipi di istanze m7a.large
Dimensionamento pianificato
Usa Amazon EventBridge Scheduler per regolare gli ambienti di esecuzione minima e massima della tua funzione in base a una pianificazione ricorrente o una tantum. Ciò è utile per modelli di traffico prevedibili, come la scalabilità prima delle ore di punta e la riduzione durante le ore non di punta.
Configurazione dello scheduler:
-
Crea un ruolo di esecuzione di EventBridge Scheduler o utilizza un ruolo esistente che concede l'autorizzazione a richiamare la funzione di
lambda:PutFunctionScalingConfigdestinazione. -
Crea una pianificazione utilizzando un'espressione cron o rate, indirizzando l'
PutFunctionScalingConfigAPI come target universale. Specificate i nuoviMaxExecutionEnvironmentsvaloriMinExecutionEnvironmentse nel payload di input.
Esempio 1: scalabilità per gestire i picchi di traffico pianificati
Crea due pianificazioni da scalare prima delle ore di punta e ridurle dopo. Ogni pianificazione si rivolge all'PutFunctionScalingConfigAPI con MaxExecutionEnvironments valori MinExecutionEnvironments e aggiornamenti.
Espandi alle 8:00 UTC (min=100, max=1000):
aws scheduler create-schedule \ --name "ScaleUpLambdaManagedInstances" \ --schedule-expression "cron(0 8 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 100, \"MaxExecutionEnvironments\": 1000}}" }'
Ridimensiona alle 18:00 UTC (min=5, max=20):
aws scheduler create-schedule \ --name "ScaleDownLambdaManagedInstances" \ --schedule-expression "cron(0 18 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 5, \"MaxExecutionEnvironments\": 20}}" }'
Esempio 2: disattivazione durante le ore non di punta e riattivazione
L'impostazione di entrambi MinExecutionEnvironments e MaxExecutionEnvironments su 0 disattiva la versione della funzione senza eliminarla. Una funzione disattivata non si ridimensiona automaticamente in base al traffico. È necessario riattivarla esplicitamente impostando valori diversi da zero tramite un'altra azione pianificata.
Disattiva alle 22:00 UTC (min=0, max=0):
aws scheduler create-schedule \ --name "DeactivateLambdaManagedInstances" \ --schedule-expression "cron(0 22 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 0, \"MaxExecutionEnvironments\": 0}}" }'
Riattiva alle 7:00 UTC (min=10, max=20):
aws scheduler create-schedule \ --name "ReactivateLambdaManagedInstances" \ --schedule-expression "cron(0 7 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 10, \"MaxExecutionEnvironments\": 20}}" }'
Linee guida per la regolazione:
-
Per carichi di lavoro con picchi prevedibili, crea più pianificazioni in base al tuo schema di traffico: una per ampliare la tua funzione prima delle ore di punta e un'altra per ridurla dopo le ore di punta. Ogni pianificazione segue lo stesso schema con valori e aggiornamenti
MinExecutionEnvironments.MaxExecutionEnvironments -
La scalabilità pianificata modifica il livello minimo e massimo degli ambienti di esecuzione assegnati, ma la scalabilità effettiva tra min e max risponde comunque all'utilizzo della CPU e alla saturazione della concorrenza.
-
Se il traffico raddoppia più del doppio entro 5 minuti da un ampliamento programmato, potresti comunque riscontrare problemi man mano che viene fornita la capacità.
-
Quando si passa a zero per disattivare una funzione, ricordate che la riattivazione richiede una chiamata esplicita con valori diversi da zero.
PutFunctionScalingConfig
Fasi successive
-
Consulta le guide specifiche per il runtime per la gestione della concorrenza multipla
-
Configura la connettività VPC per i tuoi provider di capacità
-
Monitora le metriche di scalabilità per ottimizzare il comportamento di scalabilità