La premessa d’obbligo per capire cos’è il serverless computing è non considerare il significato letterale del termine perché, nonostante il nome, si tratta di un ambiente di sviluppo in cui i server ci sono. Il punto è che però non sono i protagonisti, in quanto il serverless computing è un modello di sviluppo cloud native, che consente di progettare e distribuire applicazioni tramite logiche event-driven, semplificando il compito dello sviluppatore.
Sia le risorse hardware, sia quelle software necessarie per eseguire un’applicazione sono presenti nell’infrastruttura IT del provider di servizi cloud; perciò, allo sviluppatore è richiesto soltanto di creare un software, senza dover considerare l’infrastruttura IT.
Scrittura del codice e ottimizzazione della logica di business sono i due focus dello sviluppatore nell’ambito del serverless computing, che non prevede il dovere di gestire i server. In quest’ottica, l’architettura serverless ha cambiato radicalmente la modalità con cui le aziende sviluppano e distribuiscono applicazioni e servizi, sfruttando un modello di esecuzione del cloud computing dove è il cloud service provider a gestire l’allocazione e il provisioning dei server. Nel considerare una piattaforma serverless, le peculiarità da valutare sono le prestazioni, la scalabilità, la sicurezza e l’efficienza dei costi. Anche perché l’architettura serverless è una soluzione ideale per diversi scenari applicativi: dalle app web al backend IoT, è una scelta che assicura efficienza e convenienza. Per tale motivo, laddove in termini di sviluppo bisogna gestire singoli eventi, che non necessitano della personalizzazione degli ambienti, l’architettura serverless emerge come un modello perfetto.
Quanto espresso finora fa capire come il serverless computing sia disponibile con un modello a servizi. Ci sono diverse tipologie e la più diffusa è l’offerta FaaS (Function-as-a-Service), che si differenzia dal paradigma BaaS (Backend-as-a Service). Quest’ultimo permette agli sviluppatori di effettuare un outsourcing di tanti elementi nel backend di un’applicazione, sia web che mobile. Si basa perciò su servizi raggiungibili da remoto, che sfruttano API e SDK, per agevolare l’attività delle aziende in termini di crittografia, gestione del database e sistemi di autenticazione degli utenti.
Seppur simile come approccio e compiti dello sviluppatore, nel FaaS c’è un maggior controllo in confronto al BaaS; utilizzare il primo significa scrivere il codice e lanciare l’esecuzione della funzione, perché non serve la conoscenza di tecniche di deployment o la configurazione in reti di calcolatori, compiti che rientrano nella gestione del provider.
Nel complesso, quindi, ci sono varie differenze tra FaaS e BaaS, a partire dalla modalità di attivazione del servizio, che nel primo caso prevede una risposta in reazione a un evento e un environment effimero, realizzato tramite tecnologia a container per ridurre i costi e i tempi relativi alle risorse utilizzate.
Un’altra divergenza tra i due modelli concerne la progettazione di un’app, che nel FaaS è il risultato di molteplici funzioni che interagiscono ad eventi, mentre nel BaaS determina tutto il provider e allo sviluppatore non serve conoscere neppure la struttura.
Grazie al crescente successo, il panorama delle piattaforme serverless continua ad evolvere e offrire diverse opzioni. Soprattutto ad essere utilizzato per implementare in maniera efficace tecnologie emergenti come l’IA, che si sposano bene con il cloud. Dal punto di vista applicativo, il serverless computing è indicato per realizzare:
Tra i fornitori stanno emergendo player alternativi ai più datati; dell’ultimo gruppo fanno parte Amazon Web Services Lambda (2014), Microsoft Azure Functions (2016) e Google Cloud Functions (2017), nel primo rientrano invece IBM Cloud Functions e Alibaba Cloud Functions Compute.
AWS Lambda è un servizio di elaborazione serverless che esegue il codice in risposta a eventi e gestisce automaticamente le risorse di elaborazione sottostanti. Ecco alcuni casi d'uso.
Questi sono solo alcuni esempi di come AWS Lambda può essere utilizzato. La sua flessibilità e scalabilità lo rendono una soluzione ideale per un'ampia gamma di casi d'uso, consentendo alle aziende di creare applicazioni e servizi efficienti, affidabili e convenienti.
Già dalle righe precedenti si possono intuire parte dei vantaggi e degli svantaggi inerenti all’utilizzo del serverless computing. Vediamoli meglio, partendo dai primi.
Il primo e più immediato beneficio legato al ricorso del serverless computing è l’incremento della produttività nello sviluppo delle applicazioni. Non dovere occuparsi di configurare server e piattaforme, permette agli sviluppatori di focalizzarsi interamente sulla programmazione; un aspetto che si traduce in una riduzione del tempo necessario per arrivare al risultato finale.
Da una parte c’è l’immediata disponibilità delle risorse IT necessarie per eseguire le funzioni previste dagli sviluppatori, dall’altra la possibilità di chiudere tante istanze nello stesso istante. Due dinamiche diverse della stessa medaglia, quella della flessibilità che rende le piattaforme serverless computing in grado di adattarsi alle necessità del momento.
Non è subito visibile perché è il cloud service provider a gestire l’allocazione delle risorse, tuttavia, come spiegato in precedenza, la scalabilità dei servizi è uno dei vantaggi più evidenti e convenienti del serverless computing.
Per le aziende che vogliono pianificare un investimento per sviluppare applicazioni spendendo soltanto per ciò di cui si ha necessità, il serverless computing è la soluzione ideale. Anche in questo caso torna d’attualità l’impossibilità della gestione dell’infrastruttura, di cui si occupa il cloud service provider, lasciando al cliente le risorse di cui necessita. Le uniche che deve pagare.
Non dover configurare nulla implica anche degli svantaggi per il cliente, perché i provider di servizi cloud possono determinare vincoli all’interazione con i loro componenti, oppure limitare la flessibilità e personalizzazione del sistema.
Strettamente connesso a quanto detto sopra è l’obbligo di restare legato alle tecnologie di un vendor. È l’aspetto negativo del voler delegare il controllo dell’ambiente IT, che assicura la riduzione dei costi operativi ma può far emergere vincoli difficilmente aggirabili. Perché dover cambiare provider significa spendere più denaro per rispettare le specifiche previste dal nuovo fornitore.
Potenziale enorme per emergere come uno standard di riferimento per lo sviluppo di applicazioni, a patto di riuscire a superare alcuni ostacoli. È il futuro cui appare destinato il serverless computing, un modello elaborativo che ha determinato un cambiamento rilevante nella creazione e distribuzione delle applicazioni cloud native da parte degli sviluppatori.
La scalabilità automatica combinata alla mancata gestione dell’infrastruttura offre un modello conveniente ed efficace che permette alle aziende di generare innovazione in maniera più rapida rispetto al passato. Ciò significa poter recuperare un gap con i competitor, oppure conquistare una posizione di vantaggio rispetto ai concorrenti.
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.