Che cos’è, caratteristiche e utilizzi del Serverless

Che cos’è, caratteristiche e utilizzi del Serverless

Serverless Computing

Il serverless consente di costruire e eseguire applicazioni e servizi senza preoccuparsi dei server. Le applicazioni serverless non richiedono allo sviluppatore di procurarsi, scalare e gestire alcun server. È possibile costruirle per quasi ogni tipologia di applicazione o servizio backend, mentre tutto ciò che serve per eseguire e scalare l’applicazione con alta disponibilità è gestito implicitamente.

In particolare, il serverless include costi strettamente legati ai livelli di utilizzo e un grande focus sulla business logic di un’applicazione, mentre esclude l’approvvigionamento e la gestione dei server, così come il controllo attivo su scalabilità e disponibilità. In sostanza l’approccio serverless consente agli sviluppatori di dedicarsi, non tanto all’infrastruttura, ma al codice, e lo si chiama in questo modo perché agli sviluppatori non interessano le specifiche del server. Naturalmente, i server restano presenti, ma vengono gestiti in tutto e per tutto dai provider cloud, che allocano le risorse necessarie per conto dell’utente, il quale potrà così distribuire il codice direttamente nell’ambiente di produzione. In un modello IaaS standard, l’utente acquista in anticipo unità di capacità, pagando quindi componenti server sempre attivi necessari per l’esecuzione delle applicazioni. Il modello serverless funziona in modo differente: un evento attiva l’esecuzione del codice applicativo, quindi il provider cloud alloca le risorse per tale codice in modo dinamico e all’utente ne viene addebitato l’utilizzo fino al termine dell’esecuzione del codice; dunque il pagamento è calcolato in base al solo tempo di esecuzione e non in base alla quantità di risorse utilizzate. Oltre agli ovvi vantaggi in termini di costo ed efficienza, il metodo serverless evita agli sviluppatori le attività di routine ripetitive associate alla scalabilità delle applicazioni e al provisioning del server.

Che cos'è, caratteristiche e utilizzi del Serverless

FaaS e BaaS

Detto ciò, è certamente fondamentale parlare della precisazione fatta in letteratura dall’autore Paul Johnston, che va a porre una certa distanza tra serverless e FaaS (Function as a Service), due concetti troppo spesso ed erroneamente intercambiati. Il serverless, da un punto di vista più ampio, è tutto ciò che riguarda logiche server-side, eventualmente con mantenimento di stato, realizzate attraverso più servizi separati, in esecuzione su un’infrastruttura invisibile agli occhi dello sviluppatore. Per quanto concerne il rapporto che intercorre tra serverless e FaaS, è più corretto dire che il primo include il secondo, come una delle due modalità principali in cui realizzare il serverless, insieme al paradigma BaaS (Backend as a Service).

Differenza tra FaaS (Function as a Service) e BaaS (Backend as a Service)

Il BaaS consente agli sviluppatori di effettuare un outsourcing di gran parte degli aspetti backend di un’applicazione web o mobile, così che questi debbano soltanto scrivere e gestire la business logic. Nello specifico, i vendor di BaaS forniscono servizi solitamente raggiungibili da remoto tramite semplici API e SDK, che vanno a coprire meccanismi quali la gestione di database, i sistemi di registrazione e autenticazione degli utenti, la crittografia, gli aggiornamenti o le notifiche push. Essendo “plug-and-play”, l’integrazione di tali servizi nei sistemi di un’azienda è estremamente più semplice e, talvolta, più affidabile, rispetto a svilupparli internamente.

Nelle FaaS, l’approccio è simile per quanto riguarda la possibilità dello sviluppatore di concentrarsi sulla scrittura della logica di business, ma prevede un livello di controllo maggiore rispetto al BaaS, poiché tale logica è scritta interamente dallo sviluppatore, al quale però non è richiesta alcuna conoscenza né di configurazione in reti di calcolatori né di tecniche di deployment, lasciando la gestione dell’esecuzione interamente nelle mani del provider. Un utilizzatore finale di FaaS dovrà pertanto scrivere unicamente il codice della funzione e lanciarne l’esecuzione. Il framework sottostante andrà a generare automaticamente un ambiente effimero in cui eseguire questa funzione, distruggendolo poi quando la funzione termina. Il modello di programmazione FaaS è naturalmente ispirato alla programmazione funzionale, in cui si hanno funzioni trattate come entità di prima classe, ovvero considerate alla stregua degli altri tipi di valore, stateless e modulabili, favorendo meccanismi di innestamento e parallelizzazione.

