{"id":1283,"date":"2020-03-20T12:21:18","date_gmt":"2020-03-20T11:21:18","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1283"},"modified":"2021-03-17T15:12:41","modified_gmt":"2021-03-17T14:12:41","slug":"analisi-completa-di-aws-lambda-come-ottimizzare-i-picchi-e-prevenire-i-cold-start","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/analisi-completa-di-aws-lambda-come-ottimizzare-i-picchi-e-prevenire-i-cold-start\/","title":{"rendered":"Analisi completa di AWS Lambda: come ottimizzare i picchi e prevenire i cold start"},"content":{"rendered":"

Quando si parla di paradigma Serverless, molti sono gli aspetti che dobbiamo tenere in considerazione per evitare problemi di latenza e produrre cos\u00ec applicazioni pi\u00f9 belle, pi\u00f9 robuste e sicure. In questo articolo discuteremo di molti aspetti da tenere in considerazione quando si decide di sviluppare in AWS Lambda, come evitare alcuni dei problemi pi\u00f9 comuni ma anche di come sfruttare le innovazioni introdotte recentemente da Amazon per creare app Serverless pi\u00f9 efficienti, performanti e meno costose.\u00a0<\/span><\/p>\n

Cold Start<\/h2>\n

Per anni l\u2019argomento cold start \u00e8 stato uno dei pi\u00f9 accesi e pi\u00f9 frequentemente dibattuti della community di Serverless.<\/span><\/p>\n

Supponiamo che abbiate provvisionato una nuova funzione Lambda. Indipendentemente dal modo in cui la funzione \u00e8 invocata, una nuova Micro VM deve essere istanziata; questo perch\u00e8 non ci sono ancora istanze disponibili per rispondere a questo preciso evento. L\u2019unione dei tempi necessari a fare il setup del Runtime di Lambda, insieme con il vostro codice e le sue dipendenze, viene comunemente chiamato Cold Start.<\/span><\/p>\n

Indipendentemente dal tipo di Runtime scelto, un processo di setup pu\u00f2 impiegare almeno dai 50 ai 200 ms prima che l\u2019esecuzione abbia realmente luogo. Lambda scritte in Java e .Net possono anche dar vita a cold start di diversi secondi!<\/span><\/p>\n

Facendo riferimento al vostro caso d\u2019uso, i cold start possono diventare sicuramente un collo di bottiglia, prevenendo cos\u00ec la possibile adozione di un paradigma Serverless per la vostra applicazione. Per fortuna, per molti sviluppatori, questo problema \u00e8 facilmente aggirabile perch\u00e9 il carico di lavoro della loro soluzione \u00e8 prevedibile e stabile o, in alcuni casi, basato su calcoli ad uso esclusivamente interno, ad es. data-processing.<\/span><\/p>\n

La documentazione di AWS ci mostra un ottimo esempio per comprendere meglio i cold start e i problemi correlati con le nostre necessit\u00e0 di scalare. Immaginiamo di avere a che fare con societ\u00e0 come JustEat e Deliveroo solite a ricevere picchi di traffico durante gli orari di pranzo e cena.<\/span><\/p>\n

\"spiky_traffic\"<\/p>\n

Questi picchi causano il raggiungimento potenziale dei limiti di una applicazione come ad esempio quanto velocemente AWS Lambda sia in grado di scalare oltre il suo limite iniziale di <\/span>burst-capacity<\/b>. Dopo il <\/span>burst<\/b> iniziale, una lambda pu\u00f2 scalare linearmente fino a 500 istanze per minuto per servire richieste concorrenti. Prima di poter servire tali richieste, per\u00f2, ogni nuova istanza si trova ad affrontare un cold start. Limiti di concurrency e una alta latenza di risposta dovuta ai cold start possono far s\u00ec che le vostre politiche di scaling non siano in grado di far fronte al traffico, causando l\u2019eventuale scarto di nuove richieste.<\/span><\/p>\n

 <\/p>\n

 <\/p>\n

\"\"
courtesy of AWS<\/figcaption><\/figure>\n
Legenda<\/h6>\n

\"\"<\/p>\n

Istanze per le funzioni<\/span><\/h6>\n
\"\"<\/h6>\n
Richieste aperte<\/span><\/h6>\n
\"\" possibile Throttling<\/span><\/h6>\n

Reserved Concurrency<\/h2>\n

La Concurrency di AWS Lambda ha un limite per regione, condiviso da tutte le funzioni in quella specifica regione, altro punto da tenere in considerazione quando diverse Lambda sono soggette a invocazioni molto frequenti. Facendo riferimento alla tabella sottostante abbiamo:<\/span><\/p>\n

Limiti di Burst Concurrency<\/h3>\n