Il serverless computing è un modello di esecuzione in cui il provider di servizi Cloud è responsabile dell'esecuzione di una parte di codice allocando dinamicamente le risorse e addebitando all’azienda solo la quantità di risorse effettivamente utilizzate.
Il codice viene in genere eseguito all'interno di container stateless che possono essere attivati da diversi eventi tra cui richieste http, eventi di database, servizi di accodamento, avvisi di monitoraggio, caricamenti di file, ecc.
Definito anche “Function-as-a-Service”, serverless è la soluzione a diversi problemi tradizionalmente riscontrati dai team. Quando l’applicazione viene eseguita su un server e l’azienda è responsabile del provisioning e della gestione delle risorse per esso, ci si trova a:
Tanto nelle aziende piccole senza un team di Operations dedicato alla gestione dei server quanto in quelle di grandi dimensioni con delle risorse dedicate, lo svolgimento di queste operazioni sottrae tempo alle attività core: costruire e mantenere l’applicazione. È qui che entra in gioco il serverless computing.
SCOPRI ANCHE ➡️ il nostro Talk su serverless e Kubernetes
L’architettura serverless sta diventando sempre più popolare: secondo le valutazioni di MarketsandMarkets, il settore dovrebbe aumentare il fatturato da 7.6 miliardi di dollari stimati nel 2020 a 21.1 miliardi previsti entro il 2025, con un tasso di crescita annuale (CAGR) del 22.7%. La crescita di adozione è determinata dalla serie di vantaggi derivanti dal nuovo modello di sviluppo: eccoli!
A differenza dei modelli Infrastructure-as-a-Service, che prevedono l’affitto di risorse hardware a prescindere dal loro effettivo utilizzo, il modello Function-as-a-Service stabilisce un tariffario pay-as-you-go: gli asset vengono pagati per il tempo strettamente necessario all’esecuzione di una funzione, quando essa viene richiamata da un evento.
Il fatto di pagare esclusivamente per il valore servizi effettivamente utilizzati permette ai team di concentrarsi sullo sviluppo del prodotto e sulle sue caratteristiche uniche, e non sui costi o sull'implementazione dei servizi che vengono integrati come supporto alle funzioni principali.
La scalabilità è un fattore critico per le aziende in rapida crescita, poiché necessita di un ridimensionamento verticale e orizzontale dell’infrastruttura: un compito non facile che richiede molto impegno e tempo, aumentando di conseguenza i costi.
Gli ambienti serverless rimuovono queste limitazioni, consentendo alle aziende di iniziare in piccolo e supportare poi la crescita nel tempo senza alcuna interruzione dei servizi e senza incorrere in modifiche costose e non pianificate.
Poiché il provisioning e la gestione delle risorse computazionali viene demandata al Cloud provider, è possibile adottare rapidamente nuove tecnologie per rispondere velocemente alle esigenze di business e di mercato senza doversi preoccupare dell’upgrade infrastrutturale con tutti i costi connessi.
Oggigiorno nelle aziende il business dipende fortemente dall’IT; ecco perché è indispensabile che servizi IT garantiscano un'elevata disponibilità. I Cloud provider offrono un’infrastruttura globale ben progettata che fornisce elevata availability e resilienza per i carichi di lavoro dei clienti.
La business continuity è un imperativo per tutti i business oggi e conseguentemente qualsiasi attività deve essere supportata da un solido piano di Disaster Recovery. I Cloud provider di soluzioni serverless offrono funzionalità avanzate per il ripristino automatico delle applicazioni e dei sistemi sottostanti contro qualsiasi tipo di disastro (calamità naturali, attacchi informatici, difettosità hardware e così via).
Nonostante i vantaggi nell’adozione delle serverless architecture siano evidenti e numerosi, esiste tuttavia il rovescio della medaglia. Vediamo allora le sfide e le criticità da tenere presente quando si decide di passare al nuovo modello di sviluppo.
Il tema del vendor lock-in nelle architetture Serverless è da tenere in considerazione in fase progettuale e di migrazione verso questo paradigma. Generalmente queste architetture si sviluppano più facilmente all'interno dei "walled garden" dei singoli vendor.
Per questo è importante sapere sin dall’inizio le criticità che possono verificarsi nel passaggio da un vendor all’altro:
Per mitigare queste problematiche la Cloud Native Computing Foundation, che si occupa di favorire la diffusione di standard aperti per le implementazioni Cloud Native, mantiene un osservatorio che censisce i prodotti serverless organizzati per categoria. La CNCF supporta lo sviluppo di standard e soluzioni aperte, come ad esempio CloudEvents (un formato standardizzato per i dati degli eventi) e prodotti open come Knative, usato per implementare servizi FaaS su Cloud e on-premises.
Poiché il modello di pricing dei servizi FaaS è prettamente a consumo, diventa difficile fare previsioni. In assenza di canoni fissi, si devono pagare le risorse quando necessario e pertanto si può incorrere in brutte sorprese quando portiamo le nostre applicazioni in produzione.
Per questo è bene analizzare le offerte dei vari vendor: a volte infatti si incontrano differenze significative nei costi e anche nelle quantità di free tier disponibili.
Un tool interessante per fare previsioni è Serverless Cost Calculator che permette di simulare i costi delle piattaforme più note come AWS Lambda, Azure Functions, Google Cloud Functions e IBM OpenWhisk.
Abbiamo visto che nel paradigma Serverless le risorse si pagano solo quando effettivamente utilizzate, ed è per questo che i Cloud vendor per rendere economicamente sostenibile questo modello disattivano le risorse quando non effettivamente utilizzate.
Per questo motivo è possibile che si verifichino ritardi nell’attivazione (cold start). Per cold start si intende il ritardo tra l’invocazione di una funzione e il tempo necessario per le istanze di attivarsi e rispondere alla richiesta.
Ci sono diversi fattori che possono influenzare il problema del cold start come ad esempio:
Sarà necessario dunque lavorare su ognuno di questi parametri per ottimizzare il tempo di start della funzione e adottare tecniche specifiche proposte dai vendor, come descritto ad esempio da AWS per le lambda functions o da Google Cloud Platform per Cloud Run.
Sebbene tutti i Cloud provider forniscano avanzati sistemi di sicurezza, va ricordato che i server che forniscono servizi a più clienti sono naturalmente più vulnerabili ai problemi di sicurezza rispetto ai server locali dedicati.
Ciò è dovuto al set più ampio di sorgenti di eventi, che aumenta la potenziale superficie di attacco. Tra i rischi più comuni ci sono quelli causati dalla dipendenza da funzioni serverless derivate da software di terze parti come pacchetti e librerie open source, nonché attacchi DDoS (Distributed Denial of Service).
Nonostante le difficoltà che si possono incontrare nell’adottare le serverless architecture, nella maggioranza dei casi i vantaggi ottenuti superano l’ammontare dei rischi e delle criticità.
Inoltre, alcune problematiche sono ovviabili, ad esempio attuando una scelta oculata delle tecnologie provider per scongiurare il lock-in oppure mettendo in atto le opzioni sopraccitate per mitigare i cold start.