Cos’è il serverless computing e quali vantaggi comporta
Nel parco degli ambienti di sviluppo, l’approccio al serverless computing si prospetta quale una tecnologia cloud native in grado di rivoluzionare il rapporto tra l’utente finale e le risorse necessarie per eseguire e rendere disponibile una determinata applicazione.
Per molti versi si tratta di un’opportunità unica per rendere agile e flessibile lo sviluppo di un software (qui la classifica dei linguaggi di programmazione più diffusi), ma l’approccio full-stack che viene impiegato tuttora da moltissime realtà può costituire al tempo stesso una barriera alla sua implementazione, o al suo corretto sfruttamento.
Vediamo dunque cosa si intende per serverless computing, come è possibile avvalersi di questo nuovo paradigma in cloud e quali sono gli inevitabili pro e contro di cui è necessario tenere conto quando si tratta di investire concretamente tempo e risorse in questa tecnologia.
Cos’è il serverless computing
Il serverless computing è un paradigma per la progettazione e la distribuzione di applicazioni basato su logiche event-driven, disponibile in cloud, che rende del tutto trasparente allo sviluppatore l’infrastruttura IT necessaria per l’esecuzione. A dispetto di quanto il nome potrebbe suggerire, non si tratta assolutamente di un ambiente di sviluppo privo di un server.
Le risorse hardware e software necessarie per eseguire le applicazioni sono sempre presenti nell’infrastruttura IT del provider cloud (qui la mappa dei Data Center in Italia). Ciò che varia è il modo con cui vengono rese disponibili, in modo da svincolare lo sviluppatore dalla configurazione delle risorse necessarie per eseguire i carichi di lavoro previste dalle varie fasi del ciclo di vita del software.
In altri termini, lo sviluppatore (qui la guida per sapere chi sono gli sviluppatori software, ISV) può preoccuparsi soltanto di fare il suo lavoro: sviluppare un software, e di farlo nel modo migliore, senza dover tenere conto dell’infrastruttura. Nel corso del successivo paragrafo vedremo infatti quali sono i principi generali che regolano il funzionamento del serverless computing.
Un aspetto determinante dell’approccio serverless è quello di consentire a tutte le realtà aziendali, a prescindere dalla loro dimensione e dall’appartenenza ad un determinato segmento verticale dell’industria, di modernizzare drasticamente la pipeline di sviluppo delle loro applicazioni, favorendo in maniera evidente il loro percorso di trasformazione digitale.
L’approccio serverless nasce per favorire la produttività riducendo gli oneri di gestione, sia per quanto riguarda l’aspetto tecnologico che per quanto concerne i risvolti di natura amministrativa e contabile.
Come funziona l’architettura serverless
A differenza di quanto avviene in ambienti di sviluppo in cloud basati sul IaaS (Infrastructure-as-a-Service) o sul PaaS (Platform-as-a-Service) gli sviluppatori non devono occuparsi direttamente della configurazione e del mantenimento delle infrastrutture e delle piattaforme software necessari per il runtime delle loro applicazioni. Tale onere è assunto direttamente dal cloud service provider (CSP) che mette a disposizione una soluzione basata sul serverless computing.
Il serverless computing, come la maggior parte delle soluzioni cloud, è disponibile con un modello a servizi. In particolare è ormai frequente incontrarlo nelle offerte FaaS (Function-as-a-Service) o RaaS (Runtime-as-a-Service), le cui funzionalità sono rese piuttosto esplicite dai nomi stessi.
Il modello serverless risulta dunque perfetto quando si tratta di gestire, anche in grandi numeriche, dei singoli eventi a livello di sviluppo, che non richiedono una notevole esigenza in termini di personalizzazione degli ambienti, in favore di una grande velocità e scalabilità. Ciò è possibile grazie al fatto che lo sviluppatore scrive il codice necessario per eseguire una funzione specifica, utilizzando qualsiasi linguaggio di programmazione e quando si verifica l’evento predefinito la piattaforma serverless provvede alla sua esecuzione.
A questo punto sarà compito del cloud service provider occuparsi di allocare le risorse necessarie, gestendo inoltre le API necessarie per interfacciare in modo corretto la funzione da eseguire. Tale processo avviene in maniera del tutto trasparente per lo sviluppatore, che non vede assolutamente nulla di ciò che accade “dall’altra parte”. Il provisioning delle risorse IT avviene con logiche e procedure ad elevata automatizzazione.
Grazie al serverless computing gli sviluppatori possono creare codice, applicazioni back-end e gestire vari sistemi di elaborazione dei dati, senza preoccuparsi di server, macchine virtuali o qualsivoglia risorsa di calcolo sottostante. Siamo quindi nell’ambito del cloud native più puro, in cui tutto ciò che può essere gestito automaticamente in cloud, viene gestito automaticamente in cloud.
Lato utente, tra le principali funzionalità del serverless computing spicca un approccio “zero server”, grazie alla scalabilità automatica che alloca le risorse sulla base dei carichi di lavoro eseguiti.
Lato server, il CSP si fa carico di quanto concerne l’infrastruttura IT e la sua gestione, ivi compresi gli aspetti legati alla sicurezza e alla protezione dei dati. Il serverless computing è costituisce dunque un approccio molto particolare, ottimale per certe applicazioni, poco conveniente per altre. Vediamo dunque quali sono i principali vantaggi e svantaggi che conseguono dalla sue implementazione.
I vantaggi del serverless computing
Tra i principali vantaggi derivanti dall’adozione del serverless computing possiamo individuare i seguenti aspetti.
Pay-per-use puro
Grazie all’allocazione automatica delle risorse, le piattaforme serverless sono in grado di contabilizzare soltanto le risorse effettivamente impiegate da un cliente per eseguire le proprie funzioni. Si tratta di un “tassametro” molto preciso, che estremizza uno dei concetti fondamentali del cloud, che consiste nel pagare soltanto per ciò di cui si necessita. Tale logica è presente ovviamente anche nelle soluzioni IaaS e PaaS ma con una differenza fondamentale.
Pur in un contesto di generale scalabilità, quando si “noleggia” un’infrastruttura o una piattaforma virtuale in cloud, si chiede la disponibilità di un certo quantitativo di risorse IT. Anche se si tratta di entità virtuali, non collocate fisicamente all’interno dei propri data center, tali risorse vengono assegnate al cliente, che paga anche nel caso in cui queste dovessero rimanere sottoutilizzate. Nel caso del serverless computing questo problema non si verificherà mai, perché il cliente non ha visibilità della parte di infrastruttura, che viene gestita in maniera totalmente automatica dal cloud service provider.
Se un’azienda vuole pagare effettivamente per ciò di cui necessità, il modello serverless computing, almeno per quanto concerne lo sviluppo delle applicazioni, rappresenta senza dubbio l’alternativa in grado di restituire il risultato più tangibile.
Scalabilità “trasparente”
Uno dei principali vantaggi delle soluzioni cloud è data dalla loro scalabilità intrinseca. Il serverless computing supera qualsiasi vincolo o connotazione specifica di un’offerta in cloud pubblico in un cloud privato. La scalabilità dei servizi, come abbiamo avuto modo di precisare in più di una circostanza, non è in alcun modo visibile al cliente se non riepilogo contabile che ne deriva, in quanto l’allocazione delle risorse ricade totalmente in capo alla piattaforma di gestione del cloud service provider.
Allocazione rapida delle risorse
La pronta disponibilità delle risorse IT necessarie per eseguire le funzioni scritte dagli sviluppatori rende possibile l’implementazione di una grande quantità di carichi di lavoro praticamente in un ridottissimo lasso di tempo. La stessa logica vale anche in senso inverso, quando si tratta di cessare molte istanze in contemporanea. Le piattaforme serverless risultano quindi estremamente flessibili nell’adattarsi a qualsiasi circostanza in cui la rapidità di attivazione di un servizio costituisce una qualità fondamentale.
Maggior efficienza nello sviluppo
Il fatto di poter del tutto trascurare qualsiasi aspetto legato alla configurazione di server o piattaforme di varia natura consente agli sviluppatori ci concentrarsi esclusivamente sulla programmazione. Si tratta di un vantaggio non da poco, soprattutto per le applicazioni caratterizzate da un breve ciclo di vita e un ridotto livello di accoppiamento, in cui il tempo speso sulla configurazione degli ambienti di runtime inciderebbe in maniera sensibile nell’economia del progetto. Variando il punto di vista, il medesimo vantaggio si traduce nella possibilità di ridurre sensibilmente il tempo di sviluppo di certe applicazioni, anche nell’ordine di differenti ordini di grandezza.
Gli svantaggi
Quando si valuta il ricorso ad una piattaforma di serveless computing è indispensabile tenere conto di alcune inevitabili criticità, per capire se sono tollerabili sulla base delle nostre specifiche esigenze.
Lock-in
Il principale rischio legato al serverless computing è quello di rimanere vincolati alle tecnologie di uno specifico vendor, il che renderebbe piuttosto complessa la portabilità delle proprie applicazioni verso altre piattaforme. Ormai tutti i principali CSP hanno nel proprio portfolio cloud una piattaforma serverless, in grado di eseguire una gamma molto ampia di funzioni.
Nel 2014 Amazon AWS Lambda ha aperto le danze, caratterizzandosi quale offerta FaaS dell’ecosistema Amazon Web Services. Gli altri due principali giganti del cloud hanno risposto in tempi relativamente brevi. Nel 2016 ha visto il proprio esordio Microsoft Azure Functions, mentre l’anno seguente è arrivato Google Cloud Functions.
Se noi implementassimo alcune applicazioni su AWS Lambda non sarebbe semplice trasferirle successivamente su altri ecosistemi, in quanto la piattaforma di Amazon è implementata con tecnologie proprietarie, che differiscono da quelle di Microsoft e Google, anche nel caso in cui siano in grado di supportare i principali linguaggi di programmazione utilizzati per scrivere le funzioni, come Java, Javascript (Node.js), Python, Go, Ruby e molti altri.
Tale limite strutturale nell’interoperabilità non costituisce di per sé una criticità eccessiva, se consideriamo che il serverless computing dà il meglio di sé con applicazioni caratterizzate da un ciclo di vita relativamente breve e un ridotto livello di accoppiamento. Il fatto che tutti i principali CSP dispongano ormai di una piattaforma serverless consente il più delle volte di rimanere comodamente all’interno dell’ecosistema utilizzato per altre soluzioni cloud, godendo pertanto di tutti i vantaggi dell’integrazione che un provider è in grado di garantire attraverso l’impiego delle tecnologie proprietarie.
Lo stesso concetto vale quando si utilizzano applicazioni di terze parti, che vengono sovente implementate soltanto per una specifica piattaforma serverless, per via delle notevoli differenze tecnologiche che insistono tra esse. Se un team di sviluppo adottasse una pipeline di tool in grado di automatizzare un gran numero di funzioni su AWS Lambda, risulterebbe piuttosto complesso adattare la medesima pipeline sulla piattaforma di un altro provider.
Scarsa possibilità di personalizzazione
Le piattaforme di serverless computing, per la loro natura intrinseca, non consentono di avere visibilità dell’infrastruttura IT che le supporta. Gli utenti non possono quindi configurare praticamente nulla, ragion per cui scegliere il serverless potrebbe apparire una scelta poco saggia qualora si abbia in previsione un’applicazione caratterizzata da un ciclo di vita piuttosto lungo. Tale eventualità rende spesso preferibile avvalersi di un PaaS anziché di un FaaS, anche in termini di costi di esercizio, oltre che di controllo tecnico.
Latenza iniziale
Quando una funzione viene eseguita per la prima volta, è normale che vi sia una certa latenza, dovuta a molti fattori, sostanzialmente riassumibili nel fatto che una piattaforma scalabile in maniera automatica deve capire come è strutturata la funzione, quali risorse occorrono per eseguirla e di conseguenza allocarle in maniera corretta. Il fatto che ogni istanza serverless venga ridefinita da zero rende inoltre meno immediate le procedure di debug, in quanto non risulta una disponibilità immediata dello storico di dati dell’applicazione. Tali limiti sono parzialmente ovviabili con vari stratagemmi, ma costituiscono un fattore intrinseco della tecnologia.
Complessità nell’implementazione
Uno dei principi fondamentali del minimalismo prevede che tanto una soluzione è più semplice per l’utente finale, tanto questa sarà più complessa da costruire. Tutto ciò che l’utente non vede, va infatti risolto a priori per poterlo nascondere senza costituire limitazioni funzionali. Non devono esserci errori di sorta, per cui un sistema di serverless computing efficiente deve prevedere, se non tutte, almeno la maggior parte delle operazioni che le funzioni caricate dagli sviluppatori gli chiederanno di eseguire.
La crescente varietà delle tecnologie legate allo sviluppo software rende questo processo via via sempre più complicato da soddisfare da parte dei cloud service provider, chiamati ad una continua rincorsa per garantire scenari compatibili e trasparenti nel loro utilizzo.
Gli ambiti applicativi
Il serverless computing è un ambito per certi versi ancora emergente nel panorama dello sviluppo in cloud, ma può già contare su un’ampia implementazione in vari ambiti applicativi. Il paradigma del serverless computing si sposa bene con i contesti cloud native delle applicazioni di moderna concezione, formate da componenti disaccoppiate, distanti dalla concezione monolitica del software tradizionale.
Gli scenari serverless consentono di implementare in maniera molto efficaci alcuni tecnologie emergenti che trovano la propria principale espressione in cloud, come l’Intelligenza Artificiale e il Machine Learning. Tra le applicazioni sviluppate grazie al supporto del serverless computing ritroviamo:
- Applicazioni Web
- Applicazioni IoT
- Applicazioni Blockchain
- Elaborazione dei dati strutturati e non strutturati (Big Data & Analytics)
- Servizi di backend (Backend-as-a-Service)
- Importazione di eventi
- Chatbot e assistenti virtuali
- Sistemi di backup automatico
- Gestione automatizzata dei database
- Proxy API
Le possibili evoluzioni future
Volgere uno sguardo verso il futuro del serverless computing equivale a prendere atto che questa dimensione del cloud ha di fronte a sé un enorme potenziale, ma anche una serie di ostacoli da superare prima di diventare uno standard vero e proprio nell’ambito dello sviluppo delle applicazioni.
Il serverless computing è per certi aspetti paradossale. Da un lato rende più semplice lo sviluppo delle applicazioni, ma questo discorso vale soltanto per le applicazioni cloud native. Se si parla di migrazione, il lavoro preparatorio comporta una riprogettazione spesso complessa e ancor più spesso poco conveniente da effettuare. Anche interfacciare applicazioni serverless con i database esistenti può costituire un aspetto tutt’altro che agevole da sostenere.
Come abbiamo visto, la natura effimera dell’architettura serverless, esalta il concetto di istanza, ma risulta problematica nel caso in cui si preveda una sostenuta attività di monitoraggio e debugging ad esempio per quelle applicazioni caratterizzate da continui cicli CI/CD. Va precisato che si tratta comunque di limiti attuali, in quando certamente le tecnologie serverless evolveranno per rendersi sempre più utili anche nei confronti dei contesti operativi appena citati.
Come sempre, quando si tratta di implementare per la prima volta una nuova tecnologia in cloud, la politica dei piccoli passi potrebbe rivelarsi la migliore. Una volta selezionata un’applicazione di riferimento, potrebbe essere utile identificare i componenti caratterizzati da un buon livello di disaccoppiamento e provare ad eseguirla in ambiente serverless. Se l’iniziativa si dimostra in grado di restituire i vantaggi che abbiamo citato nel corso dei precedenti paragrafi, sarà sempre più semplice motivare e sostenere una crescente modernizzazione basata sul serverless computing.
Un documento molto utile per inquadrare gli scenari evolutivi di questa tecnologia esclusiva del cloud è senza dubbio Demystifing Serverless Computing, pubblicato da Forrester. Negli ultimi anni il serverless computing ha avuto un tasso di crescita complessivo nell’ordine del 700%, il che ci offre sia una prospettiva di grande potenziale in ambito IT, sia la relativa gioventù che il mercato di queste applicazioni inevitabilmente comporta.
Le architetture di serverless computing evolveranno per supportare una varietà di funzioni sempre più elevata, con una serie di servizi destinati a facilitarne e rendere sempre più efficiente l’impiego, ad esempio per quanto concerne l’interoperabilità con le principali tecnologie di containerizzazione disponibili.
Tale prospettiva, oltre a facilitare ancora di più lo sviluppo di applicazioni cloud native, incoraggerebbe ulteriormente i processi di migrazione delle applicazioni legacy, sulla base di una pipeline di modernizzazione che prevede una containerizzazione iniziale dei vari componenti che è possibile disaccoppiare e la loro successiva esecuzione su architetture serverless, nella prospettiva di godere dei principali vantaggi offerti da questa tecnologia.
Un crescente supporto ai container standardizzati consentirebbe inoltre in un certo senso una riduzione del lock-in, grazie alla straordinaria portabilità di cui godono i container stessi, qualora ritrovassero sulle piattaforme serverless le applicazioni in grado di eseguirli ed orchestrarli.
Un altro fronte di grande prospettiva è relativo al supporto delle tecnologie emergenti, in particolare per quanto concerne le applicazioni IoT e le applicazioni basate sulla blockchain, la cui natura decentralizzata trova più di una analogia di design con i presupposti del serverless computing.
L’ulteriore sfida sarà rendere questi servizi sempre più disponibili sul cloud pubblico e sempre più interoperabili con le applicazioni tradizionali, sfruttando ad esempio le proprietà di proxy API delle architetture serverless, che consentono di rendere accessibili anche un software piuttosto datato grazie a semplici API REST.