Le evoluzioni degli ultimi anni hanno rivoluzionato il cloud computing. Dai semplici server virtualizzati stiamo affrontando la nuova era delle FaaS.
La prima rivoluzione nella gestione dei data center è avvenuta con la virtualizzazione dei mainframe e dei sistemi dipartimentali da parte di IBM. Il concetto era semplice: prendo l’hardware e segmento la potenza di calcolo, nonché tutte le altre risorse, per ospitare più istanze indipendenti del sistema operativo.
Volete fare un salto nel passato?
Ecco a voi cosa c’era scritto nella homepage delle Virtual Machines di IBM nel 1997:
Welcome to IBM’s VM/ESA Home Page
Powered by S/390 and served to you by VM/ESA Version 2.1.0VM (Virtual Machine) has long been recognized as a robust computing platform, spanning the entire IBM System/390 family. In fact, almost nine million people logon to a VM system every day. With its rich function and superior quality, VM/ESA continues to be one of IBM’s premier operating systems. You, too, can be among those who are getting more out of their system(s) by serving intranet and Internet web pages from VM/ESA.
Nove milioni di persone si collegavano quotidianamente ad una VM dell’IBM nel 1997.
La pagina relativa a intranet e Internet recitava:
Web Tools for VM
Want to know more about the products available for serving Intranet and internet pages? Make VM the heart of your Internet and/or intranet with one of these popular web server products: EnterpriseWeb/VM, VM:Webserver, or Webshare. Go ahead, provide clickable access to OfficeVision mail and calendar, or build Internet and intranet applications that access your DB2 data. How about enabling your VM users to browse the intranet and Internet with VM web browsers Charlotte, Enterprise View, or EnterWeb?
IBM proponeva i sistemi S/390 per ospitare sistemi operativi guest (come ad esempio lo Unix di IBM denominato AIX), usando VM/ESA 2.x come sistema operativo host.
Il futuro del cloud computing non può essere esclusivamente incentrata sulle macchine virtuali, sulla loro capacità di supportare molteplici sistemi operativi e la possibilità di far girare un webserver o un database.
Il cloud computing è ancora fortemente incentrato sulle macchine virtuali o virtual machines, che supportano ogni giorno decine di migliaia di applicazioni, ma questa architettura ha probabilmente raggiunto il massimo grado di maturità e di sviluppo.

Le macchine virtuali possono essere ospitate in cloud pubblici, privati o ibridi. La tecnologia di virtualizzazione è consolidata, di semplice accesso e ha raggiunto costi accessibili per chiunque.
Praticamente qualsiasi sistema operativo oggi presente sul mercato dispone di un Hypervisor.
L’hypervisor è il servizio che virtualizza l’hardware e orchestra le attività delle virtual machines, consentendo lo sfruttamento ottimizzato dell’hardware fisico sottostante. Gli hypervisor più famosi, come Vmware, Hyper-V e Xen, sono in grado di sfruttare le risorse fisiche sottostanti in modo eccelso. Al punto di ottenere virtual machine con sistemi operativi così performanti da non consentirci di notare la differenza rispetto un sistema “fisico“.
Arrivano i containers
La seconda rivoluzione industriale nel mondo del cloud computing sono stati senza dubbio i containers.
Un container è un concetto nato all’interno del mondo open source ed in particolare nei laboratori della Google che ha dato vita ai cgroups in Linux ed in seguito a LXC, poi supportato attivamente da Canonical, l’azienda alle spalle di Ubuntu.
Un container è un pacchetto di assemblaggio (immaginatevi uno ZIP) che include l’applicazione da distribuire e tutte le librerie o le dipendenze necessarie a far funzionare l’applicazione stessa. Il motore nel contenitore, detto container engine, si occupa di sfruttare le funzioni del sistema operativo host necessarie all’applicazione e alle sue librerie/dipendenze.

Nella pratica un container dovrebbe essere molto meno “esoso” di risorse rispetto ad una virtual machine, perché non necessita del sistema operativo guest per funzionare.
I “motori” di container più noti sono Docker (che detiene oltre l’80% del mercato), CoreOS, LXC e Microsoft Hyper-V.
Funzionano tutti più o meno secondo il medesimo concetto, ad eccezione di Hyper-V che virtualizza uno speciale sistema operativo guest anche all’interno del container, garantendo in tal modo un’isolamento completo.
Anche i containers necessitano dei sistemi d’orchestrazione per gestire installazioni di grandi dimensioni.
Il più noto è Google Kubernetes, che di fatto è il leader mondiale indiscusso, mentre in parte minore troviamo Apache Mesos e nuovamente Microsoft Hyper-V che svolge anche questo ruolo in ambienti Windows Server.
L’avvento dei container, per prima cosa, ha consentito agli sviluppatori di avere a disposizione numerosi ambienti di test contemporanei, senza la necessità di creare diversi server virtuali, con i rispettivi costi di licenza e di mantenimento. Successivamente i container, e soprattutto le engine alle loro spalle, si sono dimostrate sufficientemente mature per offrire servizi di cloud computing ad alta affidabilità.
Oggi i container sono parte integrante dell’offerta di ogni cloud provider e garantiscono ritorni degli investimenti fino a poco tempo fa impensabili con le virtual machines.
Aziende come DigitalOcean hanno creato la loro fortuna offrendo esclusivamente servizi cloud basati su container.
Le funzioni elementari
Le FaaS – Functions as a Service sono il futuro prossimo del cloud computing.
Basil Walsh scriveva:
Noi non abbiamo bisogno di più forza o più capacità o di maggiori opportunità. Ciò di cui abbiamo bisogno è di usare ciò che abbiamo.
Le FaaS sono nate esattamente per questo motivo: per sfruttare al meglio le infrastrutture già in nostro possesso, senza continuare a scalare verticalmente alla ricerca di sempre maggiore potenza.
Sappiamo tutti che aumentare la potenza significa erogare più energia ed è necessario gestire la maggiore dispersione termica.
Questi temi sono parte integrante dell’agenda quotidiana di ogni paese e dei rispettivi leader, ma saranno fondamentali per il futuro del nostro pianeta.
Le FaaS introducono il concetto di serverless computing, ovvero l’elaborazione applicativa senza la necessità di disporre di un server virtuale o fisico per svolgere le funzioni richieste.
Il concetto del serverless computing è molto semplice: a fronte di un evento predeterminato viene invocata una funzione che esegue un compito più o meno complesso, sfruttando altri servizi presenti in cloud.
I servizi FaaS più importanti a livello globale sono AWS Lambda e Azure Functions. Vediamo un esempio di AWS Lambda in azione:

