Cos’è il serverless computing, di che tipo di architettura si tratta, quali sono i vantaggi e quali gli ambiti applicativi


Il termine “serverless” fa immediatamente pensare a una struttura “senza server”, come vorrebbe la traduzione letterale.

In realtà, invece, a dispetto del suo significato, il nome rimanda a un modello di cloud che consente di creare e di eseguire applicazioni senza entrare in contatto con il server sottostante.

Si tratta, dunque, di un ambiente cloud in cui il server è comunque presente, ma dove le operazioni di provisioning, scalabilità e gestione sono demandate al fornitore del servizio.

Vediamo insieme di quale tecnologia si tratta e quali vantaggi e ambiti applicativi presenta.

Cos’è il serverless computing: una definizione

Un modello di cloud in cui gli sviluppatori creano ed eseguono applicazioni senza dover gestire i server, in quanto le attività relative alla loro manutenzione e alla loro scalabilità fanno capo al provider dei servizi cloud: è questo il serverless computing, detto anche FaaS – Function as a Service.

Si tratta di un paradigma diverso rispetto agli altri modelli di cloud computing, dal momento che il provider – come accennato – è responsabile della gestione dell’infrastruttura cloud, nonché della scalabilità delle app.

Al contrario, in un approccio di cloud computing Infrastructure-as-a-Service (IaaS) standard, il provider di cloud pubblico viene pagato per i componenti server utilizzati per l’esecuzione delle applicazioni. Componenti che sono sempre attivi.

All’utente spetta la responsabilità di elevare la capacità del server nelle fasi caratterizzate da picchi di domanda e, per converso, di ridurla quando non è più necessaria.

E l’infrastruttura cloud necessaria all’esecuzione di una data applicazione rimane attiva anche quando quest’ultima non è in uso.

Diversa cosa accade nell’ambito di un’architettura serverless, dove le applicazioni vengono avviate solo quando occorre.

Nel dettaglio, nel momento in cui un evento attiva l’esecuzione del codice, il provider di cloud pubblico assegna le risorse per quel codice e l’utente paga il servizio solo fino alla fine dell’esecuzione.

L’unica sfida, per l’utente, è integrare il proprio software – o la propria logica – nelle strutture cloud noleggiate. Il richiamo di queste funzioni si attiva in modo asincrono (tramite eventi) o in modo sincrono, ossia in base al classico modello client-server.

Nel primo caso (asincrono) si ha il vantaggio di impedire un accoppiamento eccessivo delle singole funzioni e di mantenere basso il fabbisogno di risorse durante l’esecuzione del programma.

Nella variante classica (sincrona), il client deve sempre inviare una richiesta separata al server, per richiamare una funzione corrispondente per la creazione della miniatura.

Questo schema, oltre agli intuibili vantaggi sotto il profilo dei costi, evita agli sviluppatori quelle attività di routine necessarie ad assicurare la scalabilità delle applicazioni, oltre alle operazioni per mezzo delle quali il server viene predisposto per essere utilizzato.

Serverless computing - concept dell'architettura
Serverless computing – concept dell’architettura

In sintesi, il serverless computing permette di demandare al provider di servizi cloud la gestione del sistema operativo e del file system, così come l’applicazione delle patch di sicurezza, la gestione della scalabilità, la registrazione e il monitoraggio.

Inoltre, nelle soluzioni serverless il provider di servizi cloud esegue i server fisici e ne destina le risorse per conto dell’utente, il quale può eseguire il deployment del codice direttamente nell’ambiente di produzione.

Vantaggi e svantaggi del serverless computing

In grado di velocizzare il rilascio delle applicazioni laddove vi è l’esigenza di elevate potenze di elaborazione “on demand” al verificarsi di determinati eventi, le soluzioni serverless rappresentano un’evoluzione nell’ambito dei servizi cloud.

Tra i vantaggi – come evidenzia Forrester – vi è la riduzione dei costi relativi sia allo sviluppo che all’utilizzo dei servizi in produzione, dovuti all’aumento della velocità di sviluppo del codice e alla riduzione degli oneri correlati al provisioning delle risorse.

Se nel cloud computing tradizionale, è previsto il pagamento delle risorse in esecuzione anche quando queste non vengono utilizzate, nel serverless computing, quando il codice dell’applicazione non è in esecuzione, non viene addebitato alcun costo.

Come accennato, l’approccio serverless libera gli sviluppatori dalla necessità di gestire l’infrastruttura, potendosi così concentrare sulla qualità del prodotto da realizzare piuttosto che sul funzionamento e sulla gestione dei server.

E l’accesso “on demand” all’elaborazione risolve la necessità di potenza di carichi molto elevati come, ad esempio, nelle simulazioni in ambito finanziario e nell’analisi in tempo reale di grandi quantità di dati.

Tra gli altri vantaggi del serverless computing, la scalabilità automatica e l’ottimizzazione dell’uso delle risorse. Riguardo, nello specifico, a quest’ultimo punto, poiché le risorse di elaborazione e di storage vengono assegnate in modo dinamico, non è più necessario investire preventivamente in ulteriori risorse e capacità.

