Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Sistemi Operativi Scalabilità ed Elasticità in Infrastrutture di Cloud Computing Anno Accademico 2013/2014 Candidato: Riccardo De Vivo matr. N46000797 [Dedica] Indice Indice .................................................................................................................................................. III Introduzione ......................................................................................................................................... 4 Capitolo 1: Cloud Computing .............................................................................................................. 5 1.1 Definizione ............................................................................................................................ 5 1.2 Elasticità e Scalabilità nel Cloud Computing ........................................................................ 5 1.3 Modelli di servizio................................................................................................................. 8 1.4 Modelli di distribuzione ........................................................................................................ 9 1.5 Virtualizzazione delle risorse .............................................................................................. 10 1.5.1 Hypervisor ....................................................................................................................... 10 Capitolo 2: Piattaforme di Cloud Computing .................................................................................... 13 2.1 OpenStack ........................................................................................................................... 13 2.1.1 Struttura ........................................................................................................................... 13 2.1.2 Elasticità .......................................................................................................................... 16 2.2 VMware vSphere e vCloud ................................................................................................. 17 2.2.1 Struttura ........................................................................................................................... 17 2.2.2 Elasticità .......................................................................................................................... 20 Capitolo 3: Cloud Providers ............................................................................................................... 22 3.1 Amazon Web Services ........................................................................................................ 22 3.1.1 Panoramica...................................................................................................................... 22 3.1.2 Elasticità .......................................................................................................................... 24 3.2 Microsoft Azure .................................................................................................................. 27 3.2.1 Panoramica...................................................................................................................... 27 3.2.2 Elasticità .......................................................................................................................... 28 Conclusioni ........................................................................................................................................ 30 Bibliografia ........................................................................................................................................ 32 Introduzione L’avvento di Internet, la sua crescente diffusione e l’evoluzione delle tecnologie di rete hanno permesso l’estensione del concetto di servizio all’ambito dell’informatica e delle relative risorse. La maggior parte dei servizi e le fonti energetiche che utilizziamo al giorno d’oggi come l’acqua, il gas e l’elettricità, ormai indispensabili nella vita quotidiana, sono accessibili in maniera semplice e diretta, senza suscitare in noi la preoccupazione di come quella risorsa sia stata effettivamente prodotta o da dove essa provenga. L’idea di virtualizzare le risorse di un sistema informatico, come la sua capacità di calcolo, di memorizzazione o il software stesso, rendendole accessibili all’esterno sotto forma di servizio offerto a terzi attraverso la rete Internet (IT-as-a-Service), ha suscitato da sempre grande interesse, consentendo lo sviluppo progressivo del Cloud Computing. La maggior parte delle aziende realizza da tempo processi di outsourcing, affidando una parte delle proprie attività a terzi, imprese specializzate nella fornitura di quel particolare servizio. Nell’era digitale l’outsourcing è stato esteso alle competenze informatiche, riducendo costi di gestione, manutenzione e garantendo una minimizzazione dei rischi, quali perdite di dati (data loss) e interruzioni causate da guasti hardware (hardware failure). Nella prima parte dell’elaborato sarà effettuata una breve panoramica del paradigma del Cloud Computing, evidenziandone uno dei maggiori benefici, l’elasticità dei servizi offerti. La seconda e terza parte saranno dedicate ad alcune piattaforme cloud e alle soluzioni flessibili proposte dai principali fornitori di servizi (cloud providers). 4 Capitolo 1: Cloud Computing 1.1 Definizione Il concetto di Cloud Computing abbraccia diversi aspetti, risulta pertanto complesso offrire una definizione completa, che riesca a sintetizzarli tutti. Il National Institute of Standards and Tecnology (NIST), agenzia del governo Americano, che si occupa della definizione di standard e della gestione delle tecnologie nell’ambito dell’industria e del commercio, ha redatto un documento ufficiale, in cui identifica il Cloud Computing come un modello per garantire l’accesso tramite rete, su richiesta (on-demand) e da ogni luogo, a un esteso bacino di risorse informatiche (e.g., reti, server, memoria, applicazioni e servizi), che possono essere rapidamente fornite in base ai bisogni del consumatore. Tali risorse devono essere facilmente accessibili e gestibili, al punto da comportare la minima interazione con il fornitore del servizio. Il NIST delinea inoltre le componenti fondamentali dell’architettura cloud, ovvero le caratteristiche essenziali, tre modelli di servizio e quattro modelli di distribuzione [1]. 1.2 Elasticità e Scalabilità nel Cloud Computing Uno dei maggiori benefici derivanti dall’utilizzo di servizi di Cloud Computing è l’estrema flessibilità che viene garantita al cliente, l’elasticità e la scalabilità sono i principi cardine di questo paradigma ovvero le caratteristiche che hanno maggiormente contribuito alla sua ampia diffusione. Anche se talvolta i due termini vengono utilizzati in maniera interscambiabile, bisogna 5 comunque operare una distinzione tra le due proprietà [3]: Scalabilità: si configura come la capacità di un sistema di gestire carichi di lavoro crescenti, aggiungendo risorse in maniera incrementale. In base alla modalità di accrescimento di questa capacità suppletiva, è possibile distinguere due tipi di scalabilità: o Scalabilità orizzontale (scale out): consiste nell’aggiunta di nuovi nodi di calcolo o istanze VMs (Virtual Machines1) per consentire, con l’aiuto di un load balancer2, di smistare il carico di lavoro fra più nodi, facendo in modo che lavorino in parallelo come un’unica unità. Il concetto di scalabilità orizzontale è ampiamente diffuso in ambito informatico e nella sua accezione generale può indicare sia l’aggiunta di macchine fisiche che quella di istanze virtuali. Nel caso specifico del cloud, un cloud provider può incrementare la potenza di calcolo complessiva che può offrire ai clienti aggiungendo altri cloud server al suo Data Center3 ma nella sua accezione tipica indica l’aggiunta di altre istanze VMs a un’infrastruttura cloud preesistente, al fine di aumentare le performance del sistema. o Scalabilità verticale (scale up): consiste nel potenziamento di nodi di calcolo o istanze di VMs preesistenti, mediante l’aggiunta di altre risorse hardware, ad esempio aggiunta di CPU o core per aumentarne la potenza di calcolo, di RAM o di capacità di memorizzazione. Inoltre esiste sempre un limite alla scalabilità verticale, infatti, seppure si riuscisse ad acquistare una macchina Virtual Machines: una macchina virtuale è un’entità software, che attraverso un processo di virtualizzazione, emula il comportamento di una macchina fisica, grazie all’assegnazione di risorse hardware. 2 Load Balancer: un bilanciatore è un componente software o in alcuni casi hardware, che permette di distribuire il carico di lavoro tra varie macchine virtuali o fisiche. 3 Data Center: un Centro di Elaborazione Dati Cloud è una server farm Cloud, ovvero un insieme di server collocati in un unico ambiente, al fine di facilitarne la gestione, la manutenzione e la sicurezza e progettato per offrire servizi Cloud. 1 6 Figura 1 Scalabilità verticale e orizzontale https://otherplus.com/tech/ con dei componenti hardware di ultima generazione, oltre quello non è possibile spingersi mentre invece è sempre possibile aggiungere un altro nodo di calcolo alla nostra architettura. Elasticità: si configura come la capacità di un sistema di adattare e ridimensionare velocemente le risorse, spesso in maniera automatica, per far fronte a carichi dinamici, sia crescenti sia decrescenti. Questa proprietà prevede, oltre alla scalabilità e quindi l’acceso ad altre risorse quando il sistema è sovraccarico, anche il rilascio delle stesse quando non sono più necessarie (scale down e scale in). Tale caratteristica è essenziale in ambiente cloud, dove il cliente vuole pagare solo ciò che effettivamente usa (pay-as-you-use), questo permette sia un risparmio in termini di costi, sia l’ottimizzazione delle risorse messe in gioco dal provider. L’elasticità è quindi una modalità di scalare un sistema sia verso il basso sia verso l’alto ed è un’espressione utilizzata particolarmente nel Cloud Computing mentre il concetto di scalabilità può avere diverse connotazioni e quindi ha una portata più ampia. È importante rilevare che l’aumento o la diminuzione delle risorse di un sistema, deve comportare come conseguenza, rispettivamente, l’aumento e la diminuzione proporzionale delle sue performance. 7 1.3 Modelli di servizio I servizi di Cloud Computing sono suddivisi in tre classi, a seconda del livello di astrazione delle funzionalità fornite [1]: IaaS (Infrastructure as a Service): questo modello di servizio è localizzato al livello più basso di astrazione dei servizi cloud, le funzionalità offerte vanno dal potenziamento di VMs preesistenti, aggiungendo ad esempio potenza di calcolo, memoria, servizi di rete e altre risorse informatiche, alla creazione di intere macchine virtuali personalizzate secondo i parametri scelti dall’utente o alla disattivazione delle stesse quando non sono più necessarie. Il cliente, a questo livello, non ha il controllo sull’intera infrastruttura cloud sottostante, né conosce dove o come siano fisicamente collocate le risorse che sta utilizzando, ma può decidere quali sistemi operativi e applicazioni adoperare sulle sue istanze VMs o Cloud Server. Spesso il consumatore può valutare l’impiego di meccanismi per la gestione del carico come un bilanciatore, scegliere che firewall utilizzare a livello SO (Sistema Operativo) e configurarlo o anche se servirsi delle funzioni di scalabilità automatica (autoscaling) offerte dal provider. PaaS (Platform as a Service): questo modello di servizio si colloca sopra quello infrastruttura, i fornitori mettono a disposizione una piattaforma cloud, ossia un ambiente in cui gli sviluppatori possono creare, distribuire e testare applicazioni utilizzando linguaggi di programmazione, librerie e strumenti supportati dal provider. Il cliente in questo caso non avrà il controllo sul livello sottostante ovvero sui cloud server che costituiscono la piattaforma, sui sistemi operativi utilizzati, sulla gestione della memoria o sulle reti ma soltanto sulle applicazioni e gli strumenti che sono forniti per svilupparle. SaaS (Software as a Service): il livello di astrazione è ancora più alto rispetto a quello PaaS, i servizi offerti al cliente consistono nell’utilizzo delle applicazioni sviluppate dal provider ed eseguite sulla sua infrastruttura cloud. In questo caso il 8 consumatore naturalmente non può sviluppare delle proprie applicazioni o modificare quelle esistenti ma solo servirsene, oltre a configurarle modificandone in maniera limitata alcune impostazioni. Questi software sono solitamente Figura 2 La pila del cloud computing http://article.sapub.org/ accessibili da diversi dispositivi attraverso portali web, semplificandone notevolmente l’uso per il cliente e lo sviluppo e il testing per i provider. 1.4 Modelli di distribuzione I modelli di distribuzione indicano effettuano una classificazione dei servizi di cloud, in base alla loro distribuzione, ossia, dove deve essere organizzato. Il NIST distingue a questo proposito quattro possibili alternative [1]: Private Cloud: l’infrastruttura cloud è appannaggio di una sola organizzazione, può essere gestita o essere di proprietà dell’azienda stessa o di un fornitore esterno ma chi usufruisce dei servizi è unicamente l’organizzazione e le sue diverse unità. Community Cloud: in questo caso, l’infrastruttura di cloud computing viene fornita a un gruppo ristretto di aziende o comunità di consumatori che condividono 9 caratteristiche comuni, come obiettivi, requisiti di sicurezza o politiche aziendali. Solitamente la gestione della struttura o la proprietà della stessa è prerogativa di un’organizzazione appartenente alla comunità o di un insieme di queste. Public Cloud: è il caso più diffuso, un fornitore di servizi cloud eroga le sue risorse informatiche attraverso la rete Internet, rendendole accessibili al pubblico e usufruibili a pagamento. Hybrid Cloud: solitamente si parla di modello di distribuzione ibrido quando un’infrastruttura cloud privata al fine di potenziare le sue risorse, acquista servizi messi a disposizione da un’infrastruttura pubblica. 1.5 Virtualizzazione delle risorse Uno dei principi cardine su cui si fonda il Cloud Computing, è quello riguardante la virtualizzazione delle risorse hardware, questo meccanismo consente di eseguire diversi sistemi operativi (guest OS) corredati dal relativo insieme di applicazioni su una stessa macchina fisica (host). 1.5.1 Hypervisor Il componente software o hardware che agisce da interfaccia tra la macchina fisica sottostante o server fisico e le istanze di macchina virtuale installate su di esso è chiamato VMM (Virtual Machine Monitor), meglio conosciuto col nome di hypervisor. Come già individuato nell’articolo "Formal Requirements for Virtualizable Third Generation Architectures" (Gerald J. Popek e Robert P. Goldber, Communications of the ACM, Volume 17 Numero 7, 1974), possiamo operare una classificazione tra questi componenti che contribuiscono alla gestione di una infrastruttura cloud [4]: Hypervisor nativo (type-1 o bare-metal): un VMM di questo tipo è un sistema eseguito direttamente sull’hardware del server fisico, permettendone il controllo diretto e l’installazione dei sistemi operativi ospiti al livello superiore. 10 Hypervisor hosted (type-2): in questo caso il VMM è in esecuzione sul sistema operativo ospitante (host OS), collocato sopra lo strato hardware e prevede funzionalità di supporto alla virtualizzazione e controllo delle VMs, ma si affida al livello inferiore per la gestione della memoria, l’allocazione delle risorse, lo scheduling e per altre operazioni. Figura 3 Struttura di un server virtualizzato http://sp.parallels.com/ I sistemi che utilizzano un hypervisor possono adottare diverse tecniche di virtualizzazione [2]: Virtualizzazione completa (full virtualization): la virtualizzazione dell’hardware da parte dell’hypervisor è completa, il sistema operativo ospite non si accorge di essere in un ambiente virtuale, per cui opera sulle risorse che gli vengono assegnate come se fossero quelle di un’ipotetica macchina fisica sottostante e non risorse emulate. Virtualizzazione assistita dall’hardware (hardware assisted virtualization): la virtualizzazione è supportata da soluzioni hardware apposite, ad esempio un processore la cui architettura consente l’impiego di istruzioni speciali che favoriscono questa funzionalità e consentono al sistema ospite di inoltrare 11 chiamate direttamente al livello fisico. Questo approccio consente di incrementare notevolmente le prestazioni globali del sistema. Paravirtualizzazione (paravirtualization): l’hypervisor non esegue una virtualizzazione completa dell’hardware ma espone piuttosto un’interfaccia modificata alle macchine virtuali, composta da API4 (Application Programming Interface) appositamente progettate e accessibile in maniera diretta dalle stesse. In sintesi la paravirtualizzazione non mira a creare un’emulazione dell’hardware di un server fisico ma a regolare l’utilizzo delle sue risorse da parte delle VMs. Tuttavia questo metodo può comportare una modifica del kernel5 del sistema operativo ospite. Esistono inoltre soluzioni per la virtualizzazione non basate sull’uso dell’hypervisor ma su un sistema operativo ospitante condiviso, che permette di replicare le proprie funzionalità direttamente sui sistemi operativi ospiti senza che essi debbano compiere chiamate che coinvolgono più livelli. In questo caso il sistema operativo ospite è vincolato ad essere dello stesso tipo di quello ospitante. API: un Interfaccia di Programmazione di un’Applicazione consiste in un insieme di procedure disponibili al programmatore che consentono l’interazione semplificata con l’applicazione. 5 Kernel: rappresenta il nucleo di un sistema operativo e ha il compito di fornire ai processi un accesso controllato all’hardware sottostante. 4 12 Capitolo 2: Piattaforme di Cloud Computing 2.1 OpenStack OpenStack è un progetto open source nato nel 2010 dalla collaborazione tra la Nasa e Rackspace Cloud, la sua rapida crescita è dovuta ai contributi provenienti dalla vasta community, che comprende un gran numero di sviluppatori e importanti aziende dell’ICT. Si tratta di un sistema operativo cloud, scritto in Python e rilasciato sotto licenza Apache 2.0, modulare, in grado di controllare un esteso bacino di risorse di calcolo, memorizzazione e di rete secondo il modello IaaS. La sua potenza risiede soprattutto nell’essere estremamente flessibile, offrendo supporto ad un gran numero di hypervisor e fornendo numerose estensioni e API. 2.1.1 Struttura La struttura di OpenStack è composta da diversi blocchi, che vengono inseriti in successione con l’evoluzione del progetto. Il suo nucleo è costituito da tre moduli fondamentali, Compute, Network e Storage, accessibili e gestibili mediante un pannello raggiungibile da web browser, chiamato Dashboard. 13 Figura 4 Struttura semplificata di OpenStack www.openstack.org In particolare, per tracciare una panoramica del sistema, si descrive il ruolo che ha ogni servizio all’interno dell’infrastruttura [7]: Compute (Nova): è uno dei moduli senior dell’intera piattaforma e quello predisposto a controllarla. Gestisce istanze di macchine virtuali, occupandosi della loro allocazione sulle macchine fisiche (modulo nova-scheduler) e del loro ciclo di vita, comunicando con l’hypervisor installato su queste ultime (modulo novacompute). In particolare, gli utenti che vogliono creare istanze di VMs chiamano l’API di Nova attraverso l’API di OpenStack o tramite richieste API di Amazon EC2, a questo punto i demoni Nova (worker daemons) scambiano informazioni tramite una coda di messaggi e il database per esaudirle. Storage (Swift): è l’altro modulo senior della piattaforma e quello predisposto alla memorizzazione. Il ruolo di questo componente è di consentire un’archiviazione di oggetti scalabile e ridondante, similmente al servizio di Amazon AWS S3. Per assicurare queste due proprietà, Swift scrive repliche di ogni oggetto in server di storage collocati in zone diverse, ossia raggruppamenti di server isolati gli uni dagli altri per prevenire guasti e controllare il surriscaldamento. Il numero di repliche per ogni oggetto e zone è configurabile. Network (Neutron): è il modulo specializzato nelle comunicazioni di rete, inizialmente molti dei suoi compiti erano svolti da Nova (nova-network), ma poi si è deciso di raggruppare le sue funzionalità in un modulo a parte. Fornisce modelli 14 di rete flessibili per soddisfare i bisogni delle più disparate applicazioni e gruppi di utenti, occupandosi anche, attraverso l’installazione di apposite estensioni, della sicurezza di rete e del load balancing. Dashboard (Horizon): è l’interfaccia web con cui dialoga l’utente, anche se spesso, molti cloud providers che utilizzano OpenStack, preferiscono implementarne una propria, perché è la componente della piattaforma più esposta all’esterno e direttamente visibile al cliente. La struttura globale del progetto è visibile nella figura sottostante e prevede altre funzionalità che sono state integrate nel tempo, la comunicazione tra esse avviene tramite scambio di messaggi. Figura 5 Struttura globale di OpenStack http://www.html.it Gli altri servizi, collocati sotto il nucleo principale, com’è possibile distinguere dalla figura 4, sono chiamati Open Stack Shared Services e sono: Identity (Keystone): gestisce meccanismi per l’autenticazione, presentando, in quest’ambito, un’ampia gamma di soluzioni. Image (Glance): è il servizio di gestione delle immagini virtuali. Block Storage (Cinder): è il modulo che si occupa del salvataggio dei dati su volumi a blocchi, in precedenza era un servizio di Nova (nova-volume). 15 2.1.2 Elasticità OpenStack è progettato per garantire l’elasticità tramite scalabilità orizzontale, bilanciando il carico tra gruppi di servizi funzionalmente identici, che comunicano tra loro tramite scambio di messaggi, ad esempio nodi nova-compute o nova-api, che come suddetto sono quelli che si occupano della creazione, eliminazione e controllo delle istanze VMs. Le decisioni sulla scalabilità sono intraprese in base alla tipologia di macchina virtuale da utilizzare, da questo punto di vista, OpenStack permette sia di definire dei modelli (flavor) personalizzabili di VM scegliendo quindi la quantità di core virtuali, di RAM, di capacità di memoria, sia di avvalersi dei flavor predefiniti. OpenStack offre anche alcune funzionalità che consentono la scalabilità verticale, come l’API Resize Server [5], che converte, su richiesta dell’utente, un’istanza di VM preesistente a un flavor differente sia per potenziarla sia per eseguire l’operazione inversa. La VM, su cui viene effettuato il ridimensionamento, viene salvata, affinché possa essere ripristinata (rollback) in caso di malfunzionamento successivo alla trasformazione. Il sistema non elimina la macchina virtuale, finché l’utente non conferma l’operazione di conversione, cosa che avviene automaticamente se l’operazione non viene annullata e si raggiunge un tempo limite, solitamente di ventiquattro ore. Questo meccanismo però consente solo l’elasticità verticale ed è un’operazione che non si presta a essere automatizzata, avviene infatti su richiesta e successiva conferma, purché non siano utilizzati servizi esterni e script appositi. Nella release Havana è stata studiata un’interessante funzionalità di scalabilità automatica, che tuttavia richiedere ancora di essere ben sviluppata, grazie all’integrazione tra due moduli aggiuntivi di OpenStack [5]: Orchestration (Heat): implementa un motore di coordinamento per istanziare, gestire e configurare gruppi di istanze VMs, rappresentate da modelli (templates) e utilizzando i flavor esistenti, con un semplice comando. Telemetry (Ceilometer): permette il monitoraggio delle risorse all’interno dell’infrastruttura. Inizialmente alcune sue funzioni erano usate con lo scopo di misurare i servizi utilizzati dal consumatore per stabilirne i costi. In seguito le sue 16 funzionalità sono state ampliate, introducendo la possibilità di creare allarmi, basati sui valori registrati e compiere quindi delle specifiche azioni. La collaborazione tra questi due componenti permette di sviluppare logiche di autoscaling, si utilizza ad esempio Ceilometer per registrare il carico di lavoro della CPU all’interno dell’infrastruttura ed associare azioni quando si raggiunge una certa soglia, come istanziare un gruppo di VMs o terminarlo con Heat. Un’altra funzionalità introdotta di recente, anch’essa da perfezionare, riguarda l’utilizzo delle cosiddette “cells” [5], che permettono di scalare l’infrastruttura cloud in maniera ancora più semplice e distribuita. In pratica, le macchine fisiche in un’infrastruttura cloud possono essere partizionate in gruppi chiamati cells, la traduzione più vicina può essere cellule. La struttura di quest’assembramento è fatta ad albero, la cell al vertice (API cell) è rappresentata da un server fisico, che è l’unico a eseguire il servizio nova-api, ma non nova-compute. Le cellule figlie eseguiranno tutti i servizi nova tipici, incluso compute e quelli riguardanti code di messaggi e database, eccetto però nova-api. La comunicazione tra cellule figlie e API cell avviene tramite il servizio nova-cells, presente indipendentemente dalla gerarchia, che si occupa anche di coordinare lo scheduling tra le cellule e quello effettuato normalmente dal nova-scheduler. 2.2 VMware vSphere e vCloud VMware vSphere (vSphere 5), erede di VMware Infrastructure, è un sistema operativo per il Cloud Computing, in altre parole una suite di strumenti software a pagamento, che consente di trasformare un’infrastruttura informatica (IT infrastructure) in una piattaforma cloud privata, con i suoi servizi tipici. 2.2.1 Struttura L’architettura di vSphere comprende diversi componenti che collaborano tra loro per garantire due tipologie di servizi [8]: 17 Servizi per le applicazioni: un insieme di funzionalità fornite per assicurare la continuità, la sicurezza, la scalabilità, la tolleranza agli errori di tutte le applicazioni eseguite su vSphere, indipendentemente dalla tipologia di applicazione e dal sistema operativo usato sulla VM. Servizi per l’infrastruttura: l’insieme degli elementi che consentono la virtualizzazione e la gestione ottimale delle risorse hardware e comprendono servizi di calcolo, storage e rete. Figura 6 Componenti di vSphere http://www.ki.agh.edu.pl/ I due pilastri di vSphere sono [8]: vSphere vCenter Server: è il centro di controllo dell’intera infrastruttura virtuale. Aggrega le risorse hardware dei vari server fisici sui quali è installato l’hypervisor ESXi (ESXi host), presentando all’amministratore di sistema un’unica collezione di 18 risorse dinamiche da assegnare alle VM nell’ambiente virtuale. Tra gli elementi costitutivi di vCenter Server, si ha un meccanismo per il controllo degli accessi utente (User Access Control) e dei relativi permessi, un set di servizi essenziali (Core Services), che vanno dalla gestione e configurazione delle VM sugli host, alla raccolta di statistiche sugli elementi dell’infrastruttura e l’impostazione di allarmi, fino alla pianificazione di determinate azioni, periodiche e non. Gli utenti si connettono al vCenter Server attraverso un’interfaccia chiamata vServer Client, di cui è disponibile anche una versione accessibile da web browser vServer Web Client. vSphere ESXi: è un hypervisor di tipo bare-metal, installabile quindi direttamente sull’hardware dei singoli server fisici (host) che compongono l’infrastruttura. ESXi sostituisce la precedente versione dell’hypervisor ESX, un sistema operativo vero e proprio basato su Linux Red Hat, che richiedeva frequenti aggiornamenti e un notevole dispendio in termini di risorse. La nuova versione si configura comunque come un hypervisor nativo ma è molto più leggera, priva della Service Console, utilizza strumenti di gestione remota invece della linea di comando locale e integra tutti gli agenti VMware direttamente nel kernel (VMkernel). L’altro elemento che completa il quadro delle soluzioni cloud di VMware è vCloud Director, uno strumento software progettato per raggruppare le risorse dell’infrastruttura virtuale creata tramite vSphere in data center virtuali (vDC), le cui risorse sono offerte ai consumatori in qualità di servizi catalogati. In pratica gli amministratori dell’infrastruttura possono raggruppare i clienti in organizzazioni (organization), che rappresentano ad esempio un gruppo con una determinata policy di accesso ai servizi, come unità aziendali, divisioni o società sussidiarie. Ogni organizzazione ha le proprie risorse virtuali isolate tramite il vDC (organization vDC), una propria autenticazione sicura, specifiche politiche di controllo e cataloghi unici, facendo sì che si venga a creare un ambiente multi-tenant6, dove più elementi condividono la stessa infrastruttura. Multi-tenant: traducibile come co-proprietario, ossia un’architettura in cui un’applicazione software partiziona virtualmente i suoi dati e la sua configurazione in modo che ogni client lavori con una sua istanza personalizzata. 6 19 Il vDC fornitore (provider vDC) introduce nell’architettura vCloud un livello di astrazione addizionale, che si interpone tra la strutturazione delle risorse al livello vSphere e quella del vDC dell’organizzazione, permettendo di configurare quest’ultimo secondo diversi modelli di allocazione delle risorse: Pay-as-you-go model: il vDC viene mappato su un pool di risorse senza limitazioni e queste sono assegnate solo quando viene eseguita un’applicazione nel vDC. Allocation-pool model: solo una percentuale delle risorse allocate sono affidate al vDC dell’organizzazione. Reservation-pool model: tutte le risorse allocate sono affidate al vDC. 2.2.2 Elasticità VMware utilizza diversi meccanismi per garantire l’elasticità all’interno dell’infrastruttura cloud vSphere, quello principale è il DRS (Distributed Resource Scheduler) [6], che si occupa di amministrare la capacità computazionale derivante da una collezione di risorse informatiche, organizzate in raggruppamenti logici (resource pools), monitorandone l’utilizzo e assegnando quelle disponibili alle VM, secondo una logica prioritaria e che riflette i bisogni dell’attività aziendale. I pool di risorse possono essere organizzati gerarchicamente, infatti l’amministratore della struttura può stabilire come queste devono essere distribuite tra gruppi di VM, ad esempio un ramo dell’azienda potrebbe aver bisogno di più capacità computazionale rispetto a un altro, così il DRS garantisce che questa necessità sia soddisfatta. Tuttavia se quella capacità non viene sfruttata, può essere resa comunque disponibile ad un altro pool dell’host. Le VM possono essere aggiunte o rimosse da un pool di risorse, oppure è possibile assegnare una VM preesistente a un nuovo raggruppamento, favorendo così la scalabilità orizzontale e la dinamicità. Oltre a raggruppare le risorse di un singolo host in pool, vSphere prevede un ulteriore raggruppamento per migliorare le politiche di allocazione delle VM e di flessibilità in generale: i VMware DRS cluster. Un DRS cluster è una collezione di host su cui è installato l’hypervisor ESXi e delle 20 relative VMs, con risorse condivise e un’interfaccia di gestione condivisa. Se il DRS è abilitato sul cluster, allora esegue periodicamente il bilanciamento del carico all’interno del raggruppamento, procedendo a una redistribuzione, automatica o manuale, delle VMs tra gli host tramite migrazione (vMotion), in maniera veloce e garantendo la continuità del servizio. E’ possibile aggiungere o rimuovere sia host, anche se appartenenti ad altri vCenter Server, che VM al cluster, nel primo caso tutte le VMs e le risorse dell’host sono aggiunti al cluster. Quando il carico di una VM aumenta, il DRS valuta prima la sua priorità riguardo l’allocazione di risorse secondo le policy stabilite e, se giustificato, procede all’aggiunta di capacità secondo due modalità: migrando la VM sovraccaricata verso un altro host o liberando spazio su quell’host, ossia predisponendo la migrazione delle altre VM verso altri host. Un'altra funzionalità che favorisce l’elasticità dell’infrastruttura è l’Hot Add [6], cioè l’aggiunta o rimozione di risorse di calcolo, RAM o dischi alle VM “a caldo”, ossia senza richiederne lo spegnimento, tuttavia questo comporta un aumento dell’overhead complessivo e non è sempre supportata dal guest OS. Per quanto riguarda vCloud, dalla versione vCloud Director 5.1 [9], sono stati introdotti dei cambiamenti che migliorano la flessibilità del sistema, introducendo meccanismi che consentono di espandere le risorse affidate ad un’organizzazione anche senza implicare la creazione di nuovi vDC sia per il provider sia per l’organizzazione. Innanzitutto VMware definisce elastici gli organization vDC, solo se possono attingere alle risorse di tutti i cluster compresi nel provider vDC. I vDC delle organizzazioni creati secondo il modello allocation-pool sono elastici di default, nel senso che è possibile ampliarli utilizzando tutti i pool di risorse associate al provider o eventualmente aggiungendone altri, inoltre le VM del vDC possono condividere le risorse inutilizzate. Nel modello pay-as-you-go, invece, ogni VM è un’entità a se stante, ovvero non può condividere le risorse di altre istanze e ha dei limiti specifici. In questo caso il vDC dell’organizzazione può essere esteso aggiungendo resource pool al provider, ciò consente la creazione di altre macchine virtuali. 21 Capitolo 3: Cloud Providers 3.1 Amazon Web Services AWS (Amazon Web Services) si identifica come un ampio set di servizi di calcolo, memorizzazione, database, rete, applicativi, comprendenti sia funzionalità di tipo IaaS sia PaaS, offerti e amministrati tramite un’interfaccia web comune, la AWS Management Console. La piattaforma di servizi era utilizzata in precedenza solo da Amazon, per supportare la propria attività, fino a quando, nel 2006, l’azienda non decise di estendere il suo utilizzo all’esterno sotto forma di servizi a pagamento. 3.1.1 Panoramica La rete di data center di Amazon è suddivisa in regioni e zone di disponibilità, le prime sono vere e proprie aree geografiche, le seconde rappresentano i siti, isolati tra loro, in cui sono collocati i data center all’interno di una stessa regione e servono per garantire, attraverso la ridondanza, tolleranza ai guasti e continuità del servizio. Amazon permette quindi di scegliere la regione in cui vogliamo acquistare i nostri servizi, naturalmente più è vicina la regione e minore sarà la latenza e quindi il tempo di risposta del server, inoltre i prezzi dei servizi variano anche in base alle regione. Il numero di servizi che fanno parte di AWS cresce molto velocemente, è possibile raggrupparli in [10]: Compute: sono inclusi tutti i servizi legati alle risorse di calcolo, che consentono quindi di istanziare e gestire server virtuali nell’infrastruttura cloud, il più importante è Amazon EC2 (Amazon Elastic Compute Cloud). 22 Storage & Content delivery: riguarda funzionalità per la memorizzazione di grandi moli di dati, backup, file multimediali e collegamenti tra cloud e data center aziendale. Database: per la gestione di diverse tipologie di database. Networking: ciò che riguarda le risorse di rete, come ad esempio la funzione DNS per rendere accessibili le nostre istanze all’esterno in maniera semplice. Administration & Security: include compiti di controllo degli accessi, monitoraggio risorse e gestione di allarmi e azioni automatiche. Deployment & Management: per l’esecuzione e lo sviluppo di applicazioni, la creazione di template per la configurazione automatica di un certo ambiente software. Analytics: utilizzato per l’analisi di dati basata sulla distribuzione del carico del lavoro e per la comunicazione di questi agli altri servizi AWS. Application Services: comprende applicazioni specifiche già fornite senza la necessità di dover acquistare istanze o storage. Mobile Services: include servizi utilizzabili da applicazioni mobile per compiere attività specifiche. Enterprise Services: qui troviamo funzioni per la produttività e la virtualizzazione di ambienti desktop. Amazon fornisce soluzioni di pagamento per i propri servizi estremamente adattabili alle esigenze del cliente, ad esempio per il servizio di calcolo EC2 si evidenziano diverse opzioni di acquisto e un’ampia scelta di tipologie di istanza, come i flavor di OpenStack. Il cliente può scegliere innanzitutto fra tre modelli di prezzo per servirsi di una istanza di VM [12]: Istanze On-Demand: il cliente può pagare l’istanza secondo una tariffa oraria, senza impegni a lungo termine, questo permette di ottimizzare le risorse per il fornitore e ridurre notevolmente i costi per progetti a breve termine del cliente. Istanze Riservate: queste istanze sono utili per chi farà un utilizzo continuativo della capacità elaborativa fornita, ad esempio per chi ha bisogno di server 23 accessibili ventiquattro ore al giorno. In questo caso Amazon prevede la possibilità di pagare una quota del costo totale in anticipo e poi il resto mensilmente o di pagare tutto in anticipo, oppure pagare solamente a scadenza mensile senza anticipo. Il prezziario sottolinea la percentuale di risparmio che si ottiene utilizzando istanze riservate rispetto a quelle on-demand, quando se ne fa un uso costante nel tempo. Istanze Spot: il costo in questo caso varia periodicamente e in maniera direttamente proporzionale alla richiesta di istanze di questo tipo. Il cliente può fare un’offerta sul prezzo massimo che intende pagare per un’istanza o per un gruppo di queste, specificando tutte le caratteristiche (e.g. zona di disponibilità, regione, numero di istanze, tipo) e se questa è maggiore rispetto al prezzo Spot attuale, allora la richiesta è soddisfatta. I prezzi delle istanze sono legati anche al SO di cui è dotata l’istanza, le scelte variano da Microsoft Windows con o senza SQL Server, a Linux e le versioni Red Hat Enterprise e SUSE Enterprise Server. Le VMs messe a disposizione sono di diverso tipo, adatte a molteplici contesti, casi d’uso e possono essere suddivise in due famiglie: a prestazione fissa e variabile. Le prime sono usate in ambienti in cui è richiesta una capacità di calcolo costante e alta, per le seconde invece è stato progettato un sistema a crediti CPU, che vengono accumulati quando la macchina è sottoutilizzata e sfruttati quando ci sono picchi di carico, determinando così l’incremento delle sue prestazioni. Oltre a questa classificazione generale si hanno poi macchine specializzate nel calcolo, nella memorizzazione, nelle risorse di rete o macchine adatte a più scopi. 3.1.2 Elasticità Uno dei pilastri di AWS è il componente di calcolo Amazon EC2 (Amazon Elastic Compute Cloud), la parola “elasticità” è parte integrante del suo nome, si identifica infatti come un servizio web che fornisce capacità computazionale dinamica, ossia ridimensionabile secondo le esigenze del cliente. Oltre alle offerte analizzate nel paragrafo precedente, che garantiscono una certa 24 flessibilità nelle funzionalità acquistabili dal cliente, Amazon offre un servizio di Auto Scaling [11] gratuito, che è parte integrante di AWS. Questo servizio permette di impostare una scalabilità, o meglio elasticità, orizzontale automatica, ossia di aumentare o diminuire il numero di istanze EC2 all’interno dell’architettura della nostra applicazione, utilizzando i cosiddetti gruppi di auto scaling (Auto Scaling groups). Un gruppo non è altro che una collezione di istanze EC2 con una o più politiche di scalabilità definite dall’utente (Auto Scaling Policies), che specificano quando lanciare o terminare VMs. La funzionalità di scalabilità automatica si occupa anche di individuare (health checks) e sostituire istanze EC2 mal funzionanti con altre uguali in maniera autonoma (fault tolerant) ed è inoltre possibile far sì che siano utilizzate dal servizio più zone di disponibilità e sottoreti, in modo che se una di queste diventasse improvvisamente inutilizzabile, si sfrutterebbe immediatamente un’altra zona per garantire la continuità del servizio (highly available). Il servizio di Auto Scaling si integra con altri due servizi, uno per il bilanciamento del carico (Elastic Load Balancing) [11] e l’altro per monitorare l’utilizzo delle risorse e lanciare allarmi (Amazon Cloud Watch) [11]. Figura 7 Struttura di Amazon EC2 www.slideshare.com 25 L’integrazione con CloudWatch consente di impostare una scalabilità dinamica, ovvero definire logiche di elasticità basate sul monitoraggio delle risorse. In pratica, si monitora la risorsa di interesse, impostando un allarme e una conseguente azione da effettuare, quando il suo valore supera una certa soglia. Nel caso d’interesse l’azione consisterà nell’inviare avvisi al servizio di Auto Scaling, il quale eseguirà le istruzioni della policy definita per il gruppo di istanze, nella maggior parte dei casi terminare delle VMs (scale in) o lanciarle (scale out). In questi casi è importante scegliere il valore per il quale il servizio di Auto Scaling sospenderà ogni attività di scalabilità (Auto Scaling Cooldown), per far sì che non vengano lanciate altre istanze prima che quelle precedenti si attivino. Bisogna tenere presente che il numero di istanze minimo e massimo di cui può essere composto il gruppo di scalabilità è specificato inizialmente nella sua configurazione e utilizzando la scalabilità dinamica, questo numero sarà sempre contenuto entro i limiti definiti. L’utente comunque può intervenire in ogni istante per modificare manualmente i suddetti limiti, Amazon fa riferimento in questo caso a una scalabilità di tipo manuale. L’altro servizio che può collaborare con l’Auto Scaling è quello di Elastic Load Balancing, fornito principalmente per distribuire automaticamente il traffico in entrata tra istanze EC2 multiple ma si occupa anche di altre funzionalità. Infatti nel caso in cui un’istanza risulti compromessa (unhealthy), il bilanciatore provvede a isolarla e a dirottare il traffico verso altre istanze, finché non è ripristinata e lo stesso meccanismo viene applicato anche per le zone di disponibilità all’interno di una regione. Un’altra funzione espletata da questo servizio concerne la sicurezza della rete, infatti il Load Balancer si interpone tra la rete Internet esterna e quella privata in cui si trovano le istanze, analizzando il traffico e occupandosi del lavoro di cifratura e decifratura al posto delle VMs. Per fare ciò bisogna creare dei gruppi di sicurezza (security groups) ai quali aggiungere le istanze, essi agiscono da firewall virtuale, permettendo o no il traffico secondo regole predefinite. La sua integrazione con il servizio di scalabilità automatica permette di migliorare la 26 gestione del carico verso i server e definire condizioni ancora più specifiche per aumentare o diminuire il numero di istanze, ad esempio se la latenza del bilanciatore eccede un certo valore di soglia, è opportuno aggiungerne altre. 3.2 Microsoft Azure Azure è la piattaforma cloud Microsoft, in altre parole una raccolta di servizi di calcolo, archiviazione, rete e app in continua crescita. Inizialmente fu concepita con sole funzionalità di tipo PaaS, probabilmente per non scontrarsi col gigante dei servizi IaaS Amazon AWS, ma pian piano ha inglobato nella sua sfera di interesse anche la fornitura di strumenti di gestione dell’infrastruttura cloud. 3.2.1 Panoramica Il numero di servizi che fanno parte della piattaforma cresce molto velocemente, quelli principali sono tre [13]: Siti Web: è una soluzione di web hosting PaaS che consente di realizzare siti e applicazioni web nel cloud, liberando l’utente da compiti di gestione dell’infrastruttura sottostante, che richiedono competenze specifiche e possono risultare impegnativi. Microsoft dà al cliente la piena libertà di utilizzare gli strumenti di sviluppo e i linguaggi di programmazione preferiti e fornisce anche la possibilità di creare siti da una galleria di modelli preinstallati delle applicazioni più famose. Il rilascio (deployment) di un sito web è assimilabile a una semplice operazione di copia remota e può essere eseguito tramite diversi strumenti messi a disposizione (e.g. protocollo FTP, servizio Web Deploy, repository Git, sincronizzazione Dropbox, pubblicazione TFS). Siti Web si basa essenzialmente su Servizi Cloud e Macchine Virtuali di Azure e può essere eseguito sia su un set di VMs singole, che possono contenere molteplici siti web di altri utenti, sia su VMs dedicate. Servizi Cloud: offre una piattaforma (PaaS) per il supporto e lo sviluppo di applicazioni scalabili e affidabili, eliminando i problemi riguardanti la gestione 27 della stessa, permettendo così ai programmatori di concentrarsi unicamente sulla propria attività. Anche Servizi Cloud si basa su Macchine Virtuali di Azure, offrendo, per queste, due opzioni diverse: istanze di ruoli web (Web Roles), che eseguono una versione di Windows Server con IIS (Internet Information Services) e istanze di ruoli di lavoro (Worker Roles) senza IIS. Le applicazioni di questo servizio solitamente utilizzano una combinazione di queste istanze, sfruttando magari i ruoli web per la gestione delle richieste in arrivo dagli utenti e i ruoli di lavoro per elaborarle. Macchine Virtuali: è la funzionalità IaaS di Azure che consente di creare un’infrastruttura cloud, creando e configurando VMs attraverso il Windows Azure Management Portal oppure l’API di Gestione Servizi di Azure basata su REST, fornendo in quest’ultimo caso anche strumenti di scripting client specifici per la maggior parte dei SO. La creazione di una VM richiede oltre alla scelta del tipo, che come negli altri casi è un modello con una certa configurazione di risorse virtuali, anche la creazione di un disco rigido virtuale (VHD), personalizzato o selezionato dalla raccolta Microsoft, con il relativo sistema operativo. Le macchine virtuali possono essere raggruppate in un unico servizio cloud, ossia gli utenti possono accedervi attraverso un unico IP pubblico, poi Azure si occuperà di smistare il carico tra le istanze di un’applicazione con il servizio di Load Balancing offerto. Per garantire la tolleranza agli errori e la continuità di servizio è poi possibile smistare le istanze del servizio in più set di disponibilità. Il pagamento della VM è orario, inizia quando l’istanza è in esecuzione e termina quando è rimossa. 3.2.2 Elasticità Azure fornisce la possibilità di scalare applicazioni che eseguono ruoli web o ruoli di lavoro e macchine virtuali, in maniera automatica o manuale [13]. Per scalare un'applicazione con istanze di ruoli web o ruoli di lavoro, sono aggiunte o rimosse istanze dei rispettivi ruoli per supportare il carico di lavoro. Per configurare la scalabilità di 28 un’applicazione, le VMs create devono essere aggiunte a un set di disponibilità e possono essere inizialmente attivate o disattivate, anche se poi questo stato cambierà in base al carico. La scalabilità è inoltre influenzata dal numero di core totali delle VM usate per un’applicazione ovvero questa può essere scalata solo entro i limiti di core previsti dalla sottoscrizione e le VMs del set di disponibilità devono avere le stesse dimensioni. Microsoft Azure offre un servizio di scalabilità sia manuale tramite il pannello di gestione, in cui l’utente può specificare se aumentare o diminuire il numero d’istanze entro i limiti previsti, sia automatica e in questo caso può essere impostata in base all’utilizzo medio della CPU o in base ai messaggi che arrivano in una coda. Nel primo caso se la percentuale media di utilizzo della CPU sale o scende oltre le soglie definite, sono create o eliminate istanze del ruolo o sono attivate o disattivate macchine virtuali da un set di disponibilità, inoltre è possibile specificare il cooldown e l’aumento o diminuzione del numero d’istanze per ogni operazione di scalabilità. Per quanto riguarda invece la seconda modalità, quella basata sui messaggi in coda, se il numero di messaggi della coda, associata a un ruolo o a un set di disponibilità, sale o scende oltre una soglia specificata, vengono create o eliminate istanze del ruolo o vengono attivate o disattivate macchine virtuali da un set di disponibilità. Un caso d’uso tipico per questa modalità è ad esempio un ruolo di lavoro che deve processare i messaggi presenti in una coda, l’operazione in questo caso potrebbe anche non essere dispendiosa in termini di utilizzo CPU ma potrebbe esserlo in termini di tempo. Azure dà anche la possibilità di scalare le risorse collegate all’applicazione, come ad esempio il database associato a questa. Altra opzione che può rivelarsi utile è quella di pianificare la scalabilità automatica solo in alcuni orari del giorno o della notte. 29 Conclusioni In questo elaborato sono state affrontate varie soluzioni per quanto riguarda il tema dell’elasticità nel Cloud Computing, sia in base ad alcune tecnologie orientate alla costruzione e alla gestione dell’infrastruttura come OpenStack e VMware, sia per le scelte effettuate da aziende che forniscono direttamente i servizi cloud. Il filo conduttore che lega tutte le soluzioni è che l'offerta di servizi elastici conviene sia al produttore, che può ottimizzare l’utilizzo delle sue risorse hardware, magari assegnando quelle inutilizzate ad altri clienti, che al consumatore, che può ottenere un grande risparmio. Quello che si evince è che OpenStack è sicuramente un progetto molto interessante, open source, giovane e in rapida evoluzione, tuttavia i meccanismi di scalabilità automatica sono stati introdotti solo di recente e presentano ancora alcuni problemi, riscontrati dalla comunità. Per quanto riguarda VMware, azienda navigata nelle tecnologie di virtualizzazione, offre delle funzionalità avanzate sotto l’aspetto della flessibilità come il DRS e l’Hot Add e fornisce un sistema operativo completo che facilita la messa a punto di un’infrastruttura cloud. Il gigante del Cloud Computing è Amazon con i suoi servizi AWS, l’elasticità deriva sia dalle formule di pagamento per i servizi offerti, estremamente adattabili alle esigenze del cliente, sia dai meccanismi di scalabilità automatica forniti, basati su Auto Scaling, CloudWatch e Elastic Load Balancer. In ultimo sono state analizzate le proposte IaaS e PaaS di Microsoft, con Azure, che, 30 rispetto ad Amazon, ha incentrato dapprima la sua attività su servizi di tipo PaaS per poi aprirsi anche a soluzioni IaaS con Macchine Virtuali. I metodi di pagamento per le VMs non contemplano le numerose scelte offerte da Amazon e le funzionalità di scalabilità automatica non permettono varie opzioni come quelle fornite dall’integrazione tra CloudWatch e Auto Scaling, è infatti possibile scalare un’applicazione solo in base al parametro CPU e alle code di messaggi. 31 Bibliografia [1] P. Mell, T. Grance, The NIST Definition of Cloud Computing, Recommendations of the National Institute of Standards and Technology, 2011. [2] R. Buyya, J. Broberg, A. Goscinski, Cloud Computing: Principles and Paradigms, John Wiley & Sons, Inc., 2011. [3] Wikipedia, Elasticity (Cloud Computing). [4] Wikipedia, Hypervisor. [5] Documentazione OpenStack, http://docs.openstack.org/, https://wiki.openstack.org. [6] Documentazione VMware, https://pubs.vmware.com. [7] OpenStack: i moduli e l’architettura, http://www.html.it/articoli/openstack-i-modulie-larchitettura/ [8] Panoramica su VMware vSphere 5.1, http://www.netsetup.it/vmwarevsphere5/panoramica-vmware-vsphere-51 [9] vCloud Director 5.1(.1) Changes in Resource Entitlements (Updated), http://it20.info/2012/10/vcloud-director-5-1-1-changes-in-resource-entitlements/ [10] Introduzione ad Amazon Web Services, http://www.html.it/articoli/introduzione-adamazon-web-services-2/ [11] Documentazione Amazon AWS, http://docs.aws.amazon.com/ [12] Amazon EC2 introduzione sugli ambienti virtuali in cloud computing, https://otherplus.com/tech/amazon-ec2/ [13] Documentazione Microsoft Azure, http://azure.microsoft.com/it-it/documentation 32