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
Lambda Managed Instances non è scalabile quando arrivano le chiamate e non supporta gli avviamenti a freddo. Invece, scala in modo asincrono utilizzando segnali di consumo di risorse. Le istanze gestite attualmente sono scalabili in base all'utilizzo delle risorse della CPU e alla saturazione di più concorrenti.
Differenze principali:
-
Lambda (impostazione predefinita): scala quando non esiste un ambiente di esecuzione libero per gestire una chiamata in arrivo (avvio a freddo)
-
Istanze gestite Lambda: scalabilità asincrona in base all'utilizzo delle risorse della CPU e alla saturazione multi-concorrenza degli ambienti di esecuzione
Se il traffico raddoppia più che in 5 minuti, potresti riscontrare dei rallentamenti man mano che Lambda aumenta 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: eseguite nel tuo account nelle sottoreti fornite
-
Router e scaler: componenti Lambda condivisi che instradano le chiamate e gestiscono il ridimensionamento
-
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 fornitore di capacità, Lambda avvia le istanze gestite nel tuo account. Ne avvia tre per impostazione predefinita 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 fornitore di capacità.
-
Man mano che il traffico entra nell'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 il router tenta di inviare una chiamata a un ambiente di esecuzione con un elevato consumo di risorse, il Lambda Agent su quell'istanza lo avvisa di riprovare su un'altra.
-
Man mano che il traffico diminuisce, l'agente Lambda invia una notifica a Scaler, che decide di ridimensionare gli ambienti di esecuzione e scalare le istanze gestite.
Regolazione del comportamento di ridimensionamento
È possibile personalizzare il comportamento di scalabilità delle istanze gestite tramite cinque controlli:
Controlli a livello di funzione
1. Memoria funzionale e vCPU
Scegliete la dimensione della memoria e l'allocazione della vCPU per la vostra funzione. La dimensione minima della funzione supportata è 2 GB e 1 vCPU.
Considerazioni:
-
Scegliete un'impostazione di memoria e vCPU che supporti le esecuzioni simultanee della vostra funzione
-
Non è possibile configurare una funzione con meno di 1 vCPU perché le funzioni in esecuzione su istanze gestite dovrebbero supportare carichi di lavoro simultanei multipli
-
Non è possibile scegliere meno di 2 GB perché corrisponde al rapporto di 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 stai eseguendo CPU-intensive operazioni o esegui pochi I/O, dovresti 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 che funzionano per un'ampia varietà di applicazioni.
Linee guida per la regolazione:
-
Aumentare la concorrenza: se le chiamate di funzione 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 con più concorrenti, gli ambienti di esecuzione con una concorrenza molto bassa potrebbero subire limitazioni durante la scalabilità. Quando le chiamate arrivano in un ambiente di esecuzione che ha raggiunto il limite di concorrenza, Lambda le indirizza altrove e ridimensiona i nuovi ambienti di esecuzione per gestire il carico. Per identificare quale vincolo di risorse sta causando le limitazioni, monitora le metriche del motivo dell'accelerazione (,, e) descritte in. ConcurrencyThrottles CPUThrottles MemoryThrottles DiskThrottles Tipi di parametri per le funzioni Lambda
3. Ambienti di esecuzione per funzione
Imposta il numero minimo e massimo di ambienti di esecuzione per la tua funzione.
Comportamento predefinito: il minimo predefinito è di 3 ambienti di esecuzione nelle zone di disponibilità, senza un massimo predefinito. È possibile sovrascrivere entrambi i valori dopo la creazione della funzione.
Linee guida per la regolazione:
-
Stabilisci il valore minimo: fornisci capacità per il traffico di base e riduci le accelerazioni in caso di raffiche improvvise. I valori inferiori a 3 riducono la ridondanza nella zona di disponibilità.
-
Imposta il valore massimo: limita il numero di ambienti di esecuzione per controllare lo scale-out e prevenire i rumorosi problemi adiacenti quando più funzioni condividono un Capacity Provider.
-
Disattiva la funzione: imposta il valore minimo e 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. Quando è attivata
$LATEST.PUBLISHED, la configurazione si propaga alle versioni future.$LATEST.PUBLISHEDSe impostate su una versione specifica, le nuove versioni pubblicate tornano ai valori predefiniti. -
Configurazione abbinata: è necessario impostare contemporaneamente i valori minimo e massimo. Qualsiasi impostazione non specificata viene ripristinata al valore predefinito. Valori validi per entrambi
MinExecutionEnvironmentseMaxExecutionEnvironmentsvanno da 0 a 15000. Un valore minimo di 0 è valido solo quando anche il valore massimo è 0. -
Implicazione in termini di costi: la disattivazione della funzione ha effetto a livello di versione della funzione. Lambda termina un'istanza EC2 sottostante quando non dispone di ambienti di esecuzione attivi e i costi dell'istanza continuano fino al completamento della terminazione (in genere entro pochi minuti).
Controlli a livello di fornitore di capacità
4. Utilizzo delle risorse di destinazione
Scegli il tuo obiettivo per il consumo di utilizzo della CPU.
Comportamento predefinito: Lambda mantiene un margine di manovra sufficiente per raddoppiare il traffico in 5 minuti senza rallentamenti.
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 utilizzo maggiore e costi inferiori
-
Se si desidera mantenere un margine di manovra per le ondate di traffico, è possibile impostare obiettivi di risorse a un livello basso, il che richiede 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 carico di lavoro. Si consiglia di consentire a Lambda Managed Instances di scegliere i tipi di istanza, poiché limitare il numero di possibili tipi di istanza potrebbe comportare una minore disponibilità.
Configurazione personalizzata:
-
Requisiti hardware specifici: imposta i tipi di istanza consentiti su un elenco di istanze compatibili. Ad esempio, se hai 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, potresti scegliere tipi di istanza più piccoli, come i tipi di istanza m7a.large
Dimensionamento pianificato
Usa Amazon EventBridge Scheduler per modificare 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, ad esempio la scalabilità verso l'alto prima delle ore di punta e la riduzione durante le ore non di punta.
Configurazione dello scheduler:
-
Crea un ruolo di esecuzione EventBridge dello Scheduler o utilizza un ruolo esistente che conceda il permesso di chiamare la funzione di
lambda:PutFunctionScalingConfigdestinazione. -
Crea una pianificazione utilizzando un'espressione cron o rate, indirizzando l'
PutFunctionScalingConfigAPI come destinazione universale. Specifica 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 ridimensionarle in seguito. Ogni pianificazione è indirizzata all'PutFunctionScalingConfigAPI con MaxExecutionEnvironments valori MinExecutionEnvironments e dati aggiornati.
Scalabilità 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}}" }'
Ridurre la scala 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: disattiva durante le ore non di punta e riattiva
L'impostazione di entrambi MinExecutionEnvironments e MaxExecutionEnvironments su 0 disattiva la versione della funzione senza eliminarla. Una funzione disattivata non viene ridimensionata 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 modello di traffico: una per aumentare la funzionalità 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 -
Il ridimensionamento pianificato modifica il livello minimo e massimo previsto per gli ambienti di esecuzione, ma il ridimensionamento effettivo tra valori minimi e massimi risponde comunque all'utilizzo della CPU e alla saturazione della concorrenza.
-
Se il traffico raddoppia di più entro 5 minuti da uno scale-up pianificato, è possibile che si verifichino comunque delle limitazioni man mano che viene fornita la capacità.
-
Quando scalate a zero per disattivare una funzione, ricordate che la riattivazione richiede una chiamata esplicita con valori diversi da zero.
PutFunctionScalingConfig
Fasi successive
-
Scopri i fornitori di capacità per le istanze gestite Lambda
-
Consulta le guide specifiche per il runtime per la gestione della concorrenza multipla
-
Configura la connettività VPC per i tuoi fornitori di capacità
-
Monitora le metriche di scalabilità per ottimizzare il comportamento di scalabilità