Slide relative ad una presentazione generale sul cloud, parte 1. Introduzione su cosa so i servizi IaaS e PaaS, da quali elementi sono composti e quali prodotti sono disponibili sul mercato
2. Cosa aspettarsi da
questo seminario:
Conoscenza degli elementi
che compongono un cloud
Alberto Zuin
http://www.azns.it
alberto@azns.it
3. Cosa aspettarsi da
questo seminario:
Conoscenza degli elementi
che compongono un cloud
Conoscenza degli
strumenti aggiuntivi del cloud
Alberto Zuin
http://www.azns.it
alberto@azns.it
4. Cosa aspettarsi da
questo seminario:
Conoscenza degli elementi
che compongono un cloud
Conoscenza degli
strumenti aggiuntivi del cloud
Linee guida da seguire per realizzare una
web application scalabile
Alberto Zuin
http://www.azns.it
alberto@azns.it
5. Cos'è un cloud?
Alberto Zuin
http://www.azns.it
alberto@azns.it
6. Quando usare il cloud?
Alberto Zuin
http://www.azns.it
alberto@azns.it
7. Quando non usare il cloud?
Alberto Zuin
http://www.azns.it
alberto@azns.it
22. vs.
Differenza tra
struttura virtualizzata
e Cloud Computing Alberto Zuin
http://www.azns.it
alberto@azns.it
23. vs.
Differenza tra Cloud
Computing e Grid
Computing Alberto Zuin
http://www.azns.it
alberto@azns.it
24. Private Cloud vs Public Cloud
Private Pubic
Posizione Interna all'azienda Internet
Connessione Connessa alla rete locale Connessa ad Internet
Scalabilità Tendenzialmente verticale Tendenzialmente Orizzontale
Scalabilità 100-1000 nodi +10.000 nodi
massima
Condivisione Single-tenant Multi--tenat
Prezzo In base alla capacità In base all'utilizzo
Centro Costo Ricarico
finanziario
(ma c'è anche l'hybrid...)
Alberto Zuin
http://www.azns.it
alberto@azns.it
25. IaaS
Alberto Zuin
http://www.azns.it
alberto@azns.it
26. IaaS: ridondanza e
scalabilità dello
storage
Alberto Zuin
http://www.azns.it
alberto@azns.it
27. Storage
Locale
120
100
80
Ridondanza
60 Scalabilità
Velocità
40
20
0
Storage Locale
Alberto Zuin
http://www.azns.it
alberto@azns.it
28. SAN: Storage
Area Network
120
100
80
Ridondanza
60 Scalabilità
Velocità
40
20
0
Storage Locale SAN
Alberto Zuin
http://www.azns.it
alberto@azns.it
29. Cluster
Storage
120
100
80
Ridondanza
60 Scalabilità
Velocità
40
20
0
Storage Locale SAN Cluster
Alberto Zuin
http://www.azns.it
alberto@azns.it
30. 1 2 2 4
4 1 3 3
FILE
1234
Cluster storage con replica 2
Alberto Zuin
http://www.azns.it
alberto@azns.it
36. Quale Cloud Controller?
Closed Source vs. Open Source
Pro: assistenza efficace in Pro: tutti compatibili con le
caso di guasto, semplicità API Amazon EC2, aperti
d'uso anche per il controllo del
Con: costo elevato, API non cloud stesso (ad es. billing)
compatibili con Amazon tramite API
EC2. Con: nessuna assistenza
diretta, nessuna garanzia
Alberto Zuin
http://www.azns.it
alberto@azns.it
37. Le API di Amazon
Alberto Zuin
http://www.azns.it
alberto@azns.it
48. Engine Yard
Linguaggi: PHP (leader), Ruby, node.js
Database Relazionali: MySQL, PostgreSQL
Database Documentali: MongoDB, Redis
Controllo della cache via memcached e Redis
Controllo dei processi via delayed_job e resque Alberto Zuin
http://www.azns.it
alberto@azns.it
Un cloud è un insieme di risorse hardware (server, storage, networking) ridondata e scalabile, sul quale è possibile realizzare servizi a loro volta ridondati e scalabili attraverso del software adatto allo scopo.
Un cloud è un insieme di risorse hardware (server, storage, networking) ridondata e scalabile, sul quale è possibile realizzare servizi a loro volta ridondati e scalabili attraverso del software adatto allo scopo.
Un cloud è un insieme di risorse hardware (server, storage, networking) ridondata e scalabile, sul quale è possibile realizzare servizi a loro volta ridondati e scalabili attraverso del software adatto allo scopo.
Un cloud è un insieme di risorse hardware (server, storage, networking) ridondata e scalabile, sul quale è possibile realizzare servizi a loro volta ridondati e scalabili attraverso del software adatto allo scopo.
Un cloud è un insieme di risorse hardware (server, storage, networking) ridondata e scalabile, sul quale è possibile realizzare servizi a loro volta ridondati e scalabili attraverso del software adatto allo scopo. Queste risorse hardware sono ospitate remotamente e quindi saranno sfruttabli attraverso Internet In un cloud queste risorse sono allocabili e rilasciabili rapidamente e senza l'intervento del gestore del cloud Cos'è un cloud?
Quando usare il cloud: Quando si vogliono abbattere i costi per l'infrastruttura interna Quando si ha la necessità di scalare in base alle necessità Ottimo per le start-up non infrastrutturate Quando usare il cloud?
Quando non usare il cloud: Quando si sa già che la quantità di risorse necessarie sarà così elevata che il cloud potrebbe risultare antieconomico Quando si ha la necessità del controllo diretto delle risorse Hardware Quando si ha la necessità di usare software non studiato espressamente per lavorare su più server contemporaneamente Quando si ha la necessità di controllare direttamente il networking (es. BGP, Anycast, ecc.) Quando non usare il cloud?
La scalabilità di un sistema può essere verticale (aumentare le risorse del server – es. Aumentare la RAM, aggiungere CPU, ecc.) oppure orizzontale (più server che lavorano assieme). In questo seminario, quando parleremo di scalabilità, intendiamo esclusivamente l'orizzontale, sebbene anche la verticale sia applicabile al cloud. Scalabilità nel cloud:
La scalabilità di un sistema può essere verticale (aumentare le risorse del server – es. Aumentare la RAM, aggiungere CPU, ecc.) oppure orizzontale (più server che lavorano assieme). In questo seminario, quando parleremo di scalabilità, intendiamo esclusivamente l'orizzontale, sebbene anche la verticale sia applicabile al cloud. Scalabilità nel cloud:
La scalabilità di un sistema può essere verticale (aumentare le risorse del server – es. Aumentare la RAM, aggiungere CPU, ecc.) oppure orizzontale (più server che lavorano assieme). In questo seminario, quando parleremo di scalabilità, intendiamo esclusivamente l'orizzontale, sebbene anche la verticale sia applicabile al cloud. Scalabilità nel cloud:
La Multi-Tenancy è la capacità di un software di assumere differenti aspetti per diversi clienti. Quindi non più un software e un sistema dedicato ad ogni cliente, ma un unico software in grado di gestire al suo interno più clienti simili Multi-Tenancy
Da quali elementi è composto?
Networking: connessione verso Internet ad elevate prestazioni di banda, ridondata (più connessioni blianciate e ridondate attraverso il protocollo di routing BGP). In alcuni casi, è possibile avere ridondanza multidatacenter attraverso Anycast (indirizzi IP “annunciati” in diversi datacenter) Networking
Capacità computazionale: più server dotati di quantità importanti di CPU e RAM con un Hypervisor (VMWare, XEN o KVM) in grado di gestire istanze virtualizzate Capacità computazionale
Storage: un sistema di storage scalabile ove risiedono le immagini delle VM istanziate sull'Hypervisor e/o i dati gestiti dalle VM. E' possibile trovare storage di tre tipi: SAN: poco scalabili ma veloci → costi elevati per l'utente Cluster di “commodity computer”: molto scalabili ma più lenti soprattutto in scrittura → costi limitati per l'utente Storage dedicati per specifiche applicazioni (es. Amazon RDS – Relational Database Server)e Storage
Sistema di controllo del cloud, con API per l'interfacciamento verso l'esterno Cloud controller
Differenza tra IaaS, PaaS e SaaS
Differenza tra IaaS, PaaS e SaaS
IaaS (Infrastructure as a Service): Servizio composto dalle mere risorse Hardware (CPU, RAM, spazio su disco, connettività). Business model “a consumo”: si fissa una quota massima di utilizzo ma si paga solo ciò che si consuma realmente. Ci sono delle API per connettersi al servizio e “scalare” in caso di necessità. Le API permettono di aprire/chiudere istanze; la logica di funzionamento dell'applicazione quando si usano più istanze e il software in grado di comandare l'apertura/chiusura di istanze è compito del PaaS e/o del SaaS. IaaS: Infrastructure as a Service
PaaS: Platform as a Service. La piattaforma di pacchetti software che si integrano con l'hardware (IaaS) su cui realizzare un servizio SaaS. E' sostanzialmente il livello intermedio tra IaaS e SaaS e comprende il web server/load balancer, i linguaggi/framework per lo sviluppo del servizio SaaS, il datastore (database/filesystem), sistemi di cache, sistemi di gestione delle code. Il PaaS si integra con il IaaS sottostante per far scalare automaticamente il sistema in caso di necessità. PaaS: Platform as a Service
SaaS (Software as a Service): è il livello più elevato della catena. Il SaaS è il servizio (al 99% una web application) che utilizza l'utente finale e che si integra con il PaaS sottostante. Sono SaaS, ad esempio: - I social network (Twitter, Facebook, Linkedin...) - I servizi di prenotazione online (Expedia, Trivago...) - I servizi pagamento (Google Checkout, Paypal...) - ...... SaaS: Software as a Service
L'infrastruttura virtualizzata è sostanzialmente un Hypervisor (VMWare, Xen, KVM...) su cui creare Virtual Machine. Il cloud è una infrastruttura virtualizzata con molto altro: l'Hypervisor è un componente a cui si associano uno o più sistemi di storage e un “controller” che espone delle API per la gestione del cloud stesso. Differenza tra struttura virtualizzata e Cloud Computing
La differenza è molto sottile e difficilimente percettibile. Nel grid computing abbiamo X server (con X un numero di server prefissato) che lavorano parallelamente per eseguire un applicativo. I server sono per lo più server fisici in quanto il processo deve poter sfruttare appieno le potenzialità dell'hardware. Il cloud computing è un grid computing in cui si ha un numero X di server virtualizzati che lavorano parallelamente per eseguire un applicativo. Il numero X di server viene gestito per lo più dinamicamente (dipende da come sono realizzati PaaS/SaaS) in base al carico di lavoro effettivo dell'applicativo, istanziando e disistanziando Virtual Machine attraverso le API del IaaS. Differenza tra Cloud Computing e Grid Computing
Differenza tra private e public cloud. L'hybrid cloud: un private cloud che “scala” su un public cloud Private Cloud vs Public Cloud
Come già detto: IaaS (Infrastructure as a Service): Servizio composto dalle mere risorse Hardware (CPU, RAM, spazio su disco, connettività). Business model “a consumo”: si fissa una quota massima di utilizzo ma si paga solo ciò che si consuma realmente. Ci sono delle API per connettersi al servizio e “scalare” in caso di necessità. Le API permettono di aprire/chiudere istanze; la logica di funzionamento dell'applicazione quando si usano più istanze e l'apertura/chiusura di istanze è demandata al PaaS e al SaaS. IaaS
IaaS: ridondanza e scalabilità dello storage
Storage locale: storage contenuto all'interno dell'Hypervisor e quindi non replicabile. Ha elevata velocità ma nessuna possibilità di essere scalato/ridondato. Viene normalmente usato in combinazione con dischi ad elevata velocità (SSD) ad esempio per la memoria Swap (memoria virtuale) delle VM. Storage Locale
Storage di rete SAN: sono dispositivi ad alta velocità che normalmente utilizzano protocolli di I/O standard (ATA/SCSI) incapsulati in una connessione Ethernet/Fibre Channel (iSCSI o AoE). La velocità è elevata, la scalabilità è ridotta (ogni SAN può gestire un numero massimo di X dischi e può essere “impilata” con un numero limitato di altre SAN) e il costo è elevato. Vengono utilizzate nelle situazioni in cui si ha la necessità di avere persistenza dei dati ed elevate prestazioni (ad es. Server SQL) ma il costo elevato ne limita l'utilizzo. La scalabilità/tolleranza ai guasti è gestita direttamente dalla SAN con protocolli Hardware (Raid 3/5/6/10...) ciascuno con maggiori caratteristiche di tolleranza/velocità/capienza SAN: Storage Area Network
Storage di rete cluster: in questo caso ci sono X “commodity computer” (server semplici dal costo ridotto) collegati tra loro che sommano la loro capacità di storage. Google utilizza delle “lame” con CPU celeron monoprocessore e 1 disco SATA per lo storage dell'intero motore di ricerca. Esistono numerosi filesystem cluster: GlusterFS, MooseFS, Ceph, Hadoop™ Distributed File System... Cluster Storage
La teoria di funzionamento: ogni file viene diviso in “chunk”, cioè piccoli file di dimensione prestabilita; ciascun chunk è replicato in più server (il numero di copie è settabile); più repliche ho, maggiore sarà la velocità di lettura (questi filesystem permettono di parallelizzare le letture), minore sarà lo storage a disposizione. La scalabilità è infinita (collaudati per gestire numerosi petabytes di dati), la tolleranza ai guasti è settabile dal numero di repliche, la velocità di lettura è elevata, quella di scrittura no; utilizzano quasi tutti il protocollo FUSE (filesystem in userspace). Vengono utilizzati per dati che cambiano con poca frequenza (ad es. i file statici dei siti web e i file immagine delle VM) Su storage cluster si basano semplici SaaS come iCloud e Dropbox. Cluster Storage
La teoria di funzionamento: ogni file viene diviso in “chunk”, cioè piccoli file di dimensione prestabilita; ciascun chunk è replicato in più server (il numero di copie è settabile); più repliche ho, maggiore sarà la velocità di lettura (questi filesystem permettono di parallelizzare le letture), minore sarà lo storage a disposizione. La scalabilità è infinita (collaudati per gestire numerosi petabytes di dati), la tolleranza ai guasti è settabile dal numero di repliche, la velocità di lettura è elevata, quella di scrittura no; utilizzano quasi tutti il protocollo FUSE (filesystem in userspace). Vengono utilizzati per dati che cambiano con poca frequenza (ad es. i file statici dei siti web e i file immagine delle VM) Su storage cluster si basano semplici SaaS come iCloud e Dropbox. Cluster Storage
La scalabilità e ridondanza degli HV non è data dall'HV ma dal Cloud Controller che si occupa di gestire le risorse messe a disposizione dagli HV e gestire eventuali guasti di HyperVisor non funzionanti migrando le VM su altri server (oltre a gestire lo storage). La scalabilità degli HV è intrinseca perchè basta aggiungere nuovi server in caso di necessità. IaaS: ridondanza e scalabilità degli Hypervisor
La scalabilità e ridondanza degli HV non è data dall'HV ma dal Cloud Controller che si occupa di gestire le risorse messe a disposizione dagli HV e gestire eventuali guasti di HyperVisor non funzionanti migrando le VM su altri server (oltre a gestire lo storage). La scalabilità degli HV è intrinseca perchè basta aggiungere nuovi server in caso di necessità. IaaS: ridondanza e scalabilità degli Hypervisor
La scalabilità e ridondanza degli HV non è data dall'HV ma dal Cloud Controller che si occupa di gestire le risorse messe a disposizione dagli HV e gestire eventuali guasti di HyperVisor non funzionanti migrando le VM su altri server (oltre a gestire lo storage). La scalabilità degli HV è intrinseca perchè basta aggiungere nuovi server in caso di necessità. IaaS: ridondanza e scalabilità degli Hypervisor
La scalabilità e ridondanza degli HV non è data dall'HV ma dal Cloud Controller che si occupa di gestire le risorse messe a disposizione dagli HV e gestire eventuali guasti di HyperVisor non funzionanti migrando le VM su altri server (oltre a gestire lo storage). La scalabilità degli HV è intrinseca perchè basta aggiungere nuovi server in caso di necessità. IaaS: ridondanza e scalabilità degli Hypervisor
Alcuni Cloud Controller OpenSource - Eucalyptus: progetto di NASA (ora abbandonato) diventato OpenSource e utilizzato nelle prime versioni di Ubuntu Cloud. E' limitato a 256 HyperVisor - OpenStack: progetto nato dalla Joint Venture di NASA (dopo aver abbandonato Eucalyptus) con RackSpace (il secondo fornitore di IaaS dopo Amazon) che ha deciso di rendere OpenSource il suo sistema. E' utilizzato nell'ultima versione di Ubuntu Cloud - OpenNebula: progetto alternativo del CERN di Ginevra, concettualmente molto semplice ed efficace, ma allo stesso tempo molto potente grazie alle numerose API che permettono di comandarlo in ogni sua parte. Quale Cloud Controller?
Solo Amazon? No: tutti i maggiori cloud provider sono interfacciabili attraverso queste API, è lo standard “de facto”. I Cloud Controller OpenSource citati sono compatibili con queste API. Realizzando un sistema PaaS/SaaS che sfrutta queste API è possibile partire con una Web Application su un Public Cloud e migrarla progressivamente verso Hybrid/Private cloud quando risulterà conveniente. Funzianamento delle API: - Direttamente tramite chiamate GET al web server - Direttamente tramite chiamate SOAP al web server In entrambi i casi si ottengono risposte in XML dal web server Utilizzo di librerie specifiche per i linguaggi: Java Python Ruby PHP .net Le API di Amazon
E' evidente che il servizio IaaS di Amazon “sconfina” in alcuni casi con un servizio PaaS (ad esempio le API per il MapReduce) Qualsiasi aspetto del cloud di Amazon è comandabile tramite API I cloud “compatibili” non incorporano tutte le funzionalità del cloud di Amazon, ergo non tutte le API sono utilizzabili ovunque E' evidente che le possibilità offerte da un cloud sono superiori rispetto ad un semplice sistema di virtualizzazione Le API di Amazon
E' evidente che il servizio IaaS di Amazon “sconfina” in alcuni casi con un servizio PaaS (ad esempio le API per il MapReduce) Qualsiasi aspetto del cloud di Amazon è comandabile tramite API I cloud “compatibili” non incorporano tutte le funzionalità del cloud di Amazon, ergo non tutte le API sono utilizzabili ovunque E' evidente che le possibilità offerte da un cloud sono superiori rispetto ad un semplice sistema di virtualizzazione Le API di Amazon
Come già detto: PaaS: Platform as a Service. La piattaforma di pacchetti software che si integrano con l'hardware (IaaS) su cui realizzare un servizio SaaS. E' sostanzialmnente il livello intermedio tra IaaS e PaaS e comprende il web server/load balancer, i linguaggi/framework per lo sviluppo del servizio SaaS, il datastore (database/filesystem), i sistemi di cache, i sistemi di gestione delle code. Il PaaS si integra con il IaaS sottostante per far scalare automaticamente il sistema in caso di necessità. PaaS: Platform as a Service
Il web server/load balancer I servizi PaaS nella maggior parte dei casi servono per ospitare delle Web Application. Poco importa se l'accesso alla web application avviene tramite un comune Browser (Firefox, Internet Explorer, Chrome, Opera...) o tramite un software proprietario che si interfaccia all'applicazione tramite API. Il componente essenziale per una qualsiasi Web Application è la presenza nel PaaS di un web server. Il load balancer normalmente si occupa solo di “girare” le chiamate verso gli application server che contengono il web server. In alcuni casi il load balancer può essere esso stesso un web server ed essere configurato per servire contenuti statici Il web server/load balancer
L'application server Per application server si intende il server che esegue il lavoro computazionale. Ad esempio è il server che esegue il codice PHP/Ruby/Python... della nostra web application. L'application server è il componente più soggetto a stress, pertanto quello che “scalerà” più frequentemente. Le chiamate all'application server, normalmente vengono “proxate” dal web server/load balancer soprastante. L'application server
Il data storage E' il posto dove risiedono tutti i dati della web application che deve essere accessibile da tutti i server. E' possibile avere una o più istanze di VM all'interno del proprio cloud che fungono da datastore, oppure usare un servizio del Cloud Provider (ad es. Amazon EBS), oppure usare server fisici in cluster. Nei casi più semplici è un filesystem di rete condiviso (ad es. un server NFS). Nei casi più complessi o dove si hanno necessità di gestire grandi quantità di dati (ad es. Google) si tratta di cluster di storage server dedicati. Le ultime tendenze portano ad usare i database documentali, i cosidetti “NoSQL” per trattare tutti i dati della web application. Il data storage
Altri componenti importanti: Un gestore di cache condivisa (ad ed. Memcached) Un gestore di code su protocollo XMPP (si, lo stesso della chat) Un gestore dei processi con MapReduce per far scalare la nostra applicazione all'occorrenza (es. Apache Hadoop MapReduce) Altri componenti
E il database relazionale dov'è? 1) si creano delle istanze di VM con il database (ad es. Più server MySQL in replica): sistema non scalabile automaticamente, attenzione alla velocità dello storage del servizio IaaS 2) si acquistano servizi di database relazionale dal fornitore (ad es. Amazon RDBS) Ma serve realmente? I database documentali offrono la possibilità di eseguire query non relazionali (no Union e Join) a velocità superiore rispetto ad un comune database relazionale in quanto normalmente il database viene mantenuto integralmente in copia sulla RAM. Si dovranno delegare le istruzioni di relazione al codice dell'applicazione e quindi il carico di lavoro si sposta sugli Application Server che scalano più facilmente. E il database relazionale...
La scelta del PaaS corretto dipende dalle nostre esigenze nello sviluppo del SaaS.
Microsoft Azure: Linuguaggi supportati: .net (leader), PHP, Java, node.js Database Relazionale Azure SQL Storage a BLOB API per gestire la comunicazione tra i processi
Engine Yard (ospitato su Amazon EC2) Linuguaggi supportati: PHP (leader), Ruby, node.js Database Relazionali: MySQL, PostgreSQL Database Documentali: MongoDB, Redis Controllo della cache via memcached e Redis Controllo dei processi via delayed_job e resque
Heroku (ospitato su Amazon EC2) Linuguaggi supportati: Ruby (leader), Node.js, Clojure, Java, Python, e Scala (leader) Database Relazionali: PostgreSQL Gemma Ruby per il controllo totale della piattaforma
Google App Engine Linuguaggi supportati: Java, Python (leader) e Go! Database Relazionali: MySQL Database Documentali: Google Datastore API dedicate per la gestione dei processi
Appscale – Clone Opensource di Google App Engine Linuguaggi supportati: Java, Python (leader) e Go! Database Relazionali: MySQL Cluster Database Documentali: Cassandra, Hbase, Hypertable, MongoDB, MemcachedDB (come memcached ma con persistenza dati), Voldemort, Redis API dedicate per la gestione dei processi API “mirror” per l'interfacciamento alle API di Amazon E' installabile direttamente su Amazon EC2 o su qualsiasi Private Cloud compatibile (immagine per Eucalyptus scaricabile direttamente)