La frequente sovrapposizione che si fa dei modelli FaaS e BaaS non è pertanto lecita, essendo presenti differenze significative. Innanzitutto, una prima distanza viene presa sul modo in cui le applicazioni vengono costruite: se nel mondo FaaS il paradigma impone di progettare un’applicazione come composizione di più funzioni interagenti ad eventi, dall’altro lato si trovano servizi server-side costruiti nel modo che il provider preferisce e sviluppatori che non devono neanche conoscerne la struttura. La seconda importante differenza sta nel momento di attivazione di un servizio, nel senso che le FaaS eseguono in risposta a eventi, altrimenti sono “spente”, mentre i servizi BaaS non sono event-driven e richiedono pertanto molte più risorse server, solitamente attive e in ascolto. In particolare, con le FaaS viene eliminata la necessità di mantenere un’infrastruttura always-on, tipica delle architetture a VM, in favore di environment effimeri, tipicamente realizzabili per mezzo della tecnologia a container, che vengono agilmente creati, distrutti e sostituiti a runtime, abbattendo i costi e i tempi relativi alle risorse utilizzate. Infine, i servizi BaaS non sono progettati per scalare automaticamente a fronte di carichi elevati, aspetto che è invece reputato cruciale in tutte le piattaforme FaaS.

Martin Fowler, figura tra i massimi esperti della programmazione, definisce sinteticamente le Function as a Service come servizi per fare deployment di codice senza affrontare le complessità derivate da architetture distribuite. Dopo una decade di cloud computing, il serverless pone un’evoluzione del paradigma per estremizzare ulteriormente l’immagine di uno sviluppatore che non deve focalizzarsi sull’infrastruttura che mantiene la sua applicazione. Tecnicamente si tratta di funzioni stateless di ridotta dimensione e complessità, eseguite alla ricezione di eventi asincroni o richieste sincrone, misurate in base al tempo di esecuzione e non di allocazione. La possibilità di concentrarsi unicamente sulla business logic, tramite l’utilizzo dei linguaggi di programmazione più diffusi, è, in un certo senso, una rivoluzione, perché permette l’adozione di questa tecnologia a figure professionali quali scienziati, ingegneri, economisti o utenti non esperti di IT che diversamente non potrebbero sfruttare completamente le enormi possibilità offerte dal cloud. Inoltre, in un mondo in cui l’IoT e la connettività sono in crescita esponenziale, il serverless si pone come assoluto protagonista, ottimizzando e garantendo la distribuzione di tali servizi in modo efficiente e automatizzato. Ovviamente sarebbe possibile unire, in una stessa applicazione, l’utilizzo delle FaaS e dei BaaS, in modo da avere un ambiente interamente serverless, ma con il rischio di limitare eccessivamente la flessibilità e la personalizzazione dei sistemi. Inoltre, si potrebbe incorrere nel problema del vendor lock-in, ovvero un accoppiamento troppo stretto con un provider, che rende complessa e costosa l’eventuale decisione di spostarsi su un altro provider.

Il serverless, data la semplicità intrinseca delle operazioni per le quali è utilizzato, non vuole essere il sostituto di ogni piattaforma di cloud computing, ma una funzionalità aggiuntiva. Volendo brevemente ripercorrere le tappe evolutive che hanno condotto i servizi di cloud computing ad evolversi fino al serverless e alle FaaS, si ricorda che:

  1. Il cloud computing, in generale, ha dato la possibilità astrarre la rigidità degli ambienti on-premise.
  2. Le IaaS hanno dato una spinta verso l’idea di data center virtualizzati, astraendo l’infrastruttura e ottenendo ottimi livelli di scalabilità, andando ad allocare risorse virtuali.
  3. I CaaS hanno permesso l’utilizzo di container isolati sul cloud, cambiando le proprietà infrastrutturali di un’applicazione.
  4. Le PaaS hanno posto un livello aggiuntivo che astrae la gestione dei servizi direttamente al di sopra dell’infrastruttura virtualizzata.
  5. I SaaS hanno permesso l’utilizzo di software completi ed efficienti, senza nessuna installazione lato utente.
  6. Le FaaS, infine, sono arrivate ad astrarre l’ambiente di esecuzione (language runtime) delle applicazioni, permettendo agli utenti di organizzare un’applicazione secondo unità funzionali, mentre il serverless provider gestisce il runtime sottostante.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *