Questo articolo riprende la storia del Cloud Computing da un lavoro di Massimo Mamino e Norberto Patrignani pubblicato qui, e fa parte di una serie di mie riflessioni sull’innovazione technology-driven, cominciata qui.
La prima volta che compare il termine cloud riferito alla rete è il 1997, nel capitolo «The Self Governing Internet: Coordination by Design» di Sharon EisnerGillett, Mitchell Kapor del libro «Coordination of the Internet» (Kahin, Keller 1997)
La rete internet, fin dal suo disegno originale, è una «rete di reti», ovvero tutte le reti di computer che adottano il protocollo standard di comunicazione denominato TCP/IP e che si interconnettono tramite un dispositivo (denominato router) in grado di smistare in modo appropriato dati racchiusi in pacchetti di bit.
Il punto è che, per definizione di Internet, il percorso dei pacchetti di bit, ovvero il numero di router che essi dovranno attraversare, è variabile: se un tratto di rete non è disponibile, la rete è in grado di autoconfigurarsi e ridefinire nuovi percorsi in modo di tentare di raggiungere lo stesso la destinazione. Non solo, proprio perché i percorsi sono variabili e ogni pacchetto di bit ha la sua autonomia (contiene i dati, il mittente e la destinazione) è possibile che in certe situazioni i pacchetti non arrivino secondo la sequenza originaria e quindi sia necessario ricomporre la sequenza giusta.
Tutte queste funzioni sono invisibili agli utenti e rappresentano il cuore del protocollo TCP/IP.
Quindi, anche se in teoria la rete è altamente affidabile (poiché un pacchetto andato perso viene ritrasmesso, una strada alternativa viene individuata in caso di indisponibilità di un router) di fatto non c’è nessuno che riesce a garantire in modo assoluto che un pacchetto di bit arrivi a destinazione. Inoltre, essendo una collezione di router (di fornitori diversi), che interconnettono un numero gigantesco di reti (di telecom provider diversi), non vi è un singolo punto di controllo e di gestione.
Ma questo è proprio il lato positivo di Internet: non essendoci un single point of control, non c’è neanche un single point of failure.
L’eleganza di una rete decentrata, distribuita, peer-to-peer, neutrale (i router non aprono i pacchetti, si limitano a smistarli), basata su standard universali, ecc… chiede come contropartita la mancanza di garanzie assolute: la rete «fa del suo meglio» (best-effort).
Dal 2001 il termine Cloud Computing viene citato con maggior frequenza dopo la pubblicazione sul New York Times di un articolo di J. Markoff (An Internet Critic Who is not Shy about Ruffling the Big Names in High Tech) in cui viene descritta la rivoluzione nelle architetture informatiche: “il software non verrà più installato sui singoli computer ma risiederà su macchine «in rete» (nel cloud) ed i vari computer semplicemente si collegheranno a tali macchine con un banale browser e si limiteranno ad utilizzare il software che qualcun altro avrà sviluppato e installato su giganteschi data center”.
Circa nello stesso periodo una significativa diminuzione nel costo dei server e la disponibilità di enormi capacità elaborative ha dato vita a datacenter con centinaia di server, ognuno dedicato ad una applicazione, generando inefficienza, dovuta ad un utilizzo medio del 18-20% della capacità elaborativa di ogni server e crescenti costi di manutenzione, gestione ed energetici.
Questo ha dato vita ad un processo di virtualizzazione:
- L’applicazione viene separata dall’infrastruttura sottostante e messa in grado di essere eseguita su qualunque piattaforma.
- I server vengono dotati di un componente software intermedio chiamato Virtualizzatore, che è in grado di suddividere dinamicamente le risorse elaborative fra più «virtual machines».
Da un ambiente di server fortemente virtualizzato, dotato di opportuni strumenti di gestione e monitoraggio, si può passare senza soluzione di continuità ad un ambiente cloud «privato». Ed in molte aziende di grandi dimensioni e nei maggiori service providers, questo è quello che sta succedendo.
Quindi riprendendo la definizione che ne ha dato più recentemente il National Institute for Standards and Technology statunitense:
per Cloud Computing intendiamo un approccio (aggiungo io alla gestione delle infrastrutture) che abilita un accesso distribuito ubiquo e conveniente (in altri termini, dovunque e 24 ore su 24) ed a richiesta (sottintendono quindi modelli di pricing pay-per-use) ad un insieme condiviso di risorse (elaborative e di memoria) che possono essere rapidamente acquisite e rilasciate con un impegno e con interazione minimi del fornitore di servizi.
Chiunque di voi stia utilizzando un telefono o un tablet Apple, ad esempio, comprenderà quanto questa definizione si applichi perfettamente ad iCloud ed analoghi servizi. Tecnicamente gli aspetti che caratterizzano e rendono interessante – dal punto di vista di un utilizzatore – un ambiente di coud computing sono:
- Condivisione delle risorse (resource pooling): le risorse elaborative del provider sono messe a fattor comune fra più consumatori, usando un modello cosiddetto multi-tenant, con diverse risorse fisiche e virtuali assegnate dinamicamente e riassegnate in funzione della domanda.
- Accesso a reti a banda larga (broad network access): le risorse sono disponibili attraverso la rete e sono accedute tramite meccanismi standard, che abilitano l’accesso da piattaforme client diverse (thin or thick, mobile phones, tablets, laptops, and workstations).
- Elasticità dell’infrastruttura (rapid elasticity): le risorse possono essere acquisite e rilasciate “elasticamente”, in alcuni casi anche in automatico, per scalare rapidamente le capacità del sistema client. Al consumer questa caratteristica di approvvigionamento risorse appare virtualmente illimitata e risulta appropriata in ogni momento e per ogni quantità.
- Misurabilità (measured service): le risorse utilizzate possono essere monitorate, controllate e il loro uso fatto oggetto di reporting, fornendo trasparenza sia per il provider che per il consumatore.
- On-demand self-service: un consumatore può, unilateralmente, approvvigionarsi di risorse elaborative come richiesto, automaticamente, senza richiedere l’intervento di alcun service provider.