Aspetti positivi e vantaggi a parte, l’adozione di soluzioni serverless presenta anche alcuni limiti.

La possibile perdita di performance è uno di questi. Il che significa che se il codice non viene utilizzato di frequente, potrebbero presentarsi problemi di latenza durante la sua esecuzione.

E questo perché, nel modello serverless – se il codice non viene utilizzato – il cloud provider spesso non assegna completamente le risorse, creando in questo modo latenza nella fase di start qualora l’esecuzione richieda un certo lasso di tempo per l’avvio.

Il fatto, poi, di non seguire i server internamente e di non controllarne la logica, comporta alcuni svantaggi. Il primo vede i fornitori di servizi cloud imporre vincoli severi all’interazione con i propri componenti, limitando così la flessibilità e la personalizzazione dei sistemi da parte dell’utente.

Un esempio? Nel caso di ambienti BaaS – Back-up-as-a-Service, può accadere che gli sviluppatori siano vincolati a servizi di cui non riescono a controllare il codice. Questo è un fattore di cui tenere conto. Se si decide di cambiare provider, infatti, si potrebbe essere costretti a eseguire l’upgrade di tutti i sistemi per rispettare le specifiche definite dal nuovo fornitore.

Gli ambiti applicativi

Iniziamo col dire che non tutte le applicazioni sono adatte al paradigma serverless computing. I limiti ai quali si è accennato in precedenza diventano piuttosto marcati soprattutto quando si ha a che fare con sistemi obsoleti – non sempre facilmente adattabili alle nuove tecnologie – o con sistemi troppo complessi, che rischierebbero di fare aumentare sensibilmente i costi.

Senz’altro, il fatto di potere utilizzare le risorse solo nel momento in cui se ne ha bisogno, rendono le soluzioni serverless modelli particolarmente flessibili e attraenti per le aziende.

L’architettura serverless, inoltre, è perfetta per quelle applicazioni stateless asincrone che possono essere avviate istantaneamente, oltre che per gli scenari di utilizzo che comportano picchi di domanda improvvisi e imprevedibili.

Le app serverless sono anche adatte agli scenari di utilizzo che prevedono flussi di dati in entrata, l’integrazione di assistenti linguistici digitali e chatbot e logica di business.

Altri scenari di utilizzo comuni del modello includono le app web, l’automazione dei processi di business, i siti web severless e l’integrazione fra più sistemi.

Sempre più spesso, poi, il serverless computing viene utilizzato anche per costruire e gestire l’intero back end di un’applicazione sul cloud, scenario per il quale viene spesso utilizzata l’espressione Backend-as-a-Service (BaaS).

L’infrastruttura serverless, inoltre, rappresenta uno strumento potente quando si tratta di elaborare big data – parte integrante ormai di numerosi contesti aziendali – che è in grado di transcodificare, combinare e manipolare, sia in forma strutturata che non strutturata.

Quando, poi, le funzioni vengono eseguite secondo una pianificazione definita, grazie alla tecnologia serverless, è possibile ordinare automaticamente i database o creare backup.

Serverless computing - Tag Cloud
Serverless computing – Tag Cloud

Cosa riserva il futuro

Il serverless è un modello di servizio cloud che punta a semplificare l’approccio alla programmazione, liberando il programmatore da tutti quegli aspetti che esulano dalla scrittura del codice.

Il suo utilizzo ha avuto un rapido aumento negli ultimi tre anni, con un tasso di crescita del 700%, e ha tutte le carte in regola per rappresentare, in futuro, una delle principali leve di sviluppo in ambito IT.

Negli anni a venire – come evidenziato dagli analisti di Forrester, sempre nel Report Demystifying Serverless Computing – dobbiamo attenderci numerosi sviluppi, sia per quanto concerne le architetture di severless computing, sia per quanto riguarda i servizi resi disponibili dai fornitori.

Tra le novità attese, vi è la possibilità di soluzioni serverless in container standardizzati. Il che concederebbe agli sviluppatori più controllo e contribuirebbe a evitare rapporti di dipendenza col proprio fornitore.

Un altro miglioramento atteso riguarda, invece, il supporto nelle transazioni distribuite o gestite in blockchain. La blockchain – lo ricordiamo – si coniuga molto bene con le caratteristiche di storage, comunicazione ed elaborazione distribuita proprie del serverless computing, naturalmente a patto di possedere le funzioni per controllare l’integrità di tutte le transazioni.

Sempre secondo Forrester, il modo migliore, in futuro, per sperimentare il serverless computing sarà nell’ambito del public cloud. E, a tale proposito, consiglia di identificare le migliori offerte dei provider con cui si hanno già rapporti oppure di scegliere in base alla disponibilità dei supporti utili per la gestione eventi.

In vista dello sviluppo futuro delle procedure serverless, potrà, infine, essere vantaggioso inserire fin da subito le capacità di generare eventi nelle applicazioni già in sviluppo con modalità tradizionali.