Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato finale in Sistemi Multimediali Gestione di Basi di Dati in ambienti di Cloud Computing Anno Accademico 2010/2011 Candidato: MIRIAM DURAZZO matr. N46/000136 I Alla mia famiglia che mi ha incoraggiata e sostenuta giorno per giorno. Ai miei amici che mi hanno regalato un sorriso nei momenti più difficili. II Indice Introduzione 4 Capitolo 1. Il Cloud Computing 5 1.1 1.2 1.3 1.4 1.4.1 1.5 1.6 Breve approccio storico Virtualizzazione, Multitenancy e Grid Computing Architetture e modelli di servizio per il Cloud Computing Database as a Service (DaaS) DaaS nella gestione dei dati geospaziali Scenari per il Cloud Computing Vantaggi e svantaggi del Cloud Computing 6 6 7 9 11 11 13 Capitolo 2. Amazon SimpleDB e Amazon Relation Database Service (RDS) 2.1 2.2 2.3 2.3.1 2.3.2 2.4 2.4.1 15 Storia di Amazon Infrastruttura, protocolli e terminologia di AWS SimpleDB Concetti base del servizio SimpleDB Programmazione del servizio SimpleDB Amazon Relation Database Service (RDS) Il servizio RDS 15 16 17 18 19 22 23 Bibliografia 26 III Gestione di Basi di Dati in ambienti di Cloud Computing Introduzione L‟evoluzione delle tecnologie informatiche e dei mezzi di comunicazione è inarrestabile e ogni giorno vengono messi a disposizione dei cittadini nuovi strumenti e soluzioni sempre più sofisticate e integrate con la rete Internet, che consentono di soddisfare crescenti esigenze di informatizzazione e di comunicazione. In tale quadro, il Cloud Computing è un insieme di modelli di servizio che più di altri si sta diffondendo con grande rapidità tra imprese, pubbliche amministrazioni e cittadini perché incoraggia un utilizzo flessibile delle proprie risorse (infrastrutture e applicazioni) o di quelle messe a disposizione da un fornitore di servizi specializzato. Scopo di questa tesi è quello di verificare come l'infrastruttura del Cloud Computing sta modificando le abitudini nell'utilizzo di risorse che possono andare dal semplice software di posta elettronica fino ad un insieme di server per l'archiviazione di una grande mole di dati. Sarà analizzato come avviene la gestione delle Basi di Dati tramite proprio l'infrastruttura summenzionata (il cui servizio porta il nome di Database as a Service, DaaS) e come questa porti innumerevoli benefici. Saranno verificate le principale proposte che offre il mercato in termini di gestione della Base di Dati (Amazon). 4 Gestione di Basi di Dati in ambienti di Cloud Computing Capitolo 1 Il Cloud Computing[1][2] Nella crescente complessità della società dell'informazione vengono prodotti ed elaborati un numero sempre maggiore di dati. I nostri elaborati sono oggi salvati sul computer di casa o dell'ufficio, ma la gestione e la condivisione di una quantità crescente di informazioni richiede un sistema più flessibile che garantisca il salvataggio, la gestione e la condivisione delle informazioni. Per rispondere a questa nuova esigenza nasce il Cloud Computing, un innovativo sistema di gestione. Il Cloud Computing risolve alcuni problemi pratici, come l'aggiornamento del back up e la possibilità di costruire network sociali di computer, utili soprattutto nella gestione di dati nelle piccole e medie imprese. Il Cloud dà la possibilità di navigare dentro una miniera enorme di dati e, da lì, ricavare informazioni. Alcune perplessità su questo tipo di tecnologia riguardano la sicurezza e la privacy, ma è stato dimostrato che il sistema è sicuro e che l'insieme delle informazioni nel Cloud può essere utilizzata solo dall'utente certificato attraverso chiavi di accesso. Ma nello specifico cos‟è il Cloud Computing? Per dare una giusta definizione a tale espressione analizziamo anzitutto l‟origine del termine. La parola CLOUD (in italiano NUVOLA) fa riferimento all‟immagine più utilizzata per raffigurare il concetto di Internet nei diagrammi di rete,ovvero una nuvola. È una metafora decisamente buona: al giorno d'oggi i dati e i programmi non devono necessariamente risiedere sul PC, ma possono infatti essere "ospitati" (o memorizzati) su Internet o, come si suol dire, "in the cloud". 5 Gestione di Basi di Dati in ambienti di Cloud Computing Naturalmente Cloud Computing non è un sinonimo di Internet,anche se prevede un coinvolgimento di tutta la rete. Con il termine CLOUD COMPUTING, invece, si intende semplicemente gestire esternamente (online) le applicazioni e le attività, invece che all'interno delle quattro mura di casa o dell‟ufficio. Quindi è una modalità di elaborazione basata su Internet in cui le risorse sono distribuite con un approccio molto simile a quello di una centrale elettrica o telefonica. Ogni utilizzatore, avendo precedentemente sottoscritto un abbonamento (a costo fisso o a consumo, pasas-you-go ), preleva le risorse in base alle sue esigenze senza sapere a quale centrale è connesso né cosa avviene all‟altro capo del filo con cui è collegato al suo fornitore. Dunque l‟obiettivo del Cloud Computing è molto semplice : affidare a qualcun altro il compito di gestire l‟infrastruttura informatica aziendale eliminando la spesa necessaria per la gestione interna. In tal modo vi è un risparmio in costi per l‟hardware, per le licenze software e di conseguenza di tutte le risorse necessarie per la relativa manutenzione. 1.1 Breve approccio storico[3] È noto considerare la storia dell‟informatica con un percorso ciclico che si ripete, che va dalla centralizzazione alla decentralizzazione per poi tornare al ricentralizzarsi, il tutto condito dall‟aumento della banda e della potenza delle CPU (processori). Con il Cloud Computing siamo alla terza rivoluzione informatica. La prima fu l‟avvento del personal computer, la seconda la nascita di Internet e la terza ha avuto avvio con la virtualizzazione e appunto il Cloud Computing. Quasi 50 anni fa un qualcosa di simile al Cloud Computing avvenne con la creazione di agenzie, di servizi e di sistemi time-sharing , ovvero sistemi centrali che prevedevano l‟utilizzo di mainframe dislocati in istanze diverse rispetto ai terminali utilizzati dagli utenti. Tali terminali erano connessi al mainframe attraverso linee telefoniche dedicate: in tal caso veniva utilizzato un software configurato solo nel mainframe e non sui terminali. Il primo ad accennare al Cloud Computing fu John McCarthy padre dell‟intelligenza artificiale. Nel 1961, al centenario del Mit, disse che il metodo time-sharing avrebbe condotto ad un futuro dove la potenza dei calcolatori e delle applicazioni sarebbe stata venduta secondo il modello economico della utilità, come per l‟acqua e l‟elettricità. Con l‟avvento, però, dei personal computer è nato l‟approccio di “ liberare i software” dal mainframe e di soddisfare un senso di personalizzazione che permetteva di “creare” sistemi adeguati alle esigenze e ai gusti individuali. Uno dei principali profeti nel campo informatico, Ted Nelson, anticipò questo bisogno attraverso il libro “Computer Lib/Dream Machines” del 1974. Successivamente, con l‟avvento del modello client-server , circa nel 1980, una certa dislocazione periferica avveniva solo per i dati tramite l‟utilizzo di un repository centrale e con personal computer capaci di eseguire in loco i programmi. 1.2 Virtualizzazione, Multitenancy, Grid Computing[2] Parlando del Cloud Computing i termini che emergono sono : La VIRTUALIZZAZIONE DELL’HARDWARE fa riferimento alla possibilità di sfruttare le risorse di un PC per creare una o più macchine virtuali in grado di simulare l‟hardware fisico di un sistema di elaborazione. Questo tipo di tecnica è oggi sfruttata per il consolidamento di 6 Gestione di Basi di Dati in ambienti di Cloud Computing più server su di una macchina fisica e proprio per questo motivo è importante per il Cloud Computing. Si presti attenzione, la virtualizzazione dell‟hardware non deve essere confusa con l’application virtualization che non ha niente a che fare con il Cloud, ma fa riferimento a tecnologie che consentono di trasformare le normali applicazioni in applicazioni virtuali, le quali agli occhi dell‟utente si comportano come normali programmi, in realtà, però, non interagiscono con il sistemo operativo, ma bensì con lo strato software che le incapsula. Il MULTITENANCY è un concetto che viene spesso utilizzato per descrivere alcune piattaforme per il Cloud. Si riferisce a un principio di architettura del software in cui una singola istanza del software gira su un server, che serve più clienti (tenants, cioè inquilini). Il multitenancy è l'opposto di una architettura multi-istanza, dove separate istanze del software (o sistemi hardware) sono istituite per diversi clienti. Con un‟architettura multitenant un‟applicazione software è progettata per partizionare virtualmente i dati e la configurazione, così che ogni cliente lavora con un'istanza personalizzata delle applicazioni virtuali. Il GRID COMPUTING è un‟infrastruttura di calcolo distribuito, utilizzata per l‟elaborazione di grandi quantità di dati, mediante l‟uso di una vasta quantità di risorse. In particolare, tale sistema permette la condivisione coordinata di risorse all‟interno di un‟organizzazione virtuale. Prevede che più computer collegati in rete lavorino contemporaneamente ad uno stesso problema, ad esempio, la risoluzione di un complesso calcolo scientifico. In questo caso particolare si divide il singolo problema computazionale in modo che possa essere elaborato simultaneamente su più elaboratori. Nel Cloud Computing le cose funzionano al contrario, in un certo senso, ovvero un singolo provider fornisce a più organizzazioni le risorse per l‟esecuzione di applicazioni simili. 1.3 Architetture e modelli di servizio per il Cloud Computing[2][5][6] L'architettura del Cloud Computing prevede uno o più server reali, generalmente in architettura ad alta affidabilità, fisicamente collocati presso il data center del fornitore del servizio. Il servizio, per il quale è disponibile un fornitore, è ottenuto come trasformazione di un elemento dell‟infrastruttura informatica di una rete. Esso viene eventualmente spostato e isolato per permetterne la trasformazione. Il fornitore di servizi espone delle interfacce per elencare e gestire i propri servizi. Il cliente amministratore utilizza tali interfacce per selezionare il servizio richiesto (ad esempio un server virtuale completo oppure solo storage) e per amministrarlo (configurazione, attivazione, disattivazione). Il cliente finale utilizza il servizio configurato dal cliente amministratore. Le caratteristiche fisiche dell'implementazione (server reale, localizzazione del data center) sono irrilevanti. 7 Gestione di Basi di Dati in ambienti di Cloud Computing Il servizio potrebbe essere un componente software o, addirittura, un intero ambiente di lavoro. Con l‟espressione “as a service” (“come un servizio”) , preceduta dall‟iniziale del servizio fornito si formano alcuni degli acronimi più utilizzati in questo settore come : SaaS (Software as a Service), PaaS (Platform as a Service), IaaS (Infrastructure as a Service). Un modo per identificare tutte queste possibili variazioni è l‟ultilizzo della sigla XaaS, dove la “X” è considerata proprio come una variabile. Gli acronimi prima elencati costituiscono i “modelli di servizio” maggiormente utilizzati oggi e possono essere visti come i tre differenti tipi di Cloud Computing. Ad essi se ne aggiunge un quarto, il “Database as a Service” (DaaS). Esaminiamo nello specifico le tre tipologie fondamentali del Cloud Computing: SaaS (Software as a Service) – Consiste nell‟utilizzo di programmi in remoto, spesso attraverso un server web. È un modello di distribuzione del software applicativo dove un produttore di software sviluppa, opera (direttamente o tramite terze parti) e gestisce un'applicazione web che mette a disposizione dei propri clienti via internet. Il concetto di "software as a service" ha iniziato a circolare nell'anno 2000 ed è associato principalmente al saggio di Tim O'Reilly su "The Open Source Paradigm Shift". Questa architettura può essere adottata sia dal produttore del software, per fornire il proprio prodotto direttamente, sia da un semplice fornitore di servizi. A entrambi è demandata la gestione degli aggiornamenti e l‟effettuazione della manutenzione dell‟applicativo con tutti gli oneri che esso comporterà. Dal momento che il modello di software come prodotto domina il mercato, l‟idea di software come servizio può apparire quasi aliena: anziché “possedere” integralmente un software importante, si propone ai clienti di pagare una sottoscrizione per un software che viene eseguito sui server di qualcun altro e che non sarà più disponibile quando si smette di rinnovare la sottoscrizione. Per questa ragione è fondamentale che il potenziale cliente comprenda che il passaggio dal modello tradizionale al modello SaaS prospetta vantaggi diretti e ben quantificabili. Ad esempio i costi sono strettamente legati all‟utilizzo, pertanto possono crescere progressivamente senza richiedere un forte investimento iniziale. Dunque i clienti non pagano per il possesso del software bensì per l'utilizzo dello stesso. Essi utilizzano il software tramite API accessibili via web. Il termine SaaS è diventato il termine di riferimento, rimpiazzando i precedenti termini Application service provider (ASP) e On-Demand. In effetti la differenza sostanziale tra ASP e SaaS è che le piattaforme ASP eseguono di norma un‟ applicazione in uno spazio dati comune, mentre il paradigma SaaS crea una sola istanza del software. Si differenzia inoltre dall'architettura multitenant nella quale troviamo tante macchine virtuali quanti sono i clienti, ma ognuno dei clienti gode di uno spazio dati separato. PaaS (Platform as a Service) – È simile al SaaS, ma, invece che uno o più programmi singoli, viene eseguita in remoto una piattaforma software che può essere costituita da diversi servizi, programmi, librerie, etc. In questo modo gli utenti coinvolti oltre che a utilizzare i software possono, grazie alle piattaforme a disposizione, sviluppare, integrare ed erogare le applicazioni, avendo di fatto il pieno controllo sugli strati applicativi. Quindi, gli elementi del PaaS permettono di estendere, testare, implementare e gestire le applicazioni aziendali (senza i costi e la complessità associati all'acquisto), la configurazione, l'ottimizzazione e la gestione dell'hardware e del software di base; inoltre, essi possono essere impiegati per la progettazione di design, sviluppo di applicazioni e di servizi applicativi come la 8 Gestione di Basi di Dati in ambienti di Cloud Computing collaborazione in team, l'integrazione Web, l'integrazione del database, la sicurezza e la gestione dello stato. Tali servizi possono essere impiegati come una soluzione integrata sul Web. Il PaaS tuttavia è l‟aspetto tecnologico del Cloud Computing meno sviluppato ed è anche quello che presenta più rischi per l‟utilizzatore. Ad esempio, migrare verso un altro provider potrebbe essere molto oneroso, oppure, se chi eroga servizi dovesse cessare la propria attività l‟impatto sulle attività di un‟azienda che utilizza PaaS potrebbero essere devastanti. Per questo, molti fornitori di servizi PaaS (come Google) hanno iniziato ad offrire una soluzione alternativa che prevede l‟esecuzione delle applicazioni anche on-premise, cioè entro le mura dell‟azienda. IaaS ( Infrastructure as a Service) – Consiste nell‟utilizzo di risorse hardware in remoto con una caratteristica imprescindibile: le risorse vengono utilizzate su richiesta o su domanda nel momento in cui un cliente ne ha bisogno, non vengono assegnate a prescindere dal loro utilizzo effettivo. Dunque consiste nell‟utilizzo da remoto di software, hardware e di tutte le componenti che possono servire allo storage di dati e al networking, come server e quant‟altro. Il provider, in questo caso, mette a disposizione dell‟utente non più la fornitura di software o di una piattaforma, ma una o più macchine (fisiche o virtuali) che egli potrà utilizzare e controllare da remoto in base alle proprie esigenze. Il fornitore, però, non offre solo le infrastrutture hardware ma anche la licenza del sistema operativo e tutto il sistema di virtualizzazione necessario. Il cliente che usufruisce del servizio paga, nella maggior parte dei casi, in base all‟utilizzo con una tariffa che dipende dall‟hardware richiesto, ma ci sono anche tariffe a costo mensile fisso (flat). Il fornitore stabilisce, anche, un livello di disponibilità che si impegna a mantenere. Oltre ai notevoli vantaggi in termini di ottimizzazione e razionalizzazione delle risorse, l‟utente finale può contare su un‟elevata flessibilità e scalabilità del servizio, che può essere incrementato o diminuito rapidamente (ad esempio, in termini di numero e capacità dei server cloud utilizzati) per consentirgli di affrontare periodi di crescita o di abbassamento della domanda. Affidandosi a provider specializzati, le aziende riescono inoltre a liberare da gravosi compiti di gestione i propri team IT, guadagnando tempo prezioso da dedicare ad attività maggiormente produttive. 1.4 Database as a Service (DaaS)[7] DaaS (Database as a Service) consiste in un servizio che consente di creare, memorizzare e accedere ad apposite Basi di Dati distribuite. 9 Gestione di Basi di Dati in ambienti di Cloud Computing La gestione delle Basi di Dati viene, pertanto, realizzata dai Service Provider di Database attraverso meccanismi che permettono di creare, archiviare e accedere ai dati. La totale responsabilità di tali operazioni ricade sugli stessi provider. La gestione prevede anche il backup dei dati, l‟amministrazione, il restauro, l‟eventuale riorganizzazione della struttura per il recupero di spazio o il ripristino di una diversa disposizione dei dati e la migrazione. Attraverso questo nuovo paradigma gli utenti avranno una vita maggiormente semplificata in quanto l‟accesso ai dati potrà essere effettuato tramite l‟hardware e il software messo a disposizione (previo pagamento del servizio) dal fornitore di servizi, invece di una complessa organizzazione e infrastruttura informatica propria. L‟unica operazione che l‟utente dovrà compiere sarà quella di accedere e operare su un sistema informatico già pronto per l‟uso. Il primo servizio DaaS fu introdotto nel 2002 con la piattaforma NetDB2. Oggi il servizio è offerto da diversi operatori che propongono, unitamente al servizio DaaS, i servizi SaaS, IaaS e PaaS : Amazon, Google e Microsoft. I più diffusi sono : SimpleDB di Amazon e Cloud SQL di Google. Entrambi prevedono un meccanismo per organizzare i dati archiviati come un servizio. Tale modello riduce la necessità di acquistare costosi hardware per lo storage della Base di Dati, di software per la gestione della stessa oltre alle attività di manutenzione e aggiornamento per la buona resa del servizio. Tutto ciò è compreso direttamente nel servizio di Database in Cloud con i vantaggi che ne derivano. Senza dimenticare che oggi le basi di dati tendono quantitativamente a crescere e pertanto i costi potranno lievitare nel momento in cui le stesse basi di dati dovranno coprire le esigenze crescenti delle imprese e degli enti utilizzatori. Un ulteriore fattore da considerare, nel momento in cui parliamo delle basi di dati, è la migrazione : migrare da una versione di software, che gestisce le BD ad un‟altra, risulta spesso un‟operazione difficile e laboriosa. Le difficoltà da affrontare nel momento in cui si realizza un “Database as a service” sono: le prestazioni dovute alla distanza per l‟accesso ai dati l‟infrastruttura per garantire la riservatezza dei dati il design interfaccia utente per tale servizio Le prestazioni, in questo contesto, sono profondamente legate alle prestazioni della rete. Utilizzare delle connessioni ad elevata velocità, come la fibra ottica, permetterà di aumentare il livello prestazionale offerto dal servizio. Ciò, però, comporterà delle spese maggiori e bisogna anche tener conto che laddove si presenti la necessità di utilizzare connessioni wireless, esse non saranno affidabili e veloci come una connessione wired. Mettere in preventivo eventuali decadenze del servizio offerto, legate alle decadenze della rete, farà parte della politica di gestione dell‟impresa o dell‟ente utilizzatore. La riservatezza dei dati rappresenta uno dei punti cruciali nel momento in cui si gestisce una Base di Dati tramite infrastruttura Cloud Computing. Sappiamo che nel momento in cui una società, un ente o una grande corporazione decide di gestire in Cloud una serie di dati, questi dovranno, per forza, risiedere in dispositivi di storage presenti nei locali del fornitore di servizi. Questo insieme di dati potrebbe essere molto prezioso anche per lo stesso utilizzatore, quindi il fornitore deve garantire delle elevati ed efficienti misure di sicurezza per proteggere la riservatezza delle informazioni in questione. Una possibile soluzione potrebbe essere la crittografia. 10 Gestione di Basi di Dati in ambienti di Cloud Computing Il fornitore di servizi di database in Cloud, infine, deve presentare un‟interfaccia utente appropriata. I requisisti, facente parte di tale interfaccia, dovrebbero essere la semplicità di utilizzo, ma nel contempo, un elevato grado di efficienza e facilità nella creazione di applicazioni. 1.4.1 DaaS nella gestione dei dati geospaziali[8] In ambito geospaziale vengono molto utilizzati i servizi DaaS. Infatti la necessità di accedere a grandi moli di dati, per elaborazioni che restituiscono piccoli sottoinsiemi delle basi dati analizzate, è ideale per un utilizzo di servizi DaaS. Vari servizi specifici come il WMS (Web Map Service), il WFS (Web Features Services), il WCS (Web Coverage Services), che restituiscono rispettivamente Mappe, Features e Coverage, si basano sulla logica DaaS e sono di fatto veri e propri servizi DaaS. Immaginiamo di volere sul nostro smartphone una piccola immagine del luogo dove ci troviamo che però sia il frutto della sovrapposizione dello stradario, della situazione meteo e della posizione di ristoranti,di parcheggi e di alberghi. Senza i servizi DaaS il software che elabora queste banche dati dovrebbe (dopo essere stato installato sul cellulare) prima scaricare l'elenco dei ristoranti, poi dei parcheggi, poi degli alberghi e poi tutte le immagini meteo per elaborare il tutto, generare una piccola mappa e visualizzarla. Ciò comporta che vi sia un‟ enorme mole di dati spostati con tutti i problemi connessi (memoria, banda, trasferimento, tempo etc.). Un servizio DaaS invece funzionerebbe in questo modo: ricevuta la posizione con l'elenco degli strati da visualizzare, elabora l'immagine così come verrà vista sul cellulare e la trasferisce già elaborata in un formato, casomai compresso, con l'impiego di pochi kByte di traffico. 1.5 Scenari per il Cloud Computing[2][4] L‟innovazione e il successo delle cloud (le nuvole informatiche) risiede nel fatto che, grazie alla raggiunta maturità delle tecnologie che ne costituiscono la base, tali risorse sono facilmente configurabili e accessibili via rete e sono caratterizzate da particolare agilità di fruizione che, da una parte semplifica significativamente il dimensionamento iniziale dei sistemi e delle applicazioni mentre, dall‟altra, permette di sostenere gradualmente lo sforzo di investimento richiesto per gli opportuni adeguamenti tecnologici e l‟erogazione di nuovi servizi. Nell‟ambito del cloud computing è ormai prassi consolidata distinguere tra private cloud, public cloud e hybrid cloud. Una private cloud (o nuvola privata) è un‟infrastruttura informatica per lo più dedicata alle esigenze di una singola organizzazione, ubicata nei suoi locali o affidata in gestione ad un terzo (nella tradizionale forma dell‟hosting dei server) nei confronti del quale il titolare dei dati può spesso esercitare un controllo puntuale. Le private cloud possono essere paragonate ai tradizionali “data center” nei quali, però, sono usati degli accorgimenti tecnologici che permettono di ottimizzare l‟utilizzo delle risorse disponibili e di potenziarle attraverso investimenti contenuti e attuati progressivamente nel tempo. Nel caso delle public cloud, invece, l‟infrastruttura è di proprietà di un fornitore specializzato nell‟erogazione di servizi che mette a disposizione di utenti, aziende o amministrazioni - e quindi condivide tra di essi - i propri sistemi attraverso l‟erogazione via web di applicazioni informatiche, di capacità elaborativa e di stoccaggio. La fruizione di tali servizi avviene tramite la rete Internet e implica il trasferimento dell‟elaborazione o dei soli dati presso i sistemi del fornitore del servizio, il 11 Gestione di Basi di Dati in ambienti di Cloud Computing quale assume un ruolo importante in ordine all‟efficacia delle misure adottate per garantire la protezione dei dati che gli sono stati affidati. In questo caso l‟utente insieme ai dati, infatti, cede una parte importante del controllo esercitabile su di essi. Ad esempio, la complessità delle infrastrutture e la loro eventuale dislocazione su siti al di fuori dei confini nazionali potrebbe determinare l‟impossibilità sia di conoscere con esattezza l‟ubicazione dei propri dati nella nuvola, sia di sapere se e quando i dati vengono spostati da un luogo all'altro per esigenze organizzative, tecniche o economiche difficilmente determinabili e gestibili a priori. Un hybrid cloud è una combinazione di modelli pubblici e privati, che cerca di affrontare i limiti di entrambi gli approcci. In una cloud ibrida, una parte dei servizi infrastrutturali viene eseguita nella cloud privata, mentre la restante parte viene eseguita nella cloud pubblica. Le cloud ibride offrono più flessibilità rispetto alle precedenti categorie. In particolare, forniscono maggiori controlli e sicurezza sui dati rispetto alle cloud pubbliche, mentre facilitano l‟espansione e la contrazione ondemand. Ciò nonostante, progettare una cloud ibrida richiede di determinare attentamente il miglior bilanciamento tra le risorse dedicate alla sua parte pubblica e a quella privata. Accanto alle private ,public e hybrid cloud si annoverano le community cloud in cui l'infrastruttura è condivisa da diverse organizzazioni a beneficio di una specifica comunità di utenti. I potenziali vantaggi del cloud computing certamente possono promuovere la sistematizzazione delle infrastrutture, la riorganizzazione dei flussi informativi, la razionalizzazione dei costi e quindi in generale favorire sia il mondo imprenditoriale, che la pubblica amministrazione con servizi più moderni, efficienti e funzionali in linea con le esigenze di crescita di un moderno Sistema Paese. È d‟altra parte assodato che il cloud computing non è un fenomeno temporaneo o una moda, ma l'evoluzione del modo in cui si utilizza la Rete Internet, che da strumento per la sola condivisione documentale (la pagina web resa disponibile dal sito web remoto) diviene la porta d'accesso alle risorse elaborative di un provider di servizi (l'applicazione resa disponibile in modalità web). Questa trasformazione sta determinando una “modifica dei costumi” che è già in atto ed è più evidente nell'utenza individuale che più frequentemente, ma non sempre con completa consapevolezza dei possibili rischi derivanti dalle nuove tecnologie utilizzate, si avvale di servizi erogati da fornitori terzi (public cloud) per far fronte alle sue esigenze informative. L'utente consumer, infatti, utilizza i social network sui quali trasferisce abitualmente foto, informazioni, idee e opinioni, usa strumenti di elaborazione documentale via web, impiega gli hard-disk remoti per poter sempre disporre dei propri documenti da qualunque dispositivo e in qualunque luogo si trovi, si avvale delle applicazioni per i moderni smartphone sempre connessi ad Internet che tramite l‟associazione delle informazioni di geolocalizzazione hanno aperto all‟utente la strada a innovative funzionalità anche in ambito sociale. Risulta d‟altra parte evidente come l‟offerta degli 12 Gestione di Basi di Dati in ambienti di Cloud Computing operatori economici stia incalzando il mercato delle imprese e della Pubblica Amministrazione con soluzioni che incoraggiano l‟acquisizione di servizi esternalizzati, sfruttando la prospettiva di risparmi legati alla sostituzione o all‟affiancamento degli asset per il trattamento delle informazioni che tradizionalmente sono in possesso dell‟utente. È tuttavia opportuno evidenziare che il ricorso a modalità che promuovono l‟utilizzo di servizi esternalizzati comportino anche la migrazione dei dati dai sistemi locali sotto il diretto controllo dell'utente, a sistemi remoti del provider di servizi. 1.6 Vantaggi e svantaggi del Cloud Computing[2][6] Rex Wang, presidente di Oracle Corporation, in un‟apposita discussione sulla rete [9], dice: “Le motivazioni primarie che spingono verso l'adozione del cloud computing. sono costituite dalla sua agilità ed efficienza nel rispondere alle esigenze dinamiche del business. La possibilità di accedere su richiesta a un pool condiviso di risorse di calcolo è molto attraente. Le architetture di tipo cloud offrono servizi più rapidi e flessibili, percentuali maggiori di utilizzo dei server e un'efficienza di gestione superiore…”. Il cloud computing ha, infatti, enormi vantaggi. Elenchiamo i principali: Riduzione delle spese di hardware ed elettriche: l'adozione di un'architettura basata sul cloud può consentire un risparmio significativo sull'hardware soprattutto per ciò che riguarda le applicazioni lato server. Il risparmio si realizza sulla manutenzione delle apparecchiature (è il fornitore di servizi a occuparsi di tutto) e anche sul costo dell'energia elettrica consumata dagli stessi dispositivi. Altri risparmi si hanno sia sull‟acquisto dei dispositivi di rete (firewall, router, dispositivi di load balancing, ecc.) in quanto non si ha più bisogno di preservare la rete interna da parte di un‟azienda, e sia sui costi legati alla gestione preventiva delle situazioni di emergenza (come un incendio o un furto). Alle aziende è risparmiato l'onere di acquistare e gestire, come già precedentemente accennato, tutte le licenze necessarie del caso e il relativo controllo sui termini d'uso. Infine, nel caso di utilizzo del servizio SaaS e PaaS, il provider si occupa di installare tutte le patch e di gestire gli aggiornamenti del sistema operativo e di tutti i software necessari. In tal modo si evitano problemi di sicurezza e si limitano i costi di manutenzione. Disponibilità dei dati ovunque nel mondo: Si evita di dover trasportare dispositivi di storage a casa o in altre sedi dell'azienda perché i dati di un sistema cloud sono reperibili comunque dato che si trovano già per definizione off-site. Protezione dei dati: Tutti i principali fornitori di servizi cloud adottano standard di sicurezza elevati e utilizzano il protocollo Ssl (Secure Socket Layer) per proteggere la confidenzialità dei dati che sono trasmessi da e verso i loro server. Scalabilità: disporre per le aziende e non solo, di una notevole potenza di calcolo è una soluzione ottimale. Ad esempio, per un sito e-commerce poter disporre di maggiori risorse quando gli accessi, cioè le vendite, aumentano è l‟ideale e presenta indubbi vantaggi in termini di marketing. È bene precisare, infine, che nel momento in cui una determinata società non ha più bisogno di un certo numero di risorse precedentemente richieste, il provider le rimetterà a 13 Gestione di Basi di Dati in ambienti di Cloud Computing disposizione nella “nuvola”. In questo modo le risorse potranno nuovamente essere configurate per il loro utilizzo e sono segnalate come disponibili. Passiamo ora ad esaminare gli svantaggi che una tecnologia Cloud può presentare. I sistemi di Cloud Computing vengono criticati principalmente per l‟esposizione degli utenti a rischi legati a: Sicurezza informatica e privacy degli utenti: utilizzare un servizio Cloud Computing per memorizzare dati personali o sensibili, espone l‟utente a potenziali problemi di violazione della privacy. I dati personali vengono memorizzati nelle Server Farm di aziende che spesso risiedono in uno stato diverso da quello dell‟utente. Il cloud provider, in caso di comportamento scorretto o malevolo, potrebbe accedere ai dati personali per eseguire ricerche di mercato e profilazione degli utenti. Con i collegamenti wireless il rischio di sicurezza aumenta e si è maggiormente esposti ai casi di pirateria informatica a causa della minore sicurezza offerta dalle reti senza fili. In presenza di atti illegali, come appropriazione indebita o illegale di dati personali, il danno potrebbe essere molto grave per l‟utente, con difficoltà di raggiungere soluzioni giuridiche e/o rimborsi se il fornitore risiede in uno stato diverso da quello dell‟utente. Nel caso di industrie o aziende, tutti i dati memorizzati nelle memorie esterne sono esposti a eventuali casi di spionaggio industriale. Problemi internazionali di tipo economico e politico: possono verificarsi quando dati pubblici sono raccolti e conservati in archivi privati, situati in un paese diverso da quello degli utenti della “nuvola”. Grandi quantità di informazioni personali sono memorizzate in forma di dati digitali in archivi privati centralizzati e parzialmente accessibili e nessuna garanzia viene data agli utenti per un libero accesso futuro. Altre problematiche sono legate alla localizzazione degli archivi della “nuvola” in alcuni paesi ricchi. Se non regolato da specifiche norme internazionali ciò potrebbe, ad esempio, aumentare il “digital divide” tra paesi ricchi e poveri. Continuità del servizio offerto: delegando a un servizio esterno la gestione dei dati e la loro elaborazione l‟utente si trova fortemente limitato nel caso in cui i suddetti servizi non siano operativi. Inoltre, un eventuale malfunzionamento colpirebbe un numero molto elevato di persone contemporaneamente. Anche se i migliori servizi di Cloud Computing utilizzano architetture ridondanti e personale qualificato, al fine di evitare malfunzionamenti dei sistemi e ridurre la probabilità di guasti visibili dall‟utente finale, non eliminano del tutto il problema. Bisogna anche considerare che tutto si basa sulla possibilità di avere una connessione Internet ad alta velocità sia in download che in upload e che anche nel caso di un‟ interruzione della connessione dovuta al proprio Internet Service Provider si ha la completa paralisi delle attività. Difficoltà di migrazione dei dati nel caso di un eventuale cambio del gestore dei servizi Cloud: non esistendo uno standard definito tra i gestori dei servizi, un eventuale cambio di operatore risulta estremamente complesso. Tutto ciò risulterebbe estremamente dannoso in caso di fallimento del gestore dei servizi cui ci si è affidati. 14 Gestione di Basi di Dati in ambienti di Cloud Computing Capitolo 2 Amazon SimpleDB e Amazon Relation Database Service (RDS)[10] Amazon, oltre ad essere stata una delle primissime aziende a credere nella potenza del commercio elettronico, è stata un pioniere nel campo del Cloud Computing. Essa offre due servizi per la gestione della base di dati nella “nuvola” : il servizio SimpleDB e il servizio Amazon Relation Database Service (RDS). 2.1 Storia di Amazon Amazon.com Inc. fu fondata nel 1994, ma il sito venne pubblicato on-line nel 1995. Allo scopo di garantire la scalabilità richiesta per creare un business on-line redditizio, l‟azienda pianificò una serie di investimenti strategici per costruire l‟infrastruttura Internet da sviluppare su scala globale. L‟infrastruttura comprendeva svariati data center sparsi per il mondo, sistemi di connessione ad alta velocità, un numero incredibile di server e un‟architettura di sistema configurata a livello mondiale. Se si tiene conto del fatto che la base dei clienti è stimata nell‟ordine di decine di milioni di utenti, non c‟è dubbio che ogni componente del sistema deve risultare affidabile, efficiente , conveniente e pienamente scalabile. La consapevolezza che gli sviluppatori web sparsi per il mondo possono sfruttare le potenzialità offerte dai servizi del sito Amazon ha portato l‟azienda a definire successivamente una nuova forma di business. All‟inizio del 2006 Amazon lancio il servizio S3 (Simple Storage Service), da cui ha avuto inizio la realizzazione di una soluzione innovativa per il mercato web, che comprende un‟infrastruttura dedicata alla tecnologia di Cloud Computing e diverse modalità di pagamento. A ciò si aggiunge personale, marketing e servizi di monitoraggio web che vanno sotto il nome di AWS (Amazon Web Service), una sigla che identifica una nuova azienda e un marchio ben preciso. 15 Gestione di Basi di Dati in ambienti di Cloud Computing 2.2 Infrastruttura, protocolli e terminologia di AWS L‟infrastruttura web di AWS si basa sulla presenza di una serie di blocchi di costruzione. I servizi sono configurati in modo tale da funzionare in maniera indipendente l‟uno dall‟altro, pertanto è possibile utilizzare un servizio in particolare senza tener conto della presenza di altri servizi AWS. I servizi offerti sono, ad ogni modo, progettati per funzionare in combinazione tra loro. Dato che appartengono ad una sola azienda, condividono nomenclatura e un sistema unico di autenticazione: ciò consente di applicare facilmente i blocchi di un servizio ad altri servizi. La soluzione a blocchi permette di minimizzare le connessioni interne all‟infrastruttura e le dipendenze tra i diversi servizi, il che garantisce ad Amazon la possibilità di perfezionare ciascun servizio indipendentemente dagli altri, allo scopo di offrire sempre la massima efficienza possibile. In AWS si può accedere ad una qualsiasi funzionalità tramite una chiamata (call) a un servizio web. Operazioni come l‟avvio di un server, la creazione di un load balancer, l‟allocazione di un indirizzo IP o la configurazione di un‟unità di memorizzazione permanente sono solo alcuni esempi di funzionalità richiamate tramite call a servizi web di AWS. Queste calls rappresentano l‟interfaccia primaria e di basso livello dei servizi AWS. È inoltre possibile scrivere direttamente le calls per conto proprio, anche se è più facile sfruttare una libreria client che includa script appositamente predisposti utilizzando un determinato linguaggio di programmazione. Le calls relative ai servizi web utilizzano il protocollo SOAP (Simple Object Access Protocol) oppure il protocollo REST (REpresentational State Transfer). Essi costituiscono le due modalità di avvio di una call, ovvero della richiesta di un servizio web. Le librerie e gli strumenti delle API (Application Programming Interface) permettendo di semplificare la procedura di accesso ai servizi offerti da AWS. L‟accesso ai servizi AWS da una libreria SOAP permette di evitare la definizione diretta di tag o di XML . Al contrario, chi utilizza una libreria REST deve eseguire operazioni di parsing (analisi sintattica) prima di accedere ai dati restituiti da ogni singola call. Gli strumenti da riga di comando e gli strumenti dell‟interfaccia grafica comunicano con i servizi AWS utilizzando le API, interfacce aperte e pubbliche. In questo modo è possibile duplicare le funzioni di uno strumento nelle applicazioni. La struttura a livelli dell‟infrastruttura AWS implica il fatto che tutti gli sviluppatori si trovano sullo stesso piano. Introduciamo ora alcuni concetti fondamentali della soluzione offerta da Amazon per il Cloud Computing, che consistono in un elenco di comandi che permettono di accedere agli elementi fondamentali dei servizi AWS. Availability zone (zona di disponibilità): corrisponde ad un gruppo di postazioni distinte nell‟ambito di una regione AWS. Ogni availability zone dispone di una propria autonomia di potenza elettrica e di connessioni in rete, tali da proteggerla da problemi di funzionamento che si possono manifestare in altre availability zone. Regione: indica un gruppo di availability zone che si trovano in una stessa posizione geografica. Ogni regione AWS è identificata da un nome che descrive sommariamente l‟aria geografica, anche se la localizzazione precisa è tenuta nascosta per motivi di sicurezza. Access Identifier (identificatore di accesso): AWS utilizza diversi access identifier per identificare gli account. Questi identificatori adottano modalità differenti di crittografia a chiave pubblica e sono sempre definiti da una coppia di valori. Il primo elemento della coppia è pubblico, se è necessario può essere reso noto e viene utilizzato per identificare un determinato account 16 Gestione di Basi di Dati in ambienti di Cloud Computing AWS. Il secondo elemento è privato, non deve essere mai condiviso e costituisce la firma digitale che accompagna ogni singola richiesta rivolta al sistema AWS. La firma, trasmessa insieme alla richiesta, garantisce l‟integrità della richiesta stessa e permette inoltre al sistema AWS di verificare che la richiesta è stata effettuata proprio dall‟utente in questione. Amazon Machine Image (AMI) : unità molto simile a quella del root del computer, contiene il sistema operativo e include il software e i livelli di applicazione necessari per il funzionamento dei servizi AWS. Istanza: copia di AMI in esecuzione. È possibile avviare un numero qualsiasi di copie della stessa AMI. Indirizzamento IP elastico: AWS permette di allocare indirizzi IP fissi e di collegare questi indirizzi a determinate istanze. Questa operazione prende il nome di indirizzamento IP elastico. Ogni istanza può essere collegata ad un solo indirizzo IP di questo tipo. Il termine “elastico” fa riferimento al fatto che è possibile allocare, collegare, separare e liberare gli indirizzi a piacere, in base alla necessità del servizio. Security group (gruppo di sicurezza): è un insieme di connessioni di rete inbound a disposizione di una determinata istanza. Ogni gruppo è identificato da un nome ed è costituito da un elenco di protocolli, porte e intervalli di indirizzi IP. 2.3 SimpleDB Numerose applicazioni web impiegano un database relazionale general purpose, come Oracle o MySQL, per memorizzare i dati relativi a nomi utente, password, elenchi di file, preferenze, link e così via. Tali database sono diventati sempre più complessi e comprendono migliaia di pagine di documentazione, librerie e strumenti aggiuntivi, con un‟industria intera che si occupa della formazione e del supporto del prodotto. Amazon SimpleDB è un database basato sul Cloud Computing che non richiede di acquistare, installare e gestire alcun hardware e nemmeno di configurare un software. Esso supporta la memorizzazione e la ricerca di dati semistrutturati, che prevedono voci (righe) simili, ma non completamente identiche tra loro. A differenza di un database relazionale di tipo convenzionale, SimpleDB non utilizza uno schema fisso di dati, ma è in grado di adattarsi in tempo reale a variazioni di “forma” dei dati memorizzati. Questa proprietà consente di evitare l‟aggiornamento dei dati esistenti ogni volta che si aggiunge un nuovo campo del database. Tutti i dati memorizzati in Amazon SimpleDB sono indicizzati in modo automatico, quindi non è necessario ricorrere a profili personalizzati oppure ottimizzare le query. La conoscenza del linguaggio SQL (Structured Query Language) è un prerequisito importante, dato che è possibile leggere i dati utilizzando query SQL di selezione . Il modello di Amazon SimpleDB non supporta la combinazione tra domini, ma può memorizzare i dati in una forma non normalizzata allo scopo di ottenere un accesso più efficiente. Lo schema dei dati di SimpleDB è flessibile e diretto. È possibile raggruppare dati simili in domini; ogni dominio può gestire milioni di voci, ciascuna delle quali è identificata da una voce univoca. Ogni voce può essere a sua volta associata a un certo numero di coppie attributo/valore e i nomi degli attributi possono cambiare da voce a voce, dove è necessario. Analogamente ad altri servizi, anche SimpleDB permette di gestire enormi quantità di dati a grande velocità, pertanto non è 17 Gestione di Basi di Dati in ambienti di Cloud Computing necessario occuparsi dell‟aggiunta di nuove unità disco e dell‟implementazione di complessi schemi di duplicazione dei dati ogni volta che aumentano le dimensioni del database. Si può pensare di aumentare le dimensioni di un‟applicazione su scala mondiale mantenendo sempre una struttura pulita del codice e un‟infrastruttura lineare. La costruzione di un sistema altamente scalabile diventa in questo modo molto più immediata, ciò che richiede il SimpleDB è solo un po‟ più di tempo per la progettazione dello schema del database, ma le modifiche successive si potranno effettuare facilmente e senza dover lavorare offline. SimpleDB verifica per conto proprio che sia disponibile uno spazio su disco sufficiente e una CPU adeguata, sfruttando automaticamente tecniche di elaborazione parallela che vadano a suddividere il carico di lavoro su più dischi e server differenti, se è necessario. Questa forma di scalabilità e ridondanza, intrinseca e sempre dietro le quinte, offre la massima fault tolerance e una considerevole availability senza richiedere un monitoraggio continuo o altri interventi manuali. 2.3.1 Concetti base del servizio SimpleDB Il principio di funzionamento di Amazon SimpleDB comprende un piccolo numero di concetti fondamentali e si basa su un‟interfaccia di programmazione molto compatta. Un dominio Amazon SimpleDB è pressoché analogo alla tabella di un database relazionale. Ogni dominio esiste nell‟ambito di un particolare account AWS ed è identificato da un nome. Può memorizzare fino a 10 GB di dati e le applicazioni che devono memorizzare una quantità maggiore di dati possono facilmente distribuirli tra più domini. Un account AWS ammette l‟assegnazione di 100 domini, se necessario è possibile richiedere l‟assegnazione di un numero maggiore. Ogni voce di un dominio SimpleDB include un nome univoco e fino a 256 attributi (ovvero coppie nome-valore). I nomi di voci, attributi e valori possono avere una lunghezza massima di 1024 byte e ogni dominio può memorizzare fino a un miliardo di attributi. Gli attributi delle voci possono assumere più valori e si possono avere fino a 256 valori per attributo. Ogni valore dell‟attributo incrementa il conteggio dei 256 attributi disponibili per ogni voce e tutti i valori sono trattati come stringhe. Questo comporta alcune implicazioni non scontate e importanti quando si tratta di memorizzare e ricavare valori numerici. Tutti i valori sono indicizzati automaticamente. Le operazioni di inserimento, cancellazione e aggiornamento di voci SimpleDB sono effettuate da API. Le query sono definite utilizzando query SQL di selezione da API. Il modello di elaborazione di Amazon SimpleDB è composto da nove chiamate API suddivise a livello di dominio e a livello di voce: A livello di DOMINIO le calls CreatDomain, ListDomain e DeleteDomain, rispettivamente, creano un dominio, restituiscono un elenco di domini e cancellano domini, mentre la chiamata DomainMetadata restituisce informazioni sull‟utilizzo del dominio indicato. A livello di VOCE PutAttributes crea nuove voci e aggiunge/sostituisce gli attributi delle voci esistenti; BatchAttributes è una versione estesa di PutAttributes e gestisce più voci con un solo comando; DeleteAttributes rimuove attributi da una voce; GetAttributes restituisce gli attributi inidicati nel comando; Select definisce una query SQL. 18 Gestione di Basi di Dati in ambienti di Cloud Computing 2.3.2 Programmazione del servizio SimpleDB Per accedere al SimpleDB utilizziamo CloudFusion che consiste in una libreria che supporta tutti i servizi AWS. CloudFusion è in grado di gestire gli accessi multi-thread, un numero considerevole di operazioni ed è disponibile in formato open-source con licenza BSD. Include, inoltre, un certo numero di utility di alto livello che semplificano l‟utilizzo dei servizi AWS. Dunque, tramite CloudFusion possiamo anche accedere a tutte le funzionalità del SimpleDB. Di seguito saranno riportate una serie di operazioni che riguarderanno la creazione, la memorizzazione dei dati, l‟esecuzione di query e la cancellazione di attributi. I domini utilizzati sono inseriti nel file book.inc.php: define(„BOOK_FILE_DOMAIN‟, ‟files‟); define („BOOK_FEED_DOMAIN‟, „feeds‟); define („BOOK_FEED_ITEM_DOMAIN‟, „feed-items‟); BOOK_FILE_DOMAIN memorizza le informazioni sul file, BOOK_FEED_DOMAIN memorizza i dati dei vari feed RSS, e BOOK_FEED_ITEM_DOMAIN memorizza i dati relativi alle voci trovate in ogni feed RSS. CREAZIONE DI UN DOMINIO – create_domain.php Il codice che segue crea tutti i domini SDB. #!/usr/bin/php <?php error_reporting(E_ALL); require_once('sdk.class.php'); require_once('include/book.inc.php'); // Create the SimpleDB access object $sdb = new AmazonSDB(); foreach (array(BOOK_FILE_DOMAIN, BOOK_FEED_DOMAIN, BOOK_FEED_ITEM_DOMAIN) as $domain) { // Create the SimpleDB domains $res = $sdb->create_domain($domain); // Check result if (!$res->isOK()) { exit("L'operazione di creazione è fallita per il dominio ${domain}\n"); } print("Il dominio ${domain} è stato creato con successo. .\n"); } exit(0); ?> Dal codice sopra riportato possiamo evincere alcune cose: è creato un nuovo oggetto AmazonSDB con l'operazione $sdb = newAmazonSDB; 19 Gestione di Basi di Dati in ambienti di Cloud Computing viene effettuata l'iterazione dell'array che contiene i nomi dei domini; è creato un dominio con l'opzione create_domain che restituisce un risultato di corretto funzionamento. Nel caso in cui il dominio risulti già esistente, non viene eseguita alcuna operazione. MEMORIZZAZIONE DEI DATI – insert_items.php Ora vediamo un esempio di codice per memorizzare alcuni dati in un dominio mediante il metodo put_attributes il quale permette di creare nuove voci oppure di aggiungere nuovi attributi a voci esistenti. #!/usr/bin/php <?php error_reporting(E_ALL); require_once('sdk.class.php'); require_once('include/book.inc.php'); // Create the SimpleDB access object $sdb = new AmazonSDB(); // Insert an entry for every PHP file in the current directory $dir = opendir("."); while (($file = readdir($dir)) !== false) { if (preg_match("/^[a-zA-Z0-9_-]*\.php$/", $file)) { $data = file_get_contents($file); $hash = md5($data); $size = filesize($file); $attrs = array('Name' => $file, 'Hash' => $hash, 'Size' => sprintf("%08s", $size)); $res = $sdb->put_attributes(BOOK_FILE_DOMAIN, $file, $attrs, if ($res->isOK()) { print("Inserted item $file\n"); } else { $error = $res->body->Errors->Error->Message; print("Could not insert item: ${error}\n"); } true); } } closedir($dir); exit(0); ?> Il programma crea una voce per ogni file della directory corrente il cui nome coincide con l'espressione regolare /^[a-zA-Zo-9_-]*\.php$/, ossia con la sintassi dei nomi di file PHP. È utilizzato il nome del file per definire il nome della voce e sono creati tre attributi: Name (nome del file), Hash (hash MD5 del contenuto del file) e Size (dimensione, in byte, del file). I comandi opendir e readdir permettono di accedere all'elenco di file della directory corrente ("."). Vediamo che ogni nome del file è letto tenendo conto dell'espressione regolare; se il nome del file è conforme con l'espressione regolare, il programma legge il contenuto del file utilizzando file_get_contents. Di seguito viene calcolato il valore di hash MD5 utilizzando la funzione md5. Queste informazioni permettono di impostare l'array $attrs con coppie di nome-valori di attributi. 20 Gestione di Basi di Dati in ambienti di Cloud Computing Con il metodo put_attributes sono memorizzate nel dominio di SDB (BOOK_FILE_DOMAIN) le informazioni. Il parametro finale (true) nella chiamata della funzione segnala che i valori esistenti di un attributo devono essere rimossi e sostituiti con nuovi valori. Se, viceversa, il parametro è definito con false significa che i nuovi valori vanno ad aggiungersi a quelli esistenti in modo da ottenere attributi con più valori. ESEGUIRE UNA QUERY – query_domain.php #!/usr/bin/php <?php error_reporting(E_ALL); require_once('sdk.class.php'); require_once('include/book.inc.php'); // Set the query $query = "select * from " . BOOK_FILE_DOMAIN . " where Name like '%items%'"; // Create the SimpleDB access object $sdb = new AmazonSDB(); // Query the SimpleDB domain $res = $sdb->select($query); // Check result if (!$res->isOK()) { exit("Select operation failed\n"); } // Display results foreach ($res->body->SelectResult->Item as $item) { foreach ($item->Attribute as $attribute) { print($attribute->Name . ": " . $attribute->Value . ", "); } print("\n"); } exit(0); ?> Il codice sopra riportato permette di creare una semplice query che restituisca tutte le voci che hanno un attributo Name che contiene la stringa "items". In seguito viene eseguito un ciclo che considera tutte le voci restituite dalla query e visualizza in output i rispettivi attributi con i loro valori. È utile osservare che il comando Select restituisce, per ogni chiamata, 100 voci oppure 1 MB a seconda di quale delle due si raggiunge prima. Si può utilizzare l‟opzione limit per indicare la restituzione di un numero maggiore di voci – fino ad un massimo di 2500 – ma, comunque, entro 1MB. CANCELLARE ATTRIBUTI - delete_attrs.php #!/usr/bin/php <?php error_reporting(E_ALL); require_once('sdk.class.php'); require_once('include/book.inc.php'); 21 Gestione di Basi di Dati in ambienti di Cloud Computing // Create the SimpleDB access object $sdb = new AmazonSDB(); // Set list of attributes to delete $attrs = array('ModTime', 'Flavor'); // Query for each file $res1 = $sdb->select("select Name from " . BOOK_FILE_DOMAIN); if ($res1->isOK()) { foreach ($res1->body->SelectResult->Item as $item) { $itemName = (string)$item->Name; $res2 = $sdb->delete_attributes(BOOK_FILE_DOMAIN, $itemName, $attrs); if ($res2->isOK()) { print("Updated item $itemName\n"); } else { $error = $res2->body->Errors->Error->Message; print("Could not update item: ${error}\n"); } } } else { $error = $res1->body->Errors->Error->Message; exit("Could not run query: ${error}\n"); } exit(0); ?> Il programma delete_attrs cancella in ogni voce gli attributi ModTime e Flavor tramite una chiamata del metodo delete_attributes. 2.4 Amazon Relation Database Service (RDS) Quando si vuole trasferire nel Cloud Computing un‟applicazione MySQL già esistente, oppure quando è necessario eseguire query complesse o combinare i dati memorizzati in due o più tabelle si utilizzerà il servizio Relation Database Service di Amazon (RDS). Esso permette, infatti, di sfruttare i vantaggi delle funzioni MySQL evitando nel contempo i problemi derivanti da operazioni complesse e dispendiose in termini di tempo. Il servizio RDS semplifica l‟impostazione, il funzionamento e la scalabilità di un database relazionale da impiegare in un sistema Cloud Computing. È possibile utilizzare MySQL senza perdere tempo a predisporre un server, installare un sistema operativo, installare MySQL , studiare e installare eventuali patch del sistema operativo o del database, aggiornare server e data storage quando cambiano le esigenze dell‟applicazione, configurare situazioni di failover, programmare operazioni di backup e gestire i file di backup. Il servizio RDS è in grado di svolgere molti di questi compiti in modo automatico e di gestire le altre attività tramite chiamate di servizi web. Ad esempio, si può creare un‟istanza RDS DB con una sola chiamata del servizio web: l‟istanza viene avviata e messa in esecuzione entro pochi minuti. 22 Gestione di Basi di Dati in ambienti di Cloud Computing Dunque il servizio RDS può effettivamente modificare l‟idea stessa di database relazionale, in quanto è possibile creare, utilizzare, terminare e ripristinare istanze DB in base alle proprie esigenze. Si prenda il caso in cui si voglia trasferire un‟applicazione nel Cloud Computing e che ogni installazione dell‟applicazione richieda l‟impiego di un database MySQL privato. È possibile automatizzare l‟intera installazione e la procedura di recupero dei dati. Ogni volta che un nuovo cliente effettua la registrazione nel servizio il codice chiama l‟API CreateDBInstance di RDS per creare una nuova istanza DB. Si supponga, invece, di avere un‟applicazione multi-tier e di voler impostare un ambiente di test completamente automatizzato. Anche in questo caso si possono utilizzare le API di Amazon RDS (oppure gli strumenti da riga di comando) per creare, utilizzare e terminare istanze DB come elementi della procedura di test. 2.4.1 Il servizio RDS La maggior parte delle operazioni che hanno a che fare con il servizio Amazon RDS ruota attorno al concetto di istanza DB. È possibile creare un‟istanza DB come Single-AZ o Multi-AZ. La soluzione Multi-AZ Deployment aumenta la disponibilità e la persistenza di un‟istanza DB replicando in modo sincrono gli aggiornamenti del database tra diverse availability zone e introducendo un meccanismo automatico da failover a standby in caso di problemi di funzionamento. Si tratta di un ottimo esempio della capacità della soluzione AWS di trasformare un compito molto complesso di costruzione del sistema (impostare un database MySQL con un meccanismo automatico e diretto di failover e con ripristino automatizzato) in un‟opzione di menu semplice e chiara. La creazione di un‟istanza DB richiede l‟indicazione della sua classe. Al momento esistono cinque classi di istanze DB tutte a 64 bit : small, large, extra large, high memory double extra large, high memory quadruplue extra large. Nome Virtual core CPU Velocità del core CPU RAM Costo orario Small 1 1 1,7 GB $0,11 Large 2 2 7,5 GB $0,44 Extra large 4 2 15 GB $0,88 High memory double extra large 4 3,25 34 GB $1,55 High memory quadruplue extra large 8 3,25 68 GB $3,10 -Tabella 1- Classi delle istanze DB di Amazon RDS La classe di un‟istanza DB può essere modificata in pochi minuti, evitando così di dedicare troppo tempo alla scelta di quale soluzione adottare. I costi riportati nella Tabella 1 riguardano l‟impostazione della modalità Single-AZ di un‟istanza DB, quindi nel caso di Multi-AZ i costi raddoppiano. 23 Gestione di Basi di Dati in ambienti di Cloud Computing Le istanze DB non prevedono una quantità fissa di data storage, ma bisogna indicare un‟allocazione iniziale di data storage da 5 GB a 1024 GB in fase di creazione dell‟istanza DB (si può aggiungere ulteriore spazio in base alle proprie esigenze e all‟aumento dei dati di memorizzazione, fino a raggiungere il limite di 1024 GB). La quantità di spazio indicata inizialmente corrisponde alla quantità di allocated storage relativa all‟istanza DB, tale quantità può essere aumentata in tempo reale. La creazione di un‟istanza DB richiede l‟indicazione di un identificatore, costituito da una stringa che deve iniziare con una lettera minuscola e può contenere fino a 63 caratteri minuscoli, cifre numeriche e trattini. L‟identificatore non può terminare con un trattino e non può includere più trattini consecutivi, inoltre deve essere univoco nell‟ambito di ogni account. Ogni istanza DB include la copia di un determinato motore di database. Al momento l‟unico motore supportato è la versione 5.1 di MySQL. L‟identificatore di questo motore è MySQL5.1. Un‟istanza DB si trova sempre in uno stato determinato. Gli stati principali sono: creating, backing-up, available, modifying e deleting. Nella maggior parte dei casi un‟istanza DB si trova nello stato available, mentre gli altri stati sono temporanei. Il programma dell‟applicazione e gli strumenti del database devono essere in grado di stabilire una connessione di rete con le istanze DB. Per eseguire questa operazione bisogna associare un gruppo di sicurezza DB all‟istanza DB e autorizzare l‟ingresso all‟istanza DB da parte di un intervallo di indirizzi di rete. Dopo tali impostazioni si configura il programma e gli strumenti affinché utilizzino l‟elemento Endpoint dell‟istanza DB per stabilire una connessione. Il servizio Amazon RDS offre la possibilità di controllare i parametri che determinano gli aspetti di basso livello delle prestazioni e del comportamento del motore di database utilizzando gruppi di parametri DB. Ogni gruppo contiene un elenco di variabili di configurazione, specifiche per il motore di database. Per quanto riguarda il database MySQL, il gruppo di parametri DB include, per esempio, i valori innodb_additional_mem_pool_size e innodb_buffer_pool_size. Alcuni valori sono di tipo assoluto, altri sono impostati applicando una formula {DBInstanceClassMemory*3/4}. Ciò consente al gruppo di parametri di essere applicato a tutte le classi di istanze DB, dato che il valore può essere impostato in base alle caratteristiche della classe considerata. Se un gruppo non definisce il valore di un parametro si utilizza il valore di default previsto dal servizio RDS o dal motore di database. Ogni account AWS include un gruppo predefinito di parametri che si possono impiegare fino a quando non c‟è il bisogno di modificarne uno in particolare. Nel caso di modifica si può scegliere se applicare l‟aggiornamento dei parametri immediatamente oppure in corrispondenza del prossimo riavvio dell‟istanza DB o delle istanze associate al gruppo. Alcuni parametri sono dinamici e possono essere applicati direttamente, altri sono statici e richiedono il riavvio dell‟istanza DB. Nella creazione di una nuova istanza DB bisogna indicare un nome utente master e una password master. Il servizio Amazon crea un account nel motore di database utilizzando i valori forniti, che devono essere ripresi successivamente per creare una connessione con il database. L‟utente master dispone di privilegi MySQL : SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASE, CREATE TEMPORARY TABLES, LOCK TABLES, EXCECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT e TRIGGER. Inoltre dispone dell‟operazione GRANT, grazie alla quale può garantire i privilegi di accesso a utenti che sono stati creati dopo aver impostato e messo in funzione l‟istanza DB. Infine, quando si crea una nuova 24 Gestione di Basi di Dati in ambienti di Cloud Computing istanza DB si può anche indicare il nome di un database. Questo nome permette al servizio Amazon RDS di creare un database vuoto con il nome dell‟istanza DB. Ogni istanza DB è associata ad una finestra di manutenzione, che permette di verificare l‟occorrenza di modifiche dell‟istanza DB, ad esempio il passaggio ad una diversa classe di istanze DB, e la presenza di patch del software. Se in una particolare settimana si stabilisce un evento di manutenzione, l‟intervento in questione si attiva e viene completato nel momento che è stato indicato all‟interno delle quattro ore di funzionamento della finestra di manutenzione. Amazon RDS applica le patch e gli aggiornamenti dei parametri nel corso delle quattro ore settimanali di manutenzione. L‟impostazione predefinita prevede che la finestra di manutenzione si attivi in un intervallo di tempo “di quiete” specifico per ogni regione AWS. Si può impostare la finestra in modo da attivarla per una determinata applicazione in un istante qualsiasi della settimana. Gli unici interventi di manutenzione per i quali Amazon RDS deve disattivare un‟istanza DB sono le operazioni di scalabilità di calcolo e le patch software, che vengono programmate solo se hanno a che fare con la sicurezza e la solidità del sistema. Patch di questo tipo sono rilasciate abbastanza di rado, in genere a distanza di mesi, e richiedono raramente un tempo lungo di attivazione nella finestra di manutenzione. Le API di Amazon RDS permettono di effettuare procedure semplici e prive di rischi per il backup di istanze DB. Il servizio RDS attiva un backup automatico quotidiano in coincidenza con l‟attivazione della finestra di backup relativa all‟istanza DB. I file di backup sono conservati per il numero di giorni indicato tra i parametri di backup dell‟istanza. Quando è ritenuto necessario è possibile creare anche uno snapshot DB. Esso rappresenta lo stato del sistema in un certo istante di tempo. Lo snapshot rimarrà a disposizione finché non si deciderà di cancellarlo. Inoltre, ad ogni snapshot deve essere assegnato un nome univoco. Amazon RDS memorizza anche i log delle modifiche di ogni database. I log offrono la possibilità di ripristinare il database alle condizioni di un momento nel tempo, che coincidono con un momento successivo al periodo di backup e precedente all‟ultimo ripristino dell‟istanza DB. Il tempo di ripristino è in genere inferiore ai cinque minuti. Quando l‟applicazione di produzione inizia a manifestare comportamenti inattesi e si vuole esaminare il funzionamento del database per capire cosa succede, si può realizzare uno snapshot, ripristinarlo in una nuova istanza DB e studiarlo nel dettaglio senza intervenire sul sistema di produzione. In modo analogo quando si vuole una nuova versione del codice si realizza prima uno snapshot del database, in modo da ritornare alla situazione di partenza se è stato commesso un errore irreparabile. Amazon RDS tiene traccia di eventi relativi ad origini diverse, ovvero ad istanze DB, snapshot DB, gruppi di sicurezza DB e gruppi di parametri DB. Ogni evento contiene data e ora, tipo di origine, nome dell‟origine e un messaggio. 25 Bibliografia [1] http://www.moebiusonline.eu/fuorionda/cloud_computing.shtml [2] Filippo Moriggia 2010 “Il server tra le nuvole” [3] http://denaro.it/blog/2011/09/22/cloud-il-futuro-del-web-e-sulle-nuvole/ Fabio Cecaro 2011 “Cloud, il futuro del web è sulle nuvole” [4] http://www.garanteprivacy.it/ - Garante per la privacy Cloud computing: indicazioni per l‟uso consapevole dei servizi [5] http://www.youimpresa.it/archive/201105 [6] http://it.wikipedia.org/wiki/Cloud_computing [7] H. Hacigumus, B. Iyer, S. Mehrotra “Providing Database as a Service” [8] http://it.wikipedia.org/wiki/DaaS [9] http://www.oracle.com/it/ciocentral/new8226executiveviewpointqa-424487-ita.html [10] Jeff Barr 2010 “Cloud Computing per applicazioni web” 26