Il processo prevede la cattura di una fotografia e il suo salvataggio nel servizio di storage in cloud Amazon S3. A questo punto è stato configurato un trigger che avvia una funzione AWS Lambda. La funzione si occupa di ridimensionare la fotografia in vari formati per essere sfruttata da device di vario genere.
Adesso immaginate di poter sfruttare qualsiasi servizio cloud di Amazon, di Microsoft oppure di Google direttamente da una FaaS oppure da una catena di funzioni FaaS. La potenza che avete a disposizione è praticamente senza limiti.
Ma quali sono i vantaggi rispetto allo sviluppo di funzioni classiche che possono essere distribuite attraverso server tradizionali e virtual machines?
Grazie alle FaaS gli sviluppatori si possono concentrare sullo sviluppo del codice e delle integrazioni, senza preoccuparsi della manutenzione dei sistemi server sottostanti, dei container da predisporre e configurare, senza alcun problema di downtime, perché le FaaS sono garantite al 99,999%.
Le FaaS girano sul runtime di linguaggio messo a disposizione dal cloud provider, ad esempio le Azure Functions possono essere sviluppate in C#, F#, JavaScript, Java, Powershell, Python e TypeScript.

Amazon esemplifica molto efficacemente il processo alle spalle dello sviluppo di una Faas:

Il futuro del cloud computing
Se mettiamo a confronto le varie tecnologie che abbiamo analizzato, possiamo vedere che hanno tutte la medesima base: hardware fisico e sistema operativo host.

Quello che fa la differenza è lo sfruttamento di queste risorse.
L’architettura delle virtual machines è pensata per garantire disponibilità e piena replicabilità delle condizioni di configurazione, sia hardware che software, rispetto ad un macchina fisica tradizionale.
I container consentono un abbattimento dei costi di ingresso, una maggiore velocità di deployment di ambienti eterogenei e minore manutenzione.
Il serverless computing delle FaaS consente di esternalizzare completamente al cloud provider le problematiche dell’hardware e di tutti i livelli del sistema operativo, sia host che guest.
L’hardware e il sistema operativo host delle virtual machines può rimanere sotto utilizzato per lunghi periodi, soprattutto se il carico di lavoro è concentrato solamente in alcuni momenti. Tuttavia la strutturazione deve essere quella dei momenti peggiori, quindi c’è il rischio che gran parte delle risorse rimanga inutilizzato per diverso tempo.
I container consentono una maggiore densità applicativa, di conseguenza le possibilità di sotto utilizzo sono minori rispetto alle virtual machines.
I servizi di serverless computing sono stati pensati per sfruttare l’hardware solamente per brevissimi periodi di tempo, infatti la loro fatturazione avviene addirittura in millisecondi.
Sia Amazon che Microsoft hanno capito il vero valore delle FaaS, che gli consentono di sfruttare l’hardware e i sistemi operativi inutilizzati delle virtual machines per erogare microservizi con unità di elaborazione in frazioni di secondo.
Adesso che le FaaS hanno preso piede sono state create infrastrutture ad hoc per ospitarle. Questo ha generato incrementi di prestazioni inimmaginabili solamente fino ad un paio di anni fa.
Quindi il futuro del cloud computing è… nelle competenze.
Solamente dotandosi di personale altamente qualificato, che conosca come sfruttare al meglio tutte queste tecnologie, sarà possibile gestire adeguatamente e con successo il cloud computing del futuro.
I risparmi ottenuti dall’abbattimento dei costi delle infrastrutture e del loro mantenimento è necessario investirlo in risorse umane qualificate, disegnando un percorso di revisione e di rinnovamento che guardi solamente al domani.
Mettete in stato di manutenzione i vecchi sistemi e rivolgete lo sguardo al futuro: il tempo per attendere è finito.
“il tempo per attendere è finito” e io avrei aggiunto <> :-p scherzi a parte articolo stupendo! Vediamo se (grazie a questo) riesco a farglielo capire a chi di dovuto
ciao!
Ciao Massimo,
grazie mille dei complimenti.
Seguiranno a breve altri articoli, spero che ti possano aiutare “con chi di dovere”.
Un saluto