Scalabilità ed Elasticità in Infrastrutture di Cloud Computing

Transcript

Scalabilità ed Elasticità in Infrastrutture di Cloud Computing
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