In questo articolo andremo a scoprire quella che è una delle tecnologie più gettonate del momento, il cloud computing, la nuvola nella quale risiedono i nostri dati. Quali sono le caratteristiche e le tecnologie che lo contraddistinguono? Scopritelo insieme a noi.
Introduzione al Cloud Computing
Negli ultimi mesi una delle parole più pronunciate in ambito informatico è stata “cloud”, che letteralmente significa “nuvola”. Come forse già sappiamo, la nuvola ha da sempre rappresentato graficamente “Internet”. Non conosciamo chi e quando ha voluto per primo esprimere con la nuvola questa nuova entità verso la quale i sistemi, dapprima con semplici browser, iniziavano a connettersi; è però certo che l’intuizione ha avuto successo.
La nuvola, il cloud, e la rete Internet sono quindi strettamente collegate. La Rete, nata nel lontano 1969 con il nome di Arpanet, si è evoluta nel tempo fino al 1991, anno in cui con la definizione del protocollo http e la nascita del World Wide Web (WWW) prende il nome di Internet. L’intento è quello di connettere tra loro più computer con lo scopo di condividere informazioni, documenti, risorse ecc. Ognuno ha la possibilità di connettersi a sistemi, server, pubblicare pagine e siti web e rendere disponibili ad altri le proprie conoscenze. La necessità di condivisione diventa la spinta per la creazione della rete. I PC quindi si possono connettere a Internet, ma nessuno (o pochi) sanno realmente cos’è, o meglio cosa c’è dietro, come mi connetto e quali sono i servizi che mi consentono di farlo. Non so dove è pubblicato il sito web che visito e non so neanche come è stato creato. Sto quindi usufruendo di un servizio che una piattaforma, qualunque essa sia, mi sta erogando. Sono un utente della rete.
Qui nasce il concetto di nuvola: non so cosa c’è dietro, non mi interessa, ma lo uso. Il Cloud Computing, anche se negli ultimi anni sembra rappresentare una evoluzione, in realtà era un concetto per molti aspetti già esistente da diverso tempo, parallelamente alla nascita di Internet.
Che cos’è il Cloud Computing?
Possiamo quindi definire con il termine Cloud Computing un insieme di risorse hardware e software che forniscono servizi su richiesta attraverso la rete Internet. Sebbene simile, non deve essere confuso con quest’ultima, in quanto il Cloud Computing è sostanzialmente un servizio fornito da un gestore di terze parti con la formula on demand. Sostanzialmente l’utente paga soltanto per quello che consuma, in termini di banda, di risorse, tempo di utilizzo, numero di transazioni ecc. Questo modello permette di creare soluzioni scalabili, performanti e affidabili anche con un basso investimento iniziale, senza cioè dover acquistare per lo startup l’hardware necessario e i servizi connessi, come il consumo di elettricità, la disponibilità di una connessione veloce e permanente a Internet, un IP fisso per rendere raggiungibili i propri server. Caratteristica fondamentale e imprescindibile del Cloud Computing è quella di fornire una infrastruttura di servizi assolutamente affidabile e scalabile. È infatti possibile, a seconda delle necessità, aumentare o diminuire i nodi in uso, oppure cambiare le caratteristiche dei server potenziando CPU e memoria.
Tutto questo è possibile perché l’infrastruttura è basata su un sistema di virtualizzazione delle risorse. La piattaforma viene eseguita su macchine virtuali opportunamente dimensionate e in grado di fornire i servizi richiesti. Ogni volta che viene richiesto di scalare utilizzando un nuovo nodo, la piattaforma si preoccupa di replicare l’applicazione sul nuovo nodo e renderlo quindi disponibile.
Ma non tutto è o può essere Cloud Computing. Attualmente esiste la possibilità di sviluppare per il cloud, ma esistono ancora tante soluzioni già in produzione negli ambienti tradizionali. Spesso le due tipologie di soluzioni, che in realtà differiscono per la piattaforma di distribuzione, devono integrarsi e comunicare tra loro. Per distinguere, vengono utilizzate due diverse terminologie. Un’applicazione distribuita secondo il modello tradizionale, su server di proprietà o su computer locali per esempio, viene definita on-premise. Una soluzione distribuita invece secondo le indicazioni del Cloud Computing viene semplicemente definita come in the cloud, o semplicemente cloud. È bene focalizzare le due definizioni perché, sono le modalità più diffuse per indicare le differenti modalità di deployment delle applicazioni.
Nota
Il termine Computing non deve essere confuso con il Grid Computing, dove la potenza di calcolo di diversi computer viene unita per formare un unico computer virtuale, un meccanismo ben diverso dal fornire servizi.
Il Cloud Computing può essere suddiviso in tre grandi categorie, dipendentemente dallo scopo per cui viene creato. Abbiamo quindi:
- Infrastructure as a Service (Iaas), dove l’infrastruttura hardware, la rete, lo storage vengono resi disponibili come servizi;
- Platform as a Service (PaaS), dove è la piattaforma applicativa, il Sistema Operativo, a essere fruibile come servizio con la possibilità di sviluppare soluzioni software;
- Software as a Service (SaaS), dove l’applicazione diventa un servizio fruibile su richiesta. Immaginate Google Documents come un’applicazione, simile a Microsoft Office, che però viene resa pubblicamente accessibile come servizio sul Web.
Alcune piattaforme supportano contemporaneamente anche più di una delle tipologie elencate.
Infrastructure as a Service
La differenza tra le diverse tipologie di Cloud Computing appare sottile, ma sostanziale. L’Infrastructure as a Service (IaaS) è una tipologia di Cloud Computing basato sul consumo, come servizio, di risorse hardware. Server virtuali, potenza di calcolo, storage, reti vengono messi a disposizione per essere utilizzati senza necessariamente dover affrontare costi di acquisto di tale hardware.
Il concetto è simile al noleggio, ma con l’importante differenza della manutenzione. Chi utilizza l’infrastruttura cloud non si deve preoccupare di fare manutenzione, rinnovare l’hardware o sostituire un hard disk; deve semplicemente utilizzare un servizio scalabile e affidabile senza preoccuparsi dei meccanismi di gestione interna.
Platform as a Service
Il Platform as a Service (PaaS) rappresenta una tipologia di servizio fornito del tutto differente, anche se per molti versi simile all’IaaS. A essere fornito come servizio, questa volta, non c’è solo l’hardware, ma anche la piattaforma che astrae l’hardware stesso e permette di usufruire di un set di funzionalità che consentono di ottenere load balancing, storage, reti, Virtual Machine, deployment. Il vantaggio è quello di concentrarsi solo ed esclusivamente sullo sviluppo dell’applicazione, e non perdersi nell’analisi di problematiche legate all’ambiente in cui essa deve essere distribuita, ottenendo contestualmente dalla piattaforma la scalabilità e l’affidabilità necessaria. Come per l’IaaS, non dobbiamo preoccuparci di aggiornare il sistema operativo: viene tutto gestito dinamicamente e in modo del tutto automatico dalla piattaforma. Se in determinati periodi abbiamo carichi di picco, per esempio durante il periodo natalizio un negozio online può essere soggetto a un carico di richieste decisamente più alto, la piattaforma è in grado di adeguare la propria struttura per rispondere alle mutate esigenze, anche se temporanee. Diversamente da quanto viene fatto nelle soluzioni tradizionali, dove tutta l’infrastruttura hardware e software deve essere progettata per essere scalabile e affidabile, così da evitare problemi e interruzioni del servizio che causano ripercussioni sul business. Un’infrastruttura di Cloud Computing, invece, è progettata partendo dal presupposto che i problemi ci possono essere. È quindi in grado di risolverli autonomamente, per quanto possibile, attraverso meccanismi in grado di non bloccare il normale flusso applicativo, come la replica delle macchine virtuali.
Software as a Service
Mentre l’IaaS fornisce l’infrastruttura e il PaaS la piattaforma, il Software as a Servi-ce (SaaS) rappresenta una completa soluzione software sottoforma di servizio. Un esempio di SaaS è la piattaforma Google Documents: un insieme di applicazioni per l’ufficio, gestione di documenti, fogli di calcolo, disegno, presentazioni, interamente disponibile online e accessibili da chiunque ne è abilitato. Recentemente anche Microsoft ha rilasciato la versione di Office per il cloud chiamata Office365. In questo modo Word, Excel, PowerPoint, SharePoint, Lync ed Exchange diventano applicazioni interamente accessibili tramite Web.
Il Cloud Computing e le soluzioni tradizionali
Da quanto discusso emergono differenze importanti tra le applicazioni tradizionali e le applicazioni sviluppate per il cloud. Distinguiamo quindi le applicazioni tradizionali con il termine on-premise e le applicazioni sviluppate per il cloud con il termine in the cloud. On-premise, tradotto letteralmente, significa nello stabile, mentre in the cloud significa nella nuvola.
Vediamo tre soluzioni infrastrutturali diverse, On-Premise, Hosting e Cloud Computing, evidenziandone le marcate differenze nella gestione delle problematiche per la risoluzione delle quali vengono progettate.
On-premise
- Elettricità, Connettività, Hardware e Software presso la propria erver Farm;
- Completo Controllo;
- Completa responsabilità;
- Capacità di erogazione “fisse”;
- Poca flessibilità;
- Capitale iniziale per l’infrastruttura e la messa in opera.
Hosting
- Affitto di macchine Hardware + Software e della Connettività;
- Minor controllo rispetto all’on-premise;
- Minori responsabilità per il cliente rispetto all’on-premise;
- Costi fissi per capacità di erogazione “fissa” anche quando le macchine non fanno nulla!;
- Più flessibilità;
- Minori capitali iniziali.
Cloud computing
- Infrastruttura multitenant e condivisa tra diverse applicazioni;
- Resource Pooling, Isolamento come caso specifico;
- On Demand Self-service ovvero capacità di richiedere ciò di cui si ha bisogno;
- Indipendenza dalla topologia di rete;
- Elasticità: capacità di richiedere maggiori risorse solo quando necessarie;
- Pagamento dei servizi solo quando servono.
Apparentemente sembra che il Cloud Computing sia la soluzione ottimale per tutti i problemi. Anche se per le architetture distribuite questo può essere vero nella maggior parte dei casi, non è una verità assoluta. Tutto dipende sempre dalla specifica architettura dell’applicativo che stiamo progettando. La tabella comparativa serve quindi semplicemente a evidenziare le conseguenze che la scelta di una o dell’altra soluzione può portare.
Sviluppo On-Premise e sviluppo “in the cloud”
Lo sviluppo di applicazioni on-premise e lo sviluppo di soluzioni per il cloud non è in realtà molto differente. Anzi, applicazioni inizialmente progettate e sviluppate per essere distribuite in ambienti on-premise, oppure in Hosting, potenzialmente possono essere facilmente portate nel cloud con pochissimi passaggi e accorgimenti, rivolti soprattutto all’utilizzo e all’adattamento alla piattaforma di Cloud. In una soluzione distribuita su un ambiente di Cloud Computing, per esempio, è sbagliato pensare di utilizzare risorse locali come storage affidabile o fare riferimento a specifici path, se non virtualizzati. Il concetto di base è che tutto deve essere virtualizzato e soprattutto accessibile contestualmente da diversi nodi esterni. Un nodo, infatti, può potenzialmente andare in crash o essere rimosso; in quel caso le risorse salvate localmente andrebbero definitivamente perdute.
Non tutte le applicazioni legacy potranno essere migrate nel cloud, ma sicuramente per una buona parte, se ben progettate nel rispetto dell’isolamento dei componenti, sarà possibile farlo con poche modifiche.
Private Cloud vs. Public Cloud
L’introduzione al Cloud si chiude con un’ulteriore, ma breve, distinzione che offre un quadro più completo delle soluzioni a nostra disposizione. Abbiamo discusso finora di una infrastruttura pubblica, in grado di rispondere alle esigenze di un’architettura distribuita su larga scala e soprattutto in esecuzione su data center gestiti da terze parti. Questo si chiama Public Cloud. Ma esiste anche la possibilità, offerta da molti vendor, di creare un’infrastruttura di cloud del tutto privata. Il vantaggio è quello di avere una virtualizzazione quasi completa dei servizi, unendo il controllo dell’on-premise con la dinamicità del cloud. Questa soluzione è chiamata Private Cloud. In questo scenario tutta l’infrastruttura viene gestita internamente e l’accesso può anche essere limitato solo ad alcuni client, per esempio a un limitato set di persone.
Amazon, Google e le soluzioni per il Cloud Computing
Da alcuni anni, diversi vendor hanno incominciato a offrire le proprie infrastrutture di Cloud Computing. Nel 2006 Amazon ha lanciato la piattaforma S3 (Simple Storage Service), con la quale consentiva l’accesso a uno storage attraverso una semplice interfaccia web, calcolando mensilmente i consumi in termini di gigabyte e di banda utilizzata. A un costo davvero basso vengono tuttora garantite scalabilità, affidabilità e alta disponibilità. Successivamente diversi altri servizi come DropBox si sono appoggiati ad Amazon S3, utilizzandone lo storage come base di dati per le proprie soluzioni di file sharing. Poco dopo il servizio Amazon EC2 (Elastic Computer Cloud) consentiva di utilizzare istanze di servizi per l’esecuzione di macchine virtuali all’interno di un’infrastruttura di Cloud.
Anche Google con Google Storage o Google App Engine fornisce la sua infrastruttura di cloud computing. Ma esistono diversi altri vendor che offrono soluzioni più o meno identiche. Rackspace, IBM, Telecom Italia, HP, Sun/Oracle sono solo alcune delle società che per prime hanno investito e stanno tuttora investendo nel Cloud Computing.
Tuttavia non esiste ancora una standardizzazione delle tecnologie utilizzate e le soluzioni offerte sono molto differenti l’una con l’altra. Ogni vendor interpreta e definisce un modello di Cloud Computing secondo la propria visione. Si incomincia a discutere della necessità di una standardizzazione, almeno per quello che riguarda la sicurezza, le performance, la disponibilità e gli accordi di servizio, ma non credo che questo possa accadere in tempi brevi, soprattutto alla luce della corsa al cloud che stiamo vivendo.
Autore: Fabio Cozzolino – Tratto da: Windows Azure Programmare per il Cloud Computing – Edizioni FAG