Evoluzione del cloud computing

Il concetto di cloud computing è apparso per la prima volta all'inizio degli anni '50, quando più accademici, tra cui Herb Grosch, John McCarthy e Douglas Parkhill[1], concepirono l'elaborazione come un'utilità simile all'energia elettrica. Nei decenni successivi diverse tecnologie emergenti hanno gettato le basi per il cloud computing (figura 1.3). Più recentemente, la crescita rapida del World Wide Web e l'avvento dei grandi giganti di Internet, come Microsoft, Google e Amazon, hanno portato alla creazione di un ambiente economico e aziendale che ha consentito al modello di cloud computing di affermarsi.

Figura 1.3: Evoluzione del cloud computing.

Figura 1.3: Evoluzione del cloud computing.

Evoluzione dell'elaborazione

A partire dal 1960, alcune delle prime forme di computer usate dalle organizzazioni erano computer mainframe. Più utenti potevano condividere e collegarsi ai mainframe attraverso connessioni seriali di base usando dei terminali. Il mainframe era responsabile di tutta la logica, l'archiviazione e l'elaborazione dei dati, mentre i terminali connessi ad esso avevano capacità di calcolo molto limitate. Questi sistemi hanno continuato a essere usati diffusamente per più di 30 anni e, in qualche misura, continuano a esistere oggi.

Con la nascita del personal computing, i processori più economici, più piccoli e più potenti e la memoria hanno fatto virare la situazione nella direzione opposta, in cui gli utenti eseguivano il proprio software e archiviavano i propri dati localmente. Questa situazione ha portato a sua volta a problemi di gestione all'interno dell'ambiente IT delle organizzazioni a causa dell'inefficacia della condivisione dei dati e delle regole.

Gradualmente, grazie allo sviluppo di tecnologie di rete ad alta velocità, sono nate le reti locali (LAN), che consentono ai computer di connettersi e comunicare tra loro. I fornitori hanno progettato sistemi in grado di combinare i vantaggi offerti dai personal computer e dai mainframe, ottenendo applicazioni client-server che sono diventate più diffuse rispetto alle LAN. I client in genere eseguono il software client (ed elaborano alcuni dati) o un terminale (per le applicazioni legacy) connesso a un server. Il server, nel modello client-server, rende disponibili l'applicazione, l'archiviazione e la logica dei dati.

Negli anni '90, infine, l'età delle informazioni globali si è affermata con la rapida adozione di Internet. La larghezza di banda di rete è stata migliorata in base a diversi ordini di grandezza, dal normale accesso remoto all'odierna connettività fiber dedicata. Inoltre, sono emersi prodotti hardware più convenienti e più potenti. In più, l'evoluzione del World Wide Web e dei siti Web dinamici richiedeva architetture a più livelli.

Le architetture a più livelli hanno consentito la modularizzazione del software separando la presentazione, la logica e i livelli di archiviazione dell'applicazione come singole entità. Con la modularizzazione e il disaccoppiamento, non è passato molto tempo prima che le singole entità software venissero eseguite in server fisici distinti (in genere a causa delle differenze dei requisiti hardware e software). Ciò ha comportato un aumento dei singoli server nelle organizzazioni. Tuttavia, ha comportato anche uno scarso utilizzo medio dell'hardware del server. Nel 2009 l'International Data Corporation (IDC) ha stimato che il server x86 medio ha un tasso di utilizzo compreso tra circa il 5 e il 10% [2].

La tecnologia delle macchine virtuali dal 2000 si è evoluta abbastanza da diventare disponibile come software commerciale. La virtualizzazione consente di incapsulare un intero server come immagine, operazione che può essere eseguita senza problemi nell'hardware consentendo l'esecuzione simultanea di più server virtuali in un singolo server fisico e la condivisione di risorse hardware. La virtualizzazione consente quindi di consolidare i server, migliorando di conseguenza l'utilizzo del sistema.

