Come testare le prestazioni delle funzioni AWS Lambda?


14

Il costo di AWS Lambda dipende dal tempo di esecuzione di una funzione e in parte dall'impronta della memoria. Avere funzioni che finiscono più velocemente e occupano meno memoria può far risparmiare parecchi soldi. Soprattutto quando una tale funzione viene eseguita spesso.

In che modo una funzione Lambda Node.js può essere ottimizzata per la velocità e l'ingombro di memoria ridotto per risparmiare sui costi?

Ci sono altri aspetti per Lambda che sono vantaggiosi da migliorare?

Risposte:


6

La risposta di Dawny33 è buona, ma vorrei iniziare prima nel processo di sviluppo.

Tenere d'occhio l'ambiente cloud per assicurarsi che le funzioni si comportino come previsto (comprese le funzioni di "produzione", che potrebbero operare su un set di dati diverso) è fondamentale, perché potrebbe rivelare cose che sono impossibili da riprodurre localmente o con un set di dati di prova.

Tuttavia, direi che questo test delle prestazioni che si esegue in uno scopo di ottimizzazione dovrebbe iniziare direttamente dalla macchina dello sviluppatore. O, almeno, da un ambiente locale prima di passare al cloud.

Il motivo per cui lo dico è che mentre AWS Lambdas è sorprendente su molti punti, il fatto che tu non abbia il pieno controllo sul server limiterà le tue capacità di strumentazione. Non sto dicendo che la strumentazione sia impossibile quando in serverless, ma prova a capire quante interruzioni della CPU hai (e quante sono causate dal tuo codice) solo per divertimento;)

Quindi ciò che consiglio, e in realtà non si limita a serverless, è iniziare la profilazione in anticipo. La profilazione di NodeJS può essere fatta con molti strumenti diversi, NewRelic, dynatrace e AppDynamic sono alcuni dei grandi protagonisti. C'è anche un lettore più piccolo, alcuni di essi sono solo un pacchetto NPM da installare (come Nodefly). È anche possibile eseguire alcuni NodeJS senza alcun ulteriore strumento, in quanto è presente un profiler integrato nel motore V8. Questa documentazione di NodeJS ti farà iniziare.

Qualunque strumento tu scelga, vuoi installarlo localmente e raccogliere dati di profilazione. Ciò potrebbe comportare l'esecuzione di un agente o l'inclusione di un pacchetto in package.json. Le istruzioni del tuo strumento ti diranno come installarlo. Un buon profiler ti farà sapere quanta memoria e CPU usi. Strumenti migliori ti daranno un'idea di quante chiamate remote sono state fatte, quanto tempo hanno impiegato.

Utilizzare i dati di profilazione forniti dallo strumento per identificare i colli di bottiglia e risolverli. Non c'è limite a quanta profilazione puoi fare. Alcune persone (pazze?) Guarderanno le chiamate di sistema della loro funzione più critica. Potresti dover fare questo tipo di cose se vuoi radere nanosecondi della tua funzione (ma forse AWS Lambda non è la scelta migliore per iniziare).

Vale anche la pena notare a questo punto che non ho menzionato nulla di specifico per AWS Lambda. Questo perché le tue ottimizzazioni molto probabilmente non saranno specifiche di AWS Lambda (dopotutto, in serverless non dovresti preoccuparti del server / ambiente).

Assicurati che non solo il tuo codice funzioni, ma che funzioni nel modo previsto. Non ottimizzare eccessivamente, ma tieni d'occhio la CPU e l'utilizzo della memoria. Un array da 2 MB dovrebbe davvero crescere fino a 10 MB quando lo ordinate? Probabilmente no.

Quindi sarai in grado di utilizzare gli strumenti menzionati da Dawny33, o alcuni altri strumenti, per confermare che le tue funzioni si comportano in modo simile quando vengono distribuite su Lambda. Avrai comunque già un livello molto alto di fiducia nella tua funzione e dovrai solo confermare che si comportano correttamente, non profilarli completamente.


Sì, è importante, ma come si può fare? Ci sono alcuni strumenti, pratiche, cosa può fare esattamente uno sviluppatore? Non vedo nulla di tutto ciò menzionato in questa risposta: /
Evgeny

L'ho detto, attraverso la profilazione e la strumentazione. NewRelic APM è un esempio, ma è solo uno dei profili disponibili. Installa il profiler, esegui la tua funzione, ottimizza. Non importa se funzionerà su AWS Lambda, a meno che tu non abbia un problema specifico su AWS. Aggiornerò la mia risposta in base al tuo commento.
Alexandre

Alcuni esempi e collegamenti ad articoli, blog, profiler noti che possono fare il lavoro. Questo è il genere di cose che imho rende preziosa la risposta, non solo mandare le persone a porre una domanda da qualche parte "come faccio a contare i miei interruzioni della CPU, non ne ho idea".
Evgeny

Buon punto. Ho migliorato di nuovo la mia risposta.
Alexandre

5

Potrei non essere in grado di rispondere completamente, ma ecco le mie opinioni dalla mia esperienza limitata con lambda:

  1. Velocità-prestazioni: la durata di una singola corsa di una funzione lambda sarà presente nel pannello di controllo della monitoringscheda Lambda , che assomiglia a questo:

inserisci qui la descrizione dell'immagine

Così fanno acceleratori / errori / numero di invocazioni.

  1. È inoltre possibile impostare i filtri CloudWatch per l'utilizzo della memoria di una funzione lambda, i cui dati possono essere utilizzati per ottimizzare ulteriormente il gestore. Questo è un post decente su come crearne uno.
  2. Inoltre, imposta la registrazione corretta , in modo da poter in seguito passare attraverso i registri in CloudWatch. Questo non è un trucco di ottimizzazione in sé, ma più di una buona pratica
  3. Test : prova a fondo le tue funzioni lambda, in modo da non perdere i casi limite. Questo è importante, poiché lambda riprova a fallire le funzioni prima di arrendersi. Quindi, puoi risparmiare in tempo utile se hai testato correttamente la funzione. Guida al test delle funzioni Lambda

5

Controlla la profiler IOpipe per ottenere discariche profiler completa V8 da invocazioni Lambda. Puoi caricarli in Chrome Devtools per vedere esattamente dove viene speso il tempo della CPU e come viene utilizzata la memoria per le tue funzioni.

inserisci qui la descrizione dell'immagine

Disclaimer: lavoro per IOpipe


0

Utilizzare l'agente StackImpact per ottenere profili CPU e memoria. Maggiori dettagli nel post del blog: AWS Lambda CPU e Memory Profiling (Node.js) . Poiché il processo Lambda Node.js si blocca tra le richieste, la maggior parte degli altri strumenti probabilmente non funzionerà immediatamente.

inserisci qui la descrizione dell'immagine

Disclaimer: lavoro per StackImpact


Sebbene sembri correlato e potenzialmente una soluzione valida, estendere un po 'su come potrebbe aiutare a rispondere alla domanda eviterebbe la sensazione di un link a cui risponderebbe solo se il marcio del link non ha molto per avere una prima idea su come potrebbe aiutare.
Tensibai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.