Migliorare le prestazioni di avvio con Lambda SnapStart - 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à.

Migliorare le prestazioni di avvio con Lambda SnapStart

Lambda SnapStart per Java può migliorare le prestazioni di avvio per le applicazioni sensibili alla latenza fino a 10 volte senza costi aggiuntivi, in genere senza modifiche al codice della funzione. Il fattore che contribuisce maggiormente alla latenza di avvio (spesso definita tempo di avvio a freddo) è il tempo impiegato da Lambda per inizializzare la funzione, che include il caricamento del codice della funzione, l'avvio del runtime e l'inizializzazione del codice della funzione.

Con SnapStart, Lambda inizializza la funzione quando si pubblica una versione della funzione. Lambda utilizza lo snapshot di una microVM Firecracker della memoria e dello stato del disco dell'ambiente di esecuzione inizializzato, crittografa lo snapshot e lo memorizza nella cache per l'accesso a bassa latenza. Quando richiami la versione della funzione per la prima volta e man mano che le chiamate aumentano, Lambda riprende i nuovi ambienti di esecuzione dallo snapshot memorizzato nella cache invece di inizializzarli da zero, migliorando così la latenza di avvio.

Importante

Se le applicazioni dipendono dall'univocità dello stato, è necessario valutare il codice della funzione e verificare che sia resiliente alle operazioni di snapshot. Per ulteriori informazioni, consulta Gestire l'unicità con Lambda SnapStart.

Funzionalità e limitazioni supportate

SnapStart supporta i runtime gestiti di Java 11 e versioni successive. Altri runtime gestiti (come nodejs20.x e python3.12), Runtime solo per il sistema operativo e le immagini di container non sono supportati.

SnapStart non supporta la concorrenza fornita, l'architettura arm64, Amazon Elastic File System (Amazon EFS) o lo storage temporaneo superiore a 512 MB.

Con cui lavorare SnapStart, puoi usare la console Lambda, the AWS Command Line Interface (AWS CLI), l'API Lambda,, AWS SDK for Java AWS CloudFormation, AWS Serverless Application Model (AWS SAM) e. AWS Cloud Development Kit (AWS CDK) Per ulteriori informazioni, consulta Attivazione e gestione di Lambda SnapStart.

Nota

È possibile utilizzare SnapStart solo versioni di funzioni pubblicate e alias che rimandano a versioni. Non è possibile utilizzare SnapStart sulla versione non pubblicata di una funzione ($LATEST).

Regioni supportate

SnapStart è disponibile nelle seguenti versioni: Regioni AWS

  • Stati Uniti orientali (Virginia settentrionale)

  • Stati Uniti orientali (Ohio)

  • Stati Uniti occidentali (California settentrionale)

  • Stati Uniti occidentali (Oregon)

  • Africa (Città del Capo)

  • Asia Pacific (Hong Kong)

  • Asia Pacifico (Mumbai)

  • Asia Pacific (Hyderabad)

  • Asia Pacifico (Tokyo)

  • Asia Pacifico (Seul)

  • Asia Pacifico (Osaka-Locale)

  • Asia Pacifico (Singapore)

  • Asia Pacifico (Sydney)

  • Asia Pacifico (Giacarta)

  • Asia Pacifico (Melbourne)

  • Canada (Centrale)

  • Europa (Stoccolma)

  • Europa (Francoforte)

  • Europa (Zurigo)

  • Europa (Irlanda)

  • Europe (London)

  • Europa (Parigi)

  • Europa (Milano)

  • Europa (Spagna)

  • Medio Oriente (Emirati Arabi Uniti)

  • Medio Oriente (Bahrein)

  • Sud America (San Paolo)

Considerazioni sulla compatibilità

Con SnapStart, Lambda utilizza una singola istantanea come stato iniziale per più ambienti di esecuzione. Se la funzione utilizza uno dei seguenti elementi durante la fase di inizializzazione, potrebbe essere necessario apportare alcune modifiche prima di utilizzarla: SnapStart

Unicità

Se il codice di inizializzazione genera contenuti unici inclusi nello snapshot, il contenuto potrebbe non essere più unico quando viene riutilizzato in più ambienti di esecuzione. Per mantenere l'unicità durante l'utilizzo SnapStart, è necessario generare contenuti unici dopo l'inizializzazione. Ciò include ID univoci, segreti univoci ed entropia utilizzata per generare pseudocasualità. Per informazioni su come ripristinare l'unicità, consulta Gestire l'unicità con Lambda SnapStart.

Connessioni di rete

Lo stato delle connessioni che la funzione stabilisce durante la fase di inizializzazione non è garantito quando Lambda riprende la funzione da uno snapshot. Convalida lo stato delle connessioni di rete e ristabiliscile se necessario. Nella maggior parte dei casi, le connessioni di rete stabilite da un AWS SDK riprendono automaticamente. Per altre connessioni, consulta le best practice.

Dati temporanei

Durante la fase di inizializzazione, alcune funzioni scaricano o inizializzano dati effimeri, come credenziali temporanee o timestamp memorizzati nella cache. Aggiorna i dati temporanei nel gestore delle funzioni prima di utilizzarli, anche quando non li usi. SnapStart

SnapStart prezzi

Non ci sono costi aggiuntivi per SnapStart. L'addebito viene effettuato in base al numero di richieste per le funzioni, al tempo impiegato dal codice per l'esecuzione e alla memoria configurata per la funzione. La durata viene calcolata dal momento in cui il codice inizia a funzionare fino a quando ritorna o termina in altro modo, arrotondato al valore di 1 ms più vicino.

I costi di durata si applicano al codice eseguito nel gestore della funzione, al codice di inizializzazione dichiarato all'esterno del gestore, al tempo necessario per il caricamento del runtime (JVM) e a qualsiasi codice eseguito in un hook di runtime. Per ulteriori informazioni su come Lambda calcola la durata, consulta Monitoraggio per Lambda SnapStart.

Per le funzioni configurate con SnapStart, Lambda ricicla periodicamente gli ambienti di esecuzione ed esegue nuovamente il codice di inizializzazione. Per la resilienza, Lambda crea snapshot in più zone di disponibilità. Gli addebiti si applicano ogni volta che Lambda esegue nuovamente il codice di inizializzazione in un'altra zona di disponibilità. Per ulteriori informazioni su come Lambda calcola gli addebiti, consulta Prezzi di AWS Lambda.

Confronto tra Lambda SnapStart e la concorrenza fornita

Sia la concorrenza Lambda SnapStart che quella fornita possono ridurre gli avviamenti a freddo e le latenze anomale quando una funzione aumenta. SnapStart ti aiuta a migliorare le prestazioni di avvio fino a 10 volte senza costi aggiuntivi. La simultaneità con provisioning mantiene le funzioni inizializzate e pronte a rispondere entro i 100 millisecondi. La configurazione della concorrenza fornita comporta addebiti a carico dell'utente. Account AWS Utilizza la simultaneità con provisioning se l'applicazione ha requisiti di latenza rigorosi per l'avvio a freddo. Non è possibile utilizzare entrambe le funzioni SnapStart e la concorrenza predisposta nella stessa versione della funzione.

Nota

SnapStart funziona meglio se utilizzato con invocazioni di funzioni su larga scala. Le funzioni richiamate di rado potrebbero non presentare gli stessi miglioramenti delle prestazioni.

Risorse aggiuntive

Oltre a leggere gli altri argomenti di questo capitolo, ti consigliamo anche di provare Starting up faster with AWS Lambda SnapStart workshop e di guardare la sessione Fast cold start for your Java functions di AWS re:Invent 2022.