Tra le buzzword più recenti del mondo IT, il serverless computing, talvolta chiamato anche FaaS da “function as a service”, accompagna un nuovo interessante approccio nella realizzazione del software applicativo che si sposa molto bene con la natura dei servizi cloud.
Serverless computing, una definizione sintetica
Con serverless computing si intende un modello di sviluppo cloud nativo che permette agli sviluppatori di creare e rendere eseguibili le applicazioni senza gestire i server, o meglio, i server vengono utilizzati ma sono astratti dallo sviluppo delle app. In pratica, con il serverless computing si delega a un vendor l’esecuzione del codice lato server.
Cos’è il serverless computing o Faas
Mentre da una parte DevOps cerca di riunire lo sviluppo con le operation, FaaS e serverless mantengono i due aspetti distinti, caratterizzandosi per la filosofia operativa che si basa sull’esecuzione di differenti funzioni in risposta a eventi asincroni che coinvolgono sorgenti dati distribuite.
Le applicazioni del serverless/Faas hanno oggi un grande potenziale nell’integrazione di molti servizi periferici o cloud laddove, per esempio, ci siano da elaborare le segnalazioni automatiche da sistemi IoT. Per contro, l’approccio appare ancora immaturo nelle applicazioni business anche se potrebbe essere solo una questione di tempo e maturazione.
Demystifying serverless computing
Seguono i principali highlight di un report Forrester di qualche tempo fa dal titolo Demystifying serverless computing.
Serverless rappresenta un passo avanti nel campo dei servizi cloud perché riesce a velocizzare il rilascio delle applicazioni laddove sono richieste alte potenze d’elaborazione “on demand” al verificarsi di specifiche condizioni. Esempi di serverless computing sono oggi forniti da Amazon AWS Lambda, Google Cloud Foundation, Microsoft Azure Functions, Fx OpenWisk oltre che da progetti open source come Riff. Lo sviluppatore non dove preoccuparsi del provisioning, dei server o delle configurazioni dell’infrastruttura, ma solo di creare funzioni che possano operare in modo indipendente dalle applicazioni (l’interazione è mediata da API o toolkit di sviluppo). Poiché la logica d’esecuzione non dipende dallo stato dei sistemi, è possibile avviare un gran numero di istanze in parallelo; ogni servizio serverless si avvia e si arresta automaticamente a richiesta, usando la potenza elaborativa di cui ha bisogno in modo trasparente agli sviluppatori. L’esecuzione, isolata dal resto, per essere utile, dev’essere integrata nelle applicazioni d’impresa esistenti e con altri servizi che leggono e scrivono dati. Gli eventi costituiscono il punto di collegamento e insieme il linguaggio d’interazione che è caratteristico della logica serverless.
I vantaggi del serverless computing per le applicazioni business
Lo sviluppo in ambiente serverless ricalca quello di un’architettura software di tipo “losely coupled” (dove un modulo non dipende da altri per funzionare) e aiuta gli sviluppatori a velocizzare i rilasci e ad adottare il disegno a microservizi nell’innovazione delle applicazioni. Tra i maggiori vantaggi di business associati con la logica dei servizi serverless c’è il fatto che il costo, misurato in frazione di centesimi, è calcolato per ogni esecuzione del codice, estremizzando il modello pay-per-use del cloud a vantaggio, in particolare, delle sperimentazioni e prototipazioni. Benché sia possibile usare l’approccio serverless con più job concatenati tra loro, gli sviluppatori possono sfruttare gli eventi e la messaggistica asincrona per lanciare tante procedure in parallelo, per esempio, laddove le funzioni devono servire un numero imprecisato di utenti. Se da una parte gli sviluppatori hanno la possibilità di scrivere il codice di “aggancio” delle funzioni serverless con gli eventi, dall’altra i fornitori di servizi propongono opzioni prefabbricate per le esigenze più comuni, come l’accesso allo storage o per collegare le API più diffuse.
L’approccio basato su eventi è funzionale alle architetture distribuite, quindi a servizi che operano in luoghi diversi e sotto differenti autorità. Secondo Forrester, se propriamente usato, l’approccio serverless riduce i costi sia dello sviluppo sia dell’utilizzo dei servizi in produzione. Questo perché aumenta la velocità di sviluppo del codice e riduce gli oneri connessi con il provisioning delle risorse nelle fasi di prototipazione. L’architettura è ideale per espandere le applicazioni esistenti in nuove direzioni, e segnatamente dove serve integrare differenti Web service in job complessi. Per esempio, può essere impiegata per raccogliere eventi e dati derivanti dalle interazioni degli utenti con i servizi online, unirli con altri dati rilevanti, elaborarli e quindi restituire all’utente altre informazioni tramite e-mail o SMS. Altra possibilità riguarda l’elaborazione di eventi del mondo reale, come i guasti ai macchinari di una linea di produzione o le segnalazioni d’emergenza. Il modello di calcolo dei costi d’uso associati ai servizi serverless è ideale laddove serva gestire le risposte ad eventi di frequenza non prevedibile come le interazioni con clienti o le segnalazioni inviate da dispositivi IoT.
I vantaggi del serverless computing per gli sviluppatori
Come abbiamo accennato, l’approccio serverless libera gli sviluppatori dalla necessità di gestire l’infrastruttura, quindi di occuparsi delle prestazioni al di là dei limiti contrattuali imposti dal fornitore del servizio. L’accesso “on demand” all’elaborazione risolve le necessità di potenza di carichi molto impegnativi come simulazioni in ambito finanziario, analisi in tempo reale di grandi moli di dati. Gli sviluppatori che hanno già utilizzato istanze di cloud pubblico per ottenere potenza elaborativa più velocemente e con minori costi rispetto ai servizi del data center troveranno gli ambienti serverless molto più efficaci e flessibili nella scalabilità, con servizi pagati in funzione dell’uso e non per le istanze dormienti che attendono d’essere avviate. Secondo Forrester, il modello è ideale per sperimentare nuove app rivolte al pubblico, o comunque laddove sia impossibile prevedere il successo e quindi la domanda di risorse. L’architettura serverless aiuta gli sviluppatori a prepararsi per un futuro vicino in cui il loro lavoro sarà quello di assemblare componenti, collegarli nell’elaborazione e nell’esecuzione, senza la necessità di mettere mano all’intera applicazione. Tutto questo sperimentando i vantaggi (e i rischi) connessi con il disegno del software a microservizi.
Cosa attendersi per il futuro in ambito serveless
Secondo gli analisti di Forrester, dobbiamo aspettarci ulteriori sviluppi sia sul fronte delle severless computing architecture sia dei servizi offerti dai fornitori, molto al di là dei primi “database as-a-service”. Tra le diverse possibilità c’è quella di far girare soluzioni serverless in container standardizzati, capaci di dare agli sviluppatori più controllo, ma anche di evitare il lock-in nei riguardi del service provider. L’integrazione tra servizi ospitati su cloud diversi, già oggi uno dei campi d’impiego per il serverless computing, potrà avvantaggiarsi nel lungo termine dalla definizione di nuovi standard nella gestione degli eventi presso la Cloud Native Computing Foundation.
Altro miglioramento atteso è il supporto per le transazioni distribuite o gestite in blockchain. La blockchain si sposa molto bene con le caratteristiche di storage, comunicazione ed elaborazione distribuita supportate dal serverless computing a patto ovviamente di avere le funzioni per controllare l’integrità delle transazioni. Se da una parte l’approccio serverless scherma agli sviluppatori i problemi infrastrutturali che continuano ad affliggere chi opera con DevOps, dall’altra non maschera l’esigenza di conoscere alcuni aspetti operativi di alto livello, per esempio per garantire i tempi di risposta ad eventi IoT, la collocazione geografica dei dati e la sicurezza.
Come e dove sperimentare i nuovi servizi
Secondo Forrester il modo migliore per sperimentare il serverless computing è nel public cloud, cercando tra le offerte Faas dei provider con cui si hanno già rapporti oppure scegliendo in base alla disponibilità dei supporti utili per la gestione eventi. Altro aspetto importante è la selezione del progetto più adatto per essere prototipato come servizio serverless. Per questo conviene partire da IoT, software che supporta carichi di lavoro di scala molto variabile o applicazioni distribuite che devono reggere un numero imprevedibile di richieste utenti. Il serverless computing può rivelarsi l’opzione più economica per far girare job episodici di tipo batch. In vista dello sviluppo futuro delle procedure serverless potrà essere vantaggioso inserire fin da subito le capacità di generare eventi nelle applicazioni già in sviluppo con modalità tradizionali.