Introduzione al Cloud Computing
Transcript
Introduzione al Cloud Computing
Capitolo 1 Introduzione al Cloud Computing Dopo aver completato questo capitolo, sarai in grado di Q Sapere la differenza tra IaaS, SaaS, e PaaS. Q Capire la strategia seguita da Microsoft per il suo cloud. Q Conoscere le basi della Windows Azure Platform. Questo libro è basato sulla mia personale esperienza maturata studiando, insegnando e sviluppando soluzioni basate sul cloud in grado di sfruttare i vantaggi dei diversi componenti della piattaforma Windows Azure, vale a dire Windows Azure Compute, Windows Azure Storage, Windows Azure AppFabric, e SQL Azure. Questo capitolo introduce la filosofia che sta dietro al cloud computing. Sull’homepage di Windows Azure (Microsoft Corporation, Windows Azure website, 2011, http://www.microsoft.com/windowsazure/compute/default.aspx) è possibile leggere: Microsoft Windows Azure provides a scalable and fault-tolerant environment that lets developers create powerful applications without the need to purchase and configure hardware and operating systems. Instead, you can simply rent what you need following the PaaS (Platform as a Service) model. Nota Dal momento che URL, nomi e procedure possono cambiare nel tempo, alcuni di questi potrebbero essere non più aggiornati nel momento in cui ti appresti a leggere il presente libro. In questo caso, il mio consiglio è di cercare le informazioni relative al prodotto a partire dalla home page di Windows Azure (http://www.azure.com). Le informazioni contenute in questo libro erano accurate al momento in cui è stato scritto. Differenti approcci al Cloud Computing L’idea di base di qualunque piattaforma cloud è applicare un canone in base all’effettivo utilizzo della piattaforma, scalando verso l’alto o verso il basso in base alle necessità del business. I diversi fornitori di cloud computing in genere interpretano questo principio in modi diversi, fornendo differenti tipologie di servizi per raggiungere questo obiettivo. Fondamentalmente, esistono tre tipi di approcci al cloud computing: Infrastructure as a Service (IaaS), Software as a Service (SaaS), e Platform as a Service (PaaS). 1 2 Windows Azure Passo per Passo Infrastructure as a Service Alcuni fornitori mettono a disposizione dei clienti l’infrastruttura per realizzare proprie soluzioni, consentendo a questi di noleggiare hardware come server, load balancer, firewall e cablaggi. Ricade sull’utente il compito di configurare e installare da remoto le proprie soluzioni. È possibile potenziare l’infrastruttura richiedendo più server o modificando le politiche di load-balancing, senza per questo dover acquistare nuovo hardware. Allo stesso modo, in ogni momento è possibile ridimensionare l’infrastruttura noleggiata dal fornitore di cloud computing. Questo approccio è definito Infrastructure as a Service (IaaS), perché l’utente può noleggiare l’infrastruttura senza doversi preoccupare di stimare in anticipo i picchi di massima domanda, ma ricade su quest’ultimo la responsabilità di configurare correttamente l’infrastruttura noleggiata. Questi sono i punti importanti da ricordare a proposito dell’approccio IaaS: Q I livelli più bassi dell’infrastruttura sono gestiti dal fornitore. Q Solo pochi fornitori mettono a disposizione dei clienti un sistema operativo. Spetta a questi ultimi il compito di acquistare, installare e configurare il sistema operativo e le relative applicazioni. Q L’ovvio beneficio che deriva da una IaaS è che questa solleva l’utente dal doversi preoccupare di molti degli aspetti fisici legati all’infrastruttura. Software as a Service Un altro approccio possibile è quello di noleggiare il servizio offerto da un fornitore, configurandolo attraverso l’interfaccia messa a disposizione dal fornitore medesimo, senza per questo dover conoscere i dettagli dell’infrastruttura per veicolare il servizio. Questo approccio è denominato Software as a Service (SaaS), perché si paga per utilizzare determinati servizi. Ad esempio, Microsoft Exchange Online prevede un costo per ciascuna casella email utilizzata. Per poter configurare il servizio, è necessario utilizzare un’applicazione web messa a disposizione del fornitore, mediante la quale è possibile richiedere caselle email, definirne il nome e le dimensioni. Tutto ciò che l’utente riceve è una password con la quale è già in grado di accedere alla propria casella email. Questa interfaccia web ha davvero poco in comune con la versione on-premises di Microsoft Exchange. In un modello SaaS l’utente non ha il controllo (né la responsabilità) dell’infrastruttura sulla quale il servizio è installato. Allo stesso modo, non ha il controllo sul sistema operativo sul quale il servizio gira, né su qualunque altro elemento software, se non quelli che la stessa interfaccia espone all’utente. In altre parole, spetta al fornitore del servizio il compito di predisporre tutto ciò che serve per eseguire l’applicazione, isolando l’utente dai componenti sottostanti. Capitolo 1 Introduzione al Cloud Computing 3 Platform as a Service Il terzo tipo di approccio è definito Platform as a Service, o PaaS. In questo approccio, l’utente noleggia una piattaforma sulla quale effettuare il deploy delle proprie applicazioni senza dover configurare l’infrastruttura e senza le limitazioni proprie dell’approccio SaaS. Ecco la definizione offerta da Wikipedia per il PaaS (Wikipedia, Platform as a Service, 2011, http://en.wikipedia.org/wiki/Platform_as_a_service): …the delivery of a computing platform and solution stack as a service. PaaS offerings facilitate deployment of applications without the cost and complexity of buying and managing the underlying hardware and software and provisioning hosting capabilities, providing all of the facilities required to support the complete life cycle of building and delivering web applications and services entirely available from the Internet. PaaS offerings may include facilities for application design, application development, testing, deployment and hosting as well as application services such as team collaboration, web service integration and marshaling, database integration, security, scalability, storage, persistence, state management, application versioning, application instrumentation and developer community facilitation. These services may be provisioned as an integrated solution over the web. La piattaforma Windows Azure rientra nella definizione di PaaS, dato che non fornisce l’accesso al sottostante ambiente di virtualizzazione o ai dettagli del sistema operativo quali l’interfaccia di rete, la configurazione degli IP o la gestione dei dischi. I concetti chiave da ricordare quando si ha a che fare con una PaaS sono i seguenti: Q Il fornitore della piattaforma è responsabile di tutto, dalla connettività di rete al runtime. Q Le offerte PaaS riducono il carico di lavoro dello sviluppatore fornendo il runtime della piattaforma e i relativi servizi applicativi. Q Gli sviluppatori possono iniziare sin da subito a concentrarsi sulla logica di business delle loro applicazioni. Q PaaS, rispetto alle tradizionali offerte di hosting, mette a disposizione il potenziale per incrementi significativi nella produttività, dal momento che ricade sul fornitore cloud il compito di gestire tutti gli aspetti hardware e i dettagli operativi della piattaforma cloud. 4 Windows Azure Passo per Passo Cloud Service La responsabilità dell’utente e del fornitore sono sintetizzate nella seguente immagine: On-premises solution IaaS PaaS SaaS Application Application Application Application Data Data Data Data Runtime Runtime Runtime Runtime Framework Framework Framework Framework Operating System Operating System Operating System Operating System Server Server Server Server Disk Disk Disk Disk Network Stack Network Stack Network Stack Network Stack Come si può vedere, accanto a significative differenze, tutte le variegate offerte nel settore del cloud prevedono la fornitura di un set di servizi che possono essere noleggiati in modo da non doversi preoccupare dei livelli sottostanti (presentati in bianco, al di sotto della linea). La definizione di cloud computing offerta da Wikipedia è la seguente (Wikipedia, Cloud Computing, 2011, http://en.wikipedia.org/wiki/Cloud_computing): Cloud computing is Internet-based computing, whereby shared servers provide resources, software, and data to computers and other devices on demand, as with the electricity grid. Cloud computing is a natural evolution of the widespread adoption of virtualization, service-oriented architecture and utility computing. Details are abstracted from consumers, who no longer have need for expertise in, or control over, the technology infrastructure "in the cloud" that supports them. Cloud computing describes a new supplement, consumption, and delivery model for IT services based on the Internet, and it typically involves over-the-Internet provision of dynamically scalable and often virtualized resources. It is a byproduct and consequence of the ease-of-access to remote computing sites provided by the Internet. This frequently takes the form of web-based tools or applications that Capitolo 1 Introduzione al Cloud Computing 5 users can access and use through a web browser as if it were a program installed locally on their own computer. Questa definizione mette in luce due importanti aspetti che ricorrono nelle varie offerte: l’uso di risorse distribuite (IaaS, SaaS, e PaaS) e l’astrazione dello sviluppatore rispetto alle tecnologie sottostanti. Abbiamo già accennato al primo aspetto. Per quanto riguarda il secondo aspetto, invece, esso consiste nella possibilità di gestire risorse astratte, come lo storage distribuito, senza dover conoscere i dettagli tecnici sulla loro configurazione, messa in sicurezza e distribuzione. Una prospettiva di lungo termine Possiamo immaginare un futuro nel quale tutti gli aspetti fisici legati a dati e programmi siano completamente superflui dal punto di vista dell’utente, ma resta ancora molta strada da percorrere per raggiungere questo scenario futuristico. Oggigiorno, un acronimo molto diffuso è SOA (Service Oriented Architecture), un termine che definisce un “ecosistema” di servizi interconnessi che possono scambiare dati e condividere processi, usando pattern e standard comuni. Un servizio SOA può essere consumato da applicazioni installate su piattaforme eterogenee, che utilizzano sistemi operativi differenti e si basano su ambienti di programmazione diversi. L’architettura service oriented definisce concetti di interoperabilità che funzionano su sistemi e piattaforme diverse. Ciascun servizio può essere implementato con approcci e tecnologie differenti, dato che SOA si limita a definire il modo con cui questi servizi comunicano tra di loro e con le applicazioni client, dando così agli sviluppatori la libertà di implementare la logica interna nel modo che desiderano. Per esempio, un servizio implementato in .NET può utilizzare solo altri componenti .NET e API di Windows; questo servizio si presenta come completamente diverso rispetto ad analoghi servizi sviluppati in Java o Ruby. Ma, per quanto ciascuno di questi servizi possa internamente utilizzare differenti pattern di comunicazione, essi devono comunque aderire al comune contratto di comunicazione per poter “parlare” con altri servizi SOA o applicazioni client. L’evoluzione dei linguaggi, dei sistemi operativi e dei framework già fornisce uno strato di astrazione rispetto alla piattaforma locale; per esempio, nella maggior parte dei linguaggi moderni, non c’è più bisogno di gestire la RAM in modo diretto. Al contrario, negli attuali ambienti basati sul garbage collector, una volta rilasciate le proprie istanze nel modo corretto, è il framework ad occuparsi rilasciare memoria al sistema operativo. Questa astrazione significa che lo stesso codice può funzionare sul framework Microsoft .NET su un notebook performante con 8 GB di RAM e in un ambiente Microsoft .NET Compact Framework su un device con 256 MB of RAM su cui è installato Microsoft Windows CE, e questo nonostante il garbage collector lavori nei due ambienti in modo decisamente diverso. Non sto dicendo che lo stesso codice possa funzionare ovunque ma che, per quante siano le differenze tra Windows e Windows CE, molte di queste sono state rese trasparenti allo sviluppatore dal .NET Framework. 6 Windows Azure Passo per Passo I compilatori di oggi consentono di astrarre rispetto al codice macchina. I sistemi operativi, dal canto loro, aggiungono un livello di astrazione rispetto ai dettagli della memoria, dei dischi e delle schede grafiche, lasciando ai runtime, come il Common Language Runtime (CLR) o la Java Virtual Machine (JVM), il compito di gestire i dettagli fisici al posto nostro. Questo è un ottimo inizio, ma il prossimo passo richiede di rimuovere la dipendenza tra l’ubicazione fisica di una risorsa e il codice che la utilizza, in modo da creare un sistema distribuito in cui è possibile effettuare il deploy di applicazioni e servizi, e che consenta di gestire le risorse in maniera “astratta”. Dal punto di vista del consumatore, l’ubicazione non è di per sé importante; ciò che conta è ottenere risposte alle proprie richieste in modo veloce e indolore. Dal punto di vista dello sviluppatore, l’obiettivo principale risiede nel potersi concentrare sulla logica applicativa, piuttosto che doversi confrontare con le particolarità degli ambienti sottostanti. Windows Azure come Soluzione PaaS In una PaaS, non c’è bisogno di conoscere i dettagli tecnici di ciascun componente, né la differenza tra un hard disk RAID 0 e uno RAID 1. Non occorre pensare alla velocità o alla capienza dell’hard disk, né se questo è configurato come C o D. È sufficiente chiedere alla piattaforma dove salvare i propri dati e lasciare tutti i dettagli tecnici dell’operazione alla piattaforma stessa. La piattaforma Windows Azure nasconde completamente questi dettagli tecnici, mettendo a disposizione le API necessarie per una gestione logica delle risorse. È sufficiente creare uno storage, dargli un nome e usare l’endpoint fornito dal sistema per gestire le risorse. L’idea dietro Windows Azure è quella di fornire un sistema operativo in cui è possibile caricare ed eseguire le proprie applicazioni senza aver a che fare con la classica interfaccia di Windows. Per esempio, non è necessario copiare i file sul file system di Windows Azure, né usare la console di gestione di Internet Information Services (IIS) per configurare siti, directory virtuali o application pool. In realtà, non sappiamo neppure se dietro le quinte ci sia IIS. Se hai bisogno di spazio disco, puoi semplicemente creare uno Storage Account e usare l’endpoint fornitoti dal sistema per gestire le risorse dello storage. Con una PaaS, ogni volta che devi salvare dati sul cloud puoi dimenticarti dei dischi rigidi, delle storage area network, e della configurazione dei load balancer. Puoi usare standard quali REST e HTTP per interagire con questo tipo di storage. Dove sono salvati i file? Semplicemente non hai bisogno di saperlo. Sto usando i dischi più performanti presenti sul mercato? Non tocca a te preoccupartene; in una soluzione PaaS tutte le operazioni di gestione del disco (dalla fase di ordinazione fino alla sostituzione di un disco malfunzionante) ricadono sul fornitore della piattaforma. Sulla piattaforma Windows Azure, non è possibile vedere l’ubicazione esatta dello spazio disco che hai noleggiato, non puoi scegliere l’UPS, il modello o il produttore dei dischi rigidi o dei server, oppure i tuoi indirizzi IP, né devi preoccuparti dei nomi delle macchine. In un sistema come questo, ogni accesso a qualsivoglia risorsa consiste in un accesso al relativo servizio. Ciascuna API deve essere esposta come web service. In pratica, un sistema PaaS è una sorta di “SOA for everything” nel quale l’utente: Capitolo 1 Introduzione al Cloud Computing 7 Q Richiede un servizio storage dove salvare i propri file. Q Richiede al servizio di storage di cercare uno specifico file. Q Richiede al servizio di gestione della piattaforma di aumentare o diminuire la scalabilità sulla base delle proprie immediate esigenze. Q Richiede al servizio di storage di creare una nuova cartella. Q Il servizio replica alle richieste dell’utente con una risposta che necessita di essere analizzata. Conosceremo i dettagli di come questa piattaforma funziona nei prossimi capitoli, ma l’idea base è riuscire a scrivere un programma, caricarlo da qualche parte ed eseguirlo senza neppure conoscere l’ubicazione fisica del codice binario o dei dati. Dopo aver pubblicato la tua applicazione, puoi dimenticartene completamente (a parte dover risolvere eventuali bug!), perché sarà la piattaforma stessa a provvedere alla sua gestione. In particolare, la piattaforma: Q Applica le patch non appena queste vengono rese disponibili. Q Replica dati e runtime in modo da garantire fault-tolerance e load balancing. Q Gestisce i dischi e il resto dell’hardware. Per esempio, se un disco subisce un guasto, il sistema usa immediatamente una replica senza che sia necessario alcun intervento da parte dell’utente e senza che questo neppure si accorga del malfunzionamento del disco. Q Se la quantità di dati aumenta, il sistema alloca automaticamente più dischi e riconfigura il load balancer senza alcun downtime. Q Se l’applicazione smette di funzionare, il sistema la riavvia automaticamente. Q Se è necessario maggiore capacità computazionale, l’utente può richiederla in qualunque momento, o addirittura automatizzare questa procedura, come vedremo nei prossimi capitoli Q Se la macchina assegnata all’applicazione dell’utente smette di rispondere, il servizio viene automaticamente spostato in una nuova macchina, senza alcun intervento da parte dell’utente. Grandi opportunità per piccole aziende La mia personale opinione è che il cloud computing – e in particolare la piattaforma Windows Azure — rappresenta una grande opportunità per qualunque organizzazione, e un’opportunità incredibile per le piccole software house. Senza una piattaforma o un’infrastruttura di cloud computing, una piccola azienda non potrebbe competere con società più grandi quando si tratta di sviluppare applicazioni destinate a servire migliaia di utenti contemporaneamente, per il semplice motivo che le sue capacità d’investimento nell’acquisto di hardware sono limitate. Una piccola azienda dovrebbe tenere conto di molteplici aspetti quando progetta una nuova soluzione, come un sito di e-commerce, un’applicazione di advertising o un’applicazione finanziaria per il web. Tra gli aspetti più importanti da considerare vanno annoverati non 8 Windows Azure Passo per Passo soltanto i costi iniziali, ma anche i costi necessari ad assumere personale qualificato per configurare e manutenere, quantomeno: Q Server web per la produzione e lo staging Q Un database cluster Q Router e load balancer Q Firewall e sicurezza In aggiunta, vanno considerati i costi fissi per la banda richiesta dall’applicazione, così come i costi delle licenze del software. E questo investimento non può essere certo limitato a soddisfare le esigenze iniziali. L’azienda deve infatti comprare sin dall’inizio un numero di web server sufficiente a offrire una soluzione fault-tolerant per la propria applicazione a partire già dal primo deployment. I danni collaterali conseguenti a un fallimento possono essere persino più costosi dell’investimento iniziale necessario ad evitare tali situazioni. A parte i costi iniziali, spesso proibitivi, per sviluppare un’applicazione, una piccola azienda necessita di trovare persone altamente competenti per configurare i server nel modo più appropriato ed efficiente possibile. Spesso, queste competenze devono essere cercate all’esterno dell’azienda stessa, il che significa costi addizionali nelle fasi iniziali del progetto. Il ricorso a personale esterno può inoltre porre molteplici problemi se qualcosa va storto una volta raggiunta la fase di produzione, dal momento che il personale dell’azienda può avere poca o nessuna dimestichezza del sistema. Inoltre, assumere nuovo personale (o formare quello già presente) per avere le competenze richieste può costringere l’azienda a posporre la data di rilascio, con conseguente ulteriore lievitazione dei costi. Ammettiamo infine che, nonostante tutti questi sforzi iniziali, l’azienda riesca a mettere in produzione (o vendere) l’applicazione e che gli utenti comincino a usarla. Se il numero di utenti cresce, l’azienda sarà costretta a comprare e configurare nuovo hardware, riconfigurando l’intero sistema grazie al personale appena assunto o a consulenti esterni. Questo può rappresentare un grande problema quando l’applicazione ha successo e il numero di utenti cresce troppo in fretta. Anche se i ricavi derivanti dall’applicazione sono maggiori di quanto ci si aspettasse, malfunzionamenti hardware e altri problemi sono dietro l’angolo (come insegna del resto la Legge di Murphy: “Se qualcosa può andare storto, sicuramente lo farà”). D’altro canto, una grande azienda potrebbe avere le competenze necessarie a sviluppare un ambiente fault-tolerant in grado di gestire eventi simili e, in questo caso, ogni problema potrebbe essere risolto dal personale interno in un ragionevole lasso di tempo. Ma se la società si è avvalsa di consulenze esterne, dovrà comunque spendere ulteriori soldi per risolvere il problema, una volta che questo si sia manifestato, senza contare il fatto che i tempi per l’intervento si allungherebbero notevolmente. Normalmente, le piccole aziende tendono a spendere meno per i servizi esterni, comprando direttamente ciò che ritengono sarà necessario allo sviluppo e alla distribuzione dell’applicazione, spesso sottovalutando l’inesorabilità della Legge di Murphy. Dall’altro lato, però, se il numero di utenti non dovesse raggiungere le previsioni, l’azienda avrà già sprecato una considerevole somma per acquistare hardware in eccesso rispetto agli effettivi bisogni. Se l’azienda dispone di un dipartimento marketing particolarmente efficace, potrebbe lanciare una campagna pubblicitaria per spingere la propria applicazione o servizio. In genere, Capitolo 1 Introduzione al Cloud Computing 9 questo tipo di campagne prevedono un periodo di prova del prodotto per i nuovi utenti. Dal punto di vista del marketing, questa rappresenta una buona pratica, ma può condurre a drammatici picchi nel traffico durante o immediatamente dopo il lancio pubblicitario. Questo conduce a due ordini di problemi: Q Il rischio che i clienti già esistenti rivogliano i loro soldi indietro a causa della ridotta qualità del servizio Q Il rischio che gli utenti che stanno provando l’applicazione non acquistino un servizio percepito come lento e inefficiente Se l’applicazione di cui parliamo è un sito di e-commerce, potete immaginare i problemi che nascerebbero in una situazione simile. I clienti esistenti comincerebbero a sperimentare latenza durante le loro visite al sito, mentre i nuovi utenti vedrebbero un sito assai poco performante. La soluzione più semplice in casi del genere, almeno dal punto di vista tecnico, sarebbe quella di incrementare il livello dell’hardware in concomitanza con il lancio della campagna pubblicitaria, ma in realtà i costi necessari rendono spesso questo approccio poco praticabile. C’è poi un ulteriore elemento da tenere in considerazione. Un gran numero di applicazioni prima o poi devono fare i conti con quello che si definisce “peak time”. Per esempio, le visite ad un sito di e-commerce tendono ad aumentare durante le vacanze o prima della stagione estiva, oppure quando un nuovo prodotto è lanciato sul mercato, o quando si apre una nuova stagione di moda. Analogamente, un’applicazione finanziaria genera normalmente più traffico verso la fine del mese o dell’anno fiscale, mentre un’applicazione dedicata al turismo e ai viaggi presenta picchi di traffico prima delle vacanze. Persino un’applicazione interna all’azienda presenta picchi di maggiore traffico in genere verso la fine del mese, quando molteplici attività devono essere portate a termine (buste paga, consuntivo delle ferie, ecc.) Se un’applicazione o un sito web di un’azienda sperimenta differenti livelli di carico nel corso del mese o dell’anno, ma questa ha optato per un modello di costi fissi, esiste un’intrinseca incongruità, dal momento che per la maggior parte del tempo l’azienda è costretta a pagare per più di quanto effettivamente necessiti, solo per poter fronteggiare i picchi di traffico. Questo senza voler considerare il caso peggiore, in cui l’applicazione o il sito web della nostra ipotetica azienda si rivelino degli insuccessi, con conseguente perdita degli investimenti iniziali in hardware e licenze. Al contrario, grazie all’impiego di soluzioni cloud, anche una piccola azienda è in grado di iniziare la propria attività con uno sforzo contenuto e un costo minimo. Ecco quali sono i principali vantaggi derivanti dall’utilizzo di un’infrastruttura cloud-based: Q Nessun costo iniziale per i web server. Q Nessun costo fisso per la connettività di rete. Q Non è richiesta alcuna abilità particolare per l’installazione dei server. Q Nessun costo iniziale per i cluster di database. Q Le competenze richieste per la configurazione di un cluster di database non sono necessarie. Q Nessun router o load balancer da acquistare o configurare. 10 Windows Azure Passo per Passo Q Nessun firewall o software di sicurezza da comprare o configurare. Q Non è richiesta alcuna competenza specifica per la messa in sicurezza del sistema sottostante. Q Nessun costo per l’ambiente di staging. Q Nessuna licenza da comprare. Come questo elenco rivela, tutti gli sforzi iniziali solitamente richiesti da una soluzione onpremises sono bypassati completamente. Si inizia a pagare solo nel momento in cui viene pubblicata la soluzione, e anche in quel caso è possibile aggiustare (incrementandoli o diminuendoli) la capacità computazionale e lo spazio di storage praticamente in tempo reale per adeguarli alle effettive necessità. Inoltre, nel caso in cui il progetto si riveli improduttivo, si può smettere in qualunque momento di pagare. Grandi opportunità per grandi aziende I vantaggi del cloud computing appena descritti si applicano ovviamente anche alle grandi aziende, ma con alcune differenze, quali ad esempio: Q Le grandi aziende generalmente dispongono di team appositamente dedicati all’IT e che probabilmente dispongono già delle competenze richieste per installare, configurare e manutenere un sistema di livello enterprise. Q Questi team sono in grado di gestire i differenti aspetti di una soluzione moderna, dai problemi di sicurezza alla performance della rete sino alle politiche di installazione. Q Lo stesso team può essere utilizzato in differenti progetti, riducendo il costo marginale di una soluzione. Q Team di grandi dimensioni dispongono in genere di procedure fault-tolerant e di persone appositamente preposte a rispondere ad eventuali avvisi di malfunzionamento. Q Le grandi aziende solitamente avviano un nuovo progetto di business utilizzando macchine che già possiedono e che possono soddisfare il carico iniziale. È importante ricordare, però, che le soluzioni on-premises comunque incorrono in costi variabili nel corso del tempo: dai costi dell’energia elettrica, agli stipendi del personale IT, fino al noleggio della connettività. Altre questioni riguardano tanto le grandi quanto le piccole e medie aziende: Q Configurare uno stesso server affinché possa soddisfare le necessità di progetti completamente diversi può rivelarsi problematico. Per esempio, un progetto potrebbe richiedere una configurazione incompatibile con quella richiesta da un altro. Q Possono verificarsi problemi di scalabilità quando più applicazioni condividono gli stessi componenti. Da un punto di vista strettamente tecnico, usare server e infrastrutture differenti per ciascuna applicazione sarebbe la soluzione ideale, ma ciò avrebbe un impatto notevole sui costi complessivi. In un’infrastruttura di tipo cloud, tuttavia, i responsabili IT possono tenere separate le applicazioni e i servizi sia dal punto di vista logico che fisico, senza dover acquistare l’hardware necessario in anticipo. Capitolo 1 Introduzione al Cloud Computing 11 Nella mia esperienza di consulente, uno dei maggiori problemi che il cloud computing deve affrontare nelle grandi organizzazioni è dato dalla variabilità dei costi fatturati. Molte organizzazioni preferiscono allocare una somma fissa per ciascun progetto, piuttosto che assumersi il rischio di avere costi variabili. Le aziende dovrebbero modificare il loro approccio al cloud computing. Questo non dovrebbe rappresentare un grosso ostacolo, poiché sono già stati compiuti salti analoghi negli ultimi vent’anni in molti campi della vita economica e personale. Ecco alcuni esempi: Q Le compagnie telefoniche hanno cambiato più volte il loro sistema di fatturazione. Ricordo che nella mia infanzia esisteva una sola modalità di tariffazione, ossia una tariffa mensile con costi fissi per ciascuna chiamata. Oggigiorno il consumatore può scegliere tra centinaia di offerte e piani tariffari, sia personali che business. Il sistema di tariffazione del cloud è molto simile, potendo passare da un costo fisso per funzionalità predeterminate, a una tariffa totalmente variabile. Q In molti paesi, un sempre maggior numero di persone vive in affitto. Acquistare una casa può essere un buon investimento, ma a differenza degli immobili l’hardware non acquista valore col passare del tempo. Molte compagnie non possiedono l’immobile dove hanno i loro uffici. Quando hanno un problema, possono chiedere assistenza al proprietario. Sul cloud avviene qualcosa del genere: problemi e patch ricadono sulle spalle del proprietario dell’infrastruttura, non su colui che la usa. Q Molte aziende noleggiano auto per i loro impiegati, piuttosto che comprarle. Il noleggio ha tipicamente costi fissi, almeno entro limiti ragionevoli nell’utilizzo (relativi, ad esempio, al chilometraggio). Si paga di più soltanto se si superano questi limiti. Il cloud computing è essenzialmente la stessa cosa di un noleggio. Si paga una tariffa fissa e si accettano alcune limitazioni (ad esempio sulla banda e sullo storage), e solo se si eccedono queste limitazioni si pagano tariffe maggiorate. Q Molte aziende già noleggiano hardware come personal computer, notebook e server. Un po’ come avviene su una piattaforma cloud, solo che questa include anche la banda, i router, i firewall e così via. È importante sottolineare come, nel cloud, l’hardware non è sostituito solo quando si verifica un problema (come quando in casa propria si rompe improvvisamente un tubo dell’acqua), ma anche quando nuovi modelli diventano disponibili. Il servizio di fornitura elettrica è un altro buon esempio di come il cloud funzioni. Quando nuove apparecchiature si rendono disponibili sul mercato, come ad esempio un nuovo tipo di contatore, non spetta al consumatore sostituire il vecchio apparecchio con il nuovo. Ad esempio, nel 2004 il mio contatore è stato sostituito con un nuovo modello dotato di connessione remota e di un display a LED, senza che per questo abbia dovuto pagare alcunché. I relativi costi sono stati assorbiti nelle fatture che già stavo pagando alla compagnia elettrica. Allo stesso modo, non è necessario pagare quando Microsoft installa nuovi firewall o router in un Windows Azure data center. Il cloud computing incide anche sui sistemi open source, dal momento che i consumatori non devono pagare alcuna licenza: il costo delle licenze è infatti incluso nelle tariffe di noleggio del cloud. In una soluzione on-premises, i sostenitori dell’open source asseriscono che uno dei principali vantaggi nell’uso di sistemi operativi open source rispetto a un sistema Windows consiste nel non dover pagare i costi delle relative licenze. Nel cloud, questa 12 Windows Azure Passo per Passo affermazione semplicemente non trova applicazione, visto che gli utenti pagano per il sistema nel suo complesso, inclusi server e altro hardware, oltre che la connessione di rete. Un utente può scegliere la piattaforma di cloud che preferisce e comparare i relativi prezzi senza doversi preoccupare dei costi delle licenze. Windows Azure e il Cloud Computing Windows Azure è un sistema operativo per il cloud (e ospitato nel cloud) che opera una completa astrazione rispetto ai componenti fisici del sistema: l’utente deve soltanto scegliere le caratteristiche del servizio, i componenti e i livelli di Service Level Agreement (SLA) senza dover configurare alcun hardware o software. Per garantire la scalabilità e la faulttolerance, i dati immagazzinati in Windows Azure vengono replicati in tre nodi e il load balancer lavora in modo del tutto trasparente. Al momento in cui scrivo queste pagine, per quanto riguarda la capacità computazionale l’utente può scegliere tra una varietà di macchine virtuali che si differenziano sulla base dei seguenti componenti: Q CPU È possibile variare da un singolo processore a 1 GHz fino a un processore a 8 core, per chi intende sfruttare il parallelismo verticale. Q RAM Può variare da 768 MB fino a 8 GB. Non è possibile scegliere né il produttore, né la velocità, né altre caratteristiche. Q Lo spazio disco locale Parte da 20 GB e può arrivare fino a 2 Terabyte per ciascuna istanza. Non è necessario scegliere la velocità, il controller, o il tipo di ridondanza. Q I/O performance elevata. La scelta è elementare e include tre opzioni: bassa, moderata o I costi di noleggio possono includere alcune o tutte queste caratteristiche. Quando l’utente eccede questi limiti, il sistema di fatturazione comincia ad aggiungere costi aggiuntivi. In cinque minuti, è possibile avere il proprio servizio o applicazione su Windows Azure perfettamente funzionante. Se c’è bisogno di scalare verso l’alto, si può decidere di incrementare il numero di macchine utilizzate semplicemente da un file di configurazione e nel giro di cinque minuti, le macchine aggiuntive saranno perfettamente operative. Allo stesso modo, se si vuole diminuire la capacità computazionale, è possibile ridurre il numero di macchine in un istante e il sistema di fatturazione cesserà di conteggiare immediatamente le macchine dismesse. È anche possibile cambiare le dimensioni delle macchine in qualunque momento; in questo caso, però, occorrerà attendere un po’ più a lungo prima di riavviare il servizio, perché il sistema ha bisogno di effettuare un nuovo deploy dell’applicazione. Questo tipo di operazioni in genere richiede circa cinque minuti, trascorsi i quali l’applicazione è di nuovo in esecuzione in nuove istanze su nuove macchine. I costi sono dunque proporzionali alla configurazione scelta ma, e questo è importante, la configurazione può essere cambiata in ogni momento sulla base delle esigenze. Ogni aspetto tecnico del deployment ricade tra le responsabilità di Microsoft. Per fortuna, nessuno conosce Microsoft Windows Server 2008 SP2 (il sistema operativo su cui Windows Azure è al momento basato) meglio della stessa Microsoft, così come nessuno meglio di Capitolo 1 Introduzione al Cloud Computing 13 Microsoft conosce il funzionamento interno del .NET Framework, il kernel del sistema operativo, i componenti di Internet Information Services, SQL Server, e così via. Analogamente, nessuno può applicare patch su funzionalità o su aspetti legati alla sicurezza più rapidamente di Microsoft. Anche se un amministratore di sistema controllasse le newsletter o i feed 24 ore al giorno, sarebbe comunque solo dopo che Microsoft li ha già installati automaticamente sulla piattaforma Windows Azure non appena disponibili. Su Windows Azure, il deployment di ogni applicazione avviene seguendo un modello che descrive i bisogni dell’applicazione stessa. Lo sviluppatore può richiedere una certa quantità di spazio disco, e Windows Azure provvederà automaticamente. Ciò detto, non è però possibile richiedere un particolare controllo SCSI (Small Computer System Interface), piuttosto che una configurazione RAID 5 (che, peraltro, sul cloud sarebbe il più delle volte inutile). L’unica cosa che occorre fare è assicurare che l’applicazione disponga di spazio disco sufficiente. Una volta che, grazie alla scalabilità e alla ridondanza dell’ambiente cloud, hai raggiunto i livelli di performance richiesti dalla tua applicazione, non c’è alcun bisogno di conoscere i dettagli di funzionamento interno della piattaforma. Non c’è insomma nessun valore aggiunto nel conoscere il tipo di dischi su cui l’applicazione gira (oltretutto, questo ci evita i rischi derivanti dall’aver scelto i dischi sbagliati!). Windows Azure nasconde molti dei dettagli che troviamo su una soluzione on-premises. Ogni risorsa è esposta come servizio (ad esempio, il servizio di storage account per la gestione dei file) utilizzando protocolli standard. Tutti i dettagli dello storage sono resi completamente trasparenti agli sviluppatori, su qualunque piattaforma. Le risorse fisiche sono esposte dall’infrastruttura come servizio, così che lo sviluppatore non abbia bisogno di scrivere codice specifico per quella risorsa in modo da dover gestire dettagli come: Q L’ubicazione fisica delle risorse Q Gli hard disk installati sulla macchina Q Il nome dei server Q Il percorso di rete Q IIS virtual directory Q Indirizzi IP delle macchine Allo stesso modo, gli sviluppatori .NET generalmente non hanno bisogno di sapere come il garbage collector (GC) funzioni internamente; tutto ciò di cui hanno bisogno è sapere come rilasciare gli oggetti in un modo appropriato, così che il garbage collector possa svolgere il proprio lavoro nel modo più efficiente possibile. Non hanno bisogno di specificare al garbage collector quando avviarsi per pulire la memoria, e nella maggior parte dei casi sarebbe controproducente lasciare allo sviluppatore un simile compito. Analogamente, nel cloud la conoscenza dei dettagli interni del servizio di storage locale non è importante, mentre è fondamentale sapere come aprire e chiudere i file correttamente. Per raggiungere una risorsa remota l’applicazione deve chiamare il servizio che espone la risorsa stessa. Dal punto di vista tecnico, si usa l’URI del servizio per inserire, aggiornare o cancellare una risorsa, mentre si utilizza il pattern OData REST per le query al servizio aventi per oggetto le risorse esistenti (come liste, filtri, ordinamenti, paginazione, ecc.). 14 Windows Azure Passo per Passo Questo di solito solleva una domanda: il codice che ho scritto girerà bene su Windows Azure? La risposta è: dipende. Se abbiamo sviluppato l’applicazione nel modo opportuno, disaccoppiandola dalle dipendenze e separando le funzionalità in layer appropriati, è probabile che, con pochi o nessun cambiamento, l’applicazione girerà altrettanto bene (o persino meglio) sul cloud (se è necessario salvare file in uno storage condiviso, tuttavia, alcuni adattamenti del codice saranno comunque necessari). Al contrario, se il codice è monolitico ovvero non è stato fatto adeguato uso delle tecniche di programmazione orientate agli oggetti (object-oriented programming techniques) o, peggio ancora, vi trovate di fronte a un caso di “spaghetti code” che mischia elementi di user interface con logica business o di accesso ai dati, è verosimile che l’applicazione necessiti di un pò di lavoro per funzionare con un differente tipo di storage. Comunque, in genere quando un’applicazione funziona con SQL Server, è probabile che possa essere portata su Windows Azure e SQL Azure con minime variazioni. Se hai scelto di utilizzare il servizio di storage di Windows Azure piuttosto che SQL Azure come servizio di storage per la tua applicazione, e hai ben strutturato la tua soluzione in layer, puoi sostituire il tuo attuale livello di accesso ai dati con uno nuovo (o adattare quello già esistente). Il servizio di storage espone le risorse come servizio OData usando lo stesso pattern di Windows Communication Foundation (WCF) Data Services nel .NET Framework 4.0 (in precedenza conosciuto nel .NET 3.5 come ADO.NET Data Services). Se hai scelto questo tipo di tecnica di accesso ai dati per la tua soluzione client on-premises, hai soltanto bisogno di adattare il codice in modo da utilizzare il modello di sicurezza esposto da Windows Azure e il gioco è fatto. Nei prossimi capitoli, esploreremo i vari servizi e le diverse caratteristiche esposte dall’intera piattaforma Windows Azure. Cominceremo con una descrizione completa delle varie feature della piattaforma, sia di quelle rilasciate che di quelle annunciate, dopodiché cominceremo a scrivere codice nell’ambiente locale simulato, per arrivare ad effettuare il deploy del codice su un’istanza nel cloud. Vedremo come usare il servizio di storage in modo efficiente, e come lavorare con OData e WCF Data Services. Gli ultimi capitoli sono dedicati a SQL Azure e a Windows Azure AppFabric, che rappresentano al momento i due principali componenti costruiti sopra Windows Azure. L’ultimo capitolo è dedicato ad un semplice esempio che impiega tecniche di OOP e pattern per disaccoppiare la user interface e il livello business dai componenti di accesso ai dati. Riepilogo In questo capitolo abbiamo visto una breve introduzione al cloud computing, a cominciare dai principi basilari fino ad una sintetica introduzione alla strategia seguita da Microsoft per il cloud. Abbiamo visto alcuni dei principi comuni e delle teorie dietro questa nuova ondata nell’industria informatica.