Allo stesso tempo, il grid computing si è affermato nella comunità scientifica come soluzione dei problemi su larga scala in modalità distribuita. Con il grid computing, le risorse del computer di più domini amministrativi funzionano all'unisono per un obiettivo comune. Il grid computing ha introdotto molti strumenti di gestione delle risorse, ad esempio utilità di pianificazione e di bilanciamento del carico, per gestire risorse di elaborazione su larga scala.

Poiché le varie tecnologie di elaborazione si sono evolute, lo stesso è avvenuto per i relativi aspetti economici. Anche durante i primi giorni dell'elaborazione basata su mainframe, le aziende come IBM hanno offerto l'hosting e l'esecuzione di computer e software per diverse organizzazioni, ad esempio banche e compagnie aeree. Nell'era di Internet è diventato popolare anche l'hosting Web di terze parti. Con la virtualizzazione, tuttavia, i provider sfruttano una flessibilità senza precedenti per ospitare più client in un singolo server, condividendo hardware e risorse tra gli stessi.

Lo sviluppo di queste tecnologie, associato al modello economico di utility computing, è ciò che alla fine si è evoluto in cloud computing.

Tecnologie di abilitazione

Il cloud computing sfrutta varie tecnologie di abilitazione (figura 1.4), tra cui rete, virtualizzazione e gestione delle risorse, utility computing, modelli di programmazione, elaborazione parallela e distribuita e tecnologie di archiviazione.

Figura 1.4: Tecnologie di abilitazione nel cloud computing.

Figura 1.4: Tecnologie di abilitazione nel cloud computing.

L'avvento di tecnologie di rete ad alta velocità disponibili in tutte le aree ha contribuito notevolmente a presentare il cloud computing come un paradigma valido. Le reti moderne consentono ai computer di comunicare in modo rapido e affidabile, il che è importante se si prevede di usare i servizi offerti da un provider di servizi cloud. In questo modo, l'esperienza utente con il software in esecuzione in un data center remoto è paragonabile all'esperienza del software in esecuzione in un personal computer. La posta elettronica per il Web è un esempio comune, così come il software di produttività per l'ufficio. Inoltre, la virtualizzazione è fondamentale per abilitare il cloud computing. La virtualizzazione consente di gestire la complessità del cloud astraendo e condividendo le sue risorse tra gli utenti attraverso più macchine virtuali. Ogni macchina virtuale può eseguire il proprio sistema operativo e i programmi applicativi associati.

Alcune tecnologie, ad esempio i sistemi di archiviazione su larga scala, i file system distribuiti e le nuove architetture di database, sono fondamentali per la gestione e l'archiviazione dei dati nel cloud. L'utility computing offre numerose forme di pagamento per il noleggio delle risorse di calcolo. Alcuni esempi sono il pagamento orario per risorsa, il pagamento per la velocità effettiva garantita, il pagamento per i dati archiviati al mese e così via.

L'elaborazione parallela e quella distribuita consentono alle entità distribuite presenti nei computer in rete di comunicare e coordinare le proprie azioni per risolvere determinati problemi, rappresentati come programmi paralleli. La scrittura di programmi paralleli per i cluster distribuiti è in sé molto complessa. Per raggiungere un livello elevato di efficienza e flessibilità della programmazione nel cloud, è necessario un modello di programmazione.

I modelli di programmazione per i cloud offrono agli utenti la flessibilità di esprimere i programmi paralleli come unità di calcolo in sequenza, ad esempio le funzioni in MapReduce e i vertici in GraphLab. Questi modelli di programmazione ' sistemi di runtime in genere parallelizzare, distribuiscono e pianificano unità di calcolo, gestiscono le comunicazioni tra unità e tollerano gli errori.

Riferimenti

  1. Simson L. Garfinkel (1999). Architects of the Information Society: Thirty-Five Years of the Laboratory for Computer Science at MIT. MIT Press.

  2. Michelle Bailey (2009). The Economics of Virtualization: Moving Toward an Application-Based Cost Model. VMware Sponsored IDC Whitepaper.

Verificare le conoscenze

1.

Quando sono emerse le idee generali su cloud computing e utility computing?

2.

Quale dei seguenti elementi NON ha contribuito significativamente all'avvento del cloud computing?

3.

Quale tecnologia consente di consolidare più server in un unico server fisico?