Il serverless computing: come funziona e quali sono i vantaggi dell’architettura serverless
Da diverso tempo l’attività digitale si sta spostando sempre più sul cloud. Le motivazioni, d’altronde, sono semplici: se all’inizio del Web lo sviluppo di un’applicazione rendeva necessario possedere l’hardware fisico per far eseguire un server, il cloud computing ha reso i server una risorsa noleggiabile da remoto. L’evoluzione del cloud computing ha permesso la nascita del serverless computing, un modello di sviluppo e distribuzione dei servizi informatici in cui è il provider ad occuparsi della gestione dell’infrastruttura e delle risorse informatiche sottostanti, allocando dinamicamente solo le risorse di elaborazione e archiviazione necessarie per eseguire una determinata porzione di codice. Il successo di questo modello pay-as-you-go, in cui le funzioni si pagano solo quando vengono chiamate, si lega a molteplici fattori: alle aziende garantisce scalabilità e ottimizzazione dei costi mentre agli sviluppatori la libertà di potersi dedicare esclusivamente al software senza doversi preoccupare dell’infrastruttura, dal momento in cui il processo viene eseguito direttamente dal cloud provider.
Ma cosa significa serverless computing e quali sono i vantaggi e gli svantaggi da considerare prima di adottare questo nuovo paradigma in cloud?
Cos’è il serverless computing
Il serverless computing è un modello di sviluppo cloud native che permette agli sviluppatori di creare ed eseguire applicazioni o processi senza gestire direttamente i server, ovvero senza dover prestare attenzione all’infrastruttura sottostante. Infatti, le attività relative alla manutenzione e alla scalabilità dei server fanno capo al provider dei servizi cloud.
Anche noto come FaaS (Function as a Service), il serverless computing è un paradigma per la progettazione e la distribuzione di applicazioni che permette agli sviluppatori di acquistare servizi su base “pay-as-you-go” flessibile, ovvero pagando solo ed esclusivamente per i servizi che effettivamente vengono utilizzati, con la possibilità di scalare automaticamente in relazione alle richieste.
Contrariamente a quanto si potrebbe ipotizzare per via del suo nome, quello serverless non è affatto un ambiente cloud di sviluppo privo di server. Tuttavia, lo spazio nei server e tutto ciò che concerne l’infrastruttura sono di responsabilità del provider, svincolando gli sviluppatori dalla necessità di configurare le risorse necessarie per eseguire i carichi di lavoro previste dalle varie fasi del ciclo di vita del software.
In poche parole, con il serverless computing gli sviluppatori possono dedicarsi allo sviluppo del software senza dover tenere conto dell’infrastruttura, lasciando che sia il provider di servizi cloud stesso a gestire le attività di routine per il provisioning, la manutenzione e la scalabilità dell’infrastruttura server.
Serverless vs cloud computing
Rispetto ad altri modelli di cloud computing, nel paradigma serverless è il provider ad avere la responsabilità della gestione dell’infrastruttura cloud e della scalabilità delle app.
Cloud computing
In un modello di cloud computing IaaS (Infrastrcture as a Service) standard, l’utente acquista unità di capacità, cioè paga al provider di cloud pubblico i componenti server che sono utilizzati per l’esecuzione delle applicazioni e che sono sempre attivi.
È l’utente a dover aumentare la capacità del server nel momento in cui avvengono picchi di domanda e a doverla ridurre quando non è più necessaria. Secondo questo modello, d’altronde, l’infrastruttura cloud necessaria per l’esecuzione di un’applicazione rimane sempre attiva, anche quando l’applicazione non è in uso.
Serverless computing
Contrariamente a quanto accade con il cloud computing, con il serverless computing le applicazioni vengono avviate solo quando necessario. Questo significa insomma che quando un evento attiva l’esecuzione del codice, è il provider di cloud pubblico ad assegnare in modo dinamico le risorse per quel codice lasciando all’utente l’onere di pagare il servizio solo fino alla fine dell’esecuzione.
Naturalmente, ciò comporta evidenti vantaggi in termini di costo ed efficienza, considerando che libera gli sviluppatori dalla necessità di dedicarsi ad attività di routine e manuali per la gestione della scalabilità delle applicazioni e del provisioning del server.
Function as a Service – FaaS
Il Function as a Service (FaaS) è un modello di elaborazione cloud in cui gli sviluppatori devono dedicarsi esclusivamente alla scrittura delle funzioni, dette cloud functions, senza doversi preoccupare dell’ambiente di esecuzione.
Il codice viene distribuito in container che si caratterizzano per essere:
- Stateless: senza memoria dello stato di esecuzione precedente;
- Temporanei: eseguiti per un breve periodo di tempo definito dal provider;
- Attivati da eventi: eseguiti automaticamente quando necessario;
- Gestiti da un provider di servizi cloud: impedendo all’utente di interferire sull’infrastruttura di esecuzione della funzione.
Vantaggi
In linea generare, il cloud computing ha portato con sé diversi benefici. Per le aziende, primo su tutti, il non dover comprare e mantenere le proprie infrastrutture.
Altri vantaggi del serverless computing sono:
- Efficienza nello sviluppo: l’approccio serverless, delegando al provider le attività di gestione dell’infrastruttura, aumenta la produttività degli sviluppatori che possono così concentrarsi sulla programmazione e sul prodotto da realizzare piuttosto che sul funzionamento e sulla gestione del server;
- Costi minori: a differenza del cloud computing tradizionale, in cui il pagamento delle risorse in esecuzione è previsto anche quando queste non sono utilizzate, il modello serverless garantisce costi operativi inferiori, perché l’addebito si limita al tempo di calcolo effettivamente impiegato nel cloud e non a quello utilizzato per l’esecuzione e la gestione continuativa del server.
- Scalabilità: la scalabilità viene gestita interamente dal provider serverless, sempre pronto a scalare e a fornire tutte le risorse computazionali necessarie;
- Ottimizzazione delle risorse: grazie all’allocazione automatica delle risorse, non è più necessario investire preventivamente in risorse e capacità.
- Velocità di rilascio: l’architettura serverless riduce in modo significativo il tempo di commercializzazione garantendo agli sviluppatori la possibilità di aggiungere e modificare il codice in modo frammentario;
- Varietà di linguaggi: Function as a Service supporta generalmente un’ampia varietà di linguaggi di programmazione. Da Javascript a Phyton, da Go a C#.
Svantaggi
Dunque, se il serverless computing ha tutti questi vantaggi, è davvero la soluzione perfetta per ogni progetto? In realtà, causa limitazioni dell’architettura stessa e delle tecnologie del momento, è necessario riconoscergli tutta una serie di controindicazioni. Tra queste:
- Latenza iniziale: se il codice non viene utilizzato di frequente è possibile si verifichino problemi di latenza durante l’esecuzione. Lo stesso accade quando una funzione viene eseguita per la prima volta poiché la piattaforma deve “capire” com’è strutturata la funzione e quali risorse allocare per eseguirla in maniera corretta;
- Vendor lock-in: adottare il serverless computing rende necessario accettare gli eventuali vincoli tecnologici dettati dello specifico vendor. L’applicazione è infatti fortemente dipendente dal fornitore di servizi cloud e, in caso di cambio di provider, il rischio è di dover eseguire l’upgrade dei sistemi per rispettare le specifiche del nuovo fornitore;
- Mancata personalizzazione: i provider possono imporre vincoli all’interazione con i propri componenti, limitando di conseguenza la flessibilità e la personalizzazione dei sistemi. Per questo, il serverless potrebbe non essere la soluzione ideale qualora si abbia in previsione un’applicazione con un lungo ciclo di vita.
Quando usare il modello serverless
Considerati i pro e i contro visti qui, è chiaro che il paradigma serverless computing non si addice a tutte le applicazioni. Le controindicazioni a cui abbiamo accennato si fanno particolarmente importante quando si ha a che fare con sistemi obsoleti e difficilmente adattabili alle nuove tecnologie o, ancora, con sistemi eccessivamente complessi che rischierebbero di far lievitare sensibilmente i costi.
Insomma, il modello del serverless computing è adatto ai contesti cloud native delle applicazioni progettate secondo le più moderne concezioni, ovvero formate da componenti disaccoppiate e lontane dalla concezione monolitica tradizionale del software. È particolarmente consigliato poi per tutti quegli scenari di utilizzo che comportano picchi di domande improvvisi e imprevedibili.
L’elaborazione serverless è progettata principalmente per lo scambio di dati di breve durata di applicazioni web e aziendali nel cloud. In particolare, l’approccio serverless può rivelarsi prezioso per:
- Proxy API: l’architettura serverless e il gateway API corrispondente permettono di creare un livello di astrazione alternativo per rendere le applicazioni accessibili attraverso semplici API REST da più sistemi;
- Backend as a Service: il serverless computing viene spesso utilizzato per costruire e gestire i back end di applicazioni sul cloud;
- Elaborazione dei big data: l’infrastruttura serverless è in grado di elaborare (transcodificare, combinare e manipolare) dati strutturati e non trasformandosi in un grande alleato essendo oggi i big data parte integrante del moderno ambiente aziendale;
- Chat bot e assistenti virtuali: le app serverless ben rispondono agli scenari di utilizzo che prevedono flussi di dati in entrata.
Il futuro del serverless computing
Come abbiamo visto sin qui, il serverless computing è un modello di servizio cloud che ha già conquistato l’attenzione delle aziende e degli sviluppatori per via dei suoi vantaggi, primi su tutti la riduzione dei costi e la maggior produttività dei programmatori, liberi di potersi dedicare esclusivamente alla scrittura del codice.
L’esponenziale diffusione di questo modello non lascia dubbi: il serverless computing rappresenterà, negli anni a venire, una delle principali leve di sviluppo in ambito IT.
Lo confermano, tra gli altri, gli analisi di Forrester nel Report Demystifying Serverless Computing. Si prevedono infatti importanti sviluppi sia per quanto concerne le serverless architectures, sia per quanto riguarda i servizi resi disponibili dai fornitori. Si parla non solo di far girare le soluzioni serverless in container standardizzati, per fornire agli sviluppatori maggior controllo ed evitare il vendor lock-in, ma anche di transazioni distribuite o gestite in blockchain.
Cerchi una soluzione digitale su misura per massimizzare le potenzialità del tuo business? Contattaci.