E’ difficile imbattersi in qualcuno che non abbia mai sentito nominare il brand Amazon o che non abbia avuto a che fare con l’azienda statunitense di Seattle: il classico utente che naviga per la Rete avrà probabilmente acquistato qualcosa dall’omonimo sito e-commerce mentre un’impresa, un professionista, programmatore etc. potrebbero essersi affidati più di una volta ad uno degli innumervoli servizi IaaS messi a disposizione dalla piattaforma cloud AWS (Amazon Web Services), attualmente leader indiscussa del mercato con rendite annuali record (nel 2016 è stato superato il tetto dei 10 miliardi di dollari).
Lanciati nel luglio 2002, gli Amazon Web Services forniscono servizi online per altri siti web o applicazioni client-side. Le offerte AWS sono accedute tramite HTTP, usando i protocolli REST e SOAP. Tutti i servizi vengono tariffati al consumo, mentre la misura dell’utilizzo varia in base alla loro tipologia. Molti di questi non sono esposti direttamente agli end user ma offrono invece funzionalità che altri sviluppatori possono usare.
Seguendo questa strategia di costante ingresso in nuovi business, basata sulle competenze interne, nel 2006 (l’anno appena trascorso ha visto quindi il raggiungimento dei 10 anni di attività) Amazon decide di muovere i suoi passi in esplorazione del nuovo mercato del cloud computing, con il lancio del servizio di storage online chiamato S3. Sempre nel 2006 Amazon lancia EC2 (“Elastic Compute Cloud”), una site farm virtuale dove gli utenti possono usare l’infrastruttura di Amazon, ad alta stabilità, per l’esecuzione delle proprie applicazioni.
Il “pioniere” Amazon sembra aver scoperto una “nuova frontiera” e l’attenzione del settore ICT e dei vertici aziendali per quest’ultima cresce esponenzialmente negli anni successivi: nel giugno 2007 AWS afferma che più di 330 mila sviluppatori hanno creato un account per usare io servizi AWS. Dodici mesi dopo il portfolio si espande con Elastic Block Store (EBS), offrendo una capacità di memorizzazione persistente per Amazon EC2 ed istanze di Elastic IP addresses, indirizzi IP statici progettati ad-hoc per le caratteristiche dinamiche del cloud computing. Sempre nel 2008 viene presentato anche EC2 Windows Client, una
versione di EC2 in grado di eseguire Microsoft Windows Server e Microsoft SQL Server. Terminata la fase esplorativa e di valutazione del giovane segmento di mercato, Amazon dichiara ai propri investitori che entro il 2012 il “cloud computing” diverrà il “core business” della compagnia.
Nei paragrafi successivi parleremo in maniera più approfondita di alcuni dei principali servizi AWS iniziando da S3.
Amazon Simple Storage Service (S3)
Nel marzo 2006 Amazon ha lanciato S3, servizio che grazie alla sua alta stabilità ed ai suoi bassi prezzi ha attenuto rapidamente un grande successo. I casi di utilizzo tipici di S3 sono il web hosting, image hosting, e sistemi di backup – diversi siti si appoggiano ad Amazon S3, divenuto ormai uno standard, come ad esempio Twitter.
Il suo modello tariffario è completamente “pay-as-you-go”, senza costi aggiuntivi: lo strumento AWS Simple Monthly Calculator, in base alle statistiche di utilizzo, è inoltre in grado di stimare il corrispettivo mensile da pagare al provider. Le tariffe sono suddivise in tre tipologie: tariffe di storage, tariffe di trasferimento dati e tariffe sul numero di richieste, che sommate insieme costituiscono la spesa totale del servizio. Inoltre i prezzi variano in base alla zona geografica di afferenza. Amazon possiede infatti di una estesa infrastruttura a livello globale che è possibile visionare nella seguente immagine:
Lo storage può essere acceduto da qualsiasi posizione abilitata a Internet e attraverso delle opportune API, sulla base di un approccio Restful o SOAP. Amazon S3 consente di memorizzare generici oggetti in numero potenzialmente illimitato, la cui dimensione unitaria può variare da 1 byte a 5 terabyte. Ad ogni oggetto è inoltre obbligatoriamente associata una chiave univoca per la sua identificazione, e opzionalmente una versione. Gli oggetti sono a loro volta organizzati in buckets. Tali entità presentano sia similitudini che differenze rispetto alle tradizionali directory, in quanto consentono di memorizzare i dati al loro interno, ma al contempo impediscono la realizzazione di un’organizzazione gerarchica.
Pertanto, lo spazio dei nomi complessivo è costituito da due soli livelli: gli oggetti e i relativi buckets di appartenenza. Un aspetto interessante consiste nella condivisione dello spazio dei nomi dei buckets tra tutti gli utenti. L’assegnazione di un nome con validità globale richiede particolare attenzione, in quanto deve necessariamente diversificarsi dai nomi degli altri buckets presenti. In definitiva, ogni oggetto è completamente individuato dalla coppia bucket-chiave univoca e opzionalmente da una versione. E’ importante sottolineare che Amazon S3 non è un file-system remoto. Nonostante le apparenti analogie tra buckets e directory e tra file e oggetto esistono infatti differenze sostanziali:
- gli oggetti hanno una dimensione massima di 5 Terabyte;
- buckets non possono essere organizzati gerarchicamente e hanno validità globale;
- in mancanza di appositi strumenti di terze parti, risulta impossibile eseguire il “mount” dello storage S3 come avviene tradizionalmente per i filesystem, in quanto la sua natura di web service è profondamente differente.
L’infrastruttura fisica è suddivisa in diverse regioni isolate, similmente a quanto accade per il servizio Amazon EC2, del quale parleremo successivamente. L’utente può quindi specificare in quale regione intende memorizzare i propri oggetti, ma soltanto in seguito alla creazione di un account Amazon Web Services. Le SLA di Amazon, per quanto concerne il servizio S3, assicurano una disponibilità del 99.99% e una robustezza agli errori del 99.999999999% per gli oggetti nel corso di un anno.
Amazon Elastic Compute Cloud (EC2)
Amazon EC2 offre server virtuali online a noleggio all’interno di una infrastruttura di cloud computing. EC2 è l’offerta core di Amazon nello spazio IaaS e attualmente è gestibile tramite una completa interfaccia grafica online, accessibile direttamente dal proprio browser. Il servizio è dimensionabile, nel senso che potrete aumentare o diminuire capacità di calcolo in base alla necessità del momento. In AWS sono possibili entrambi gli approcci REST o SOAP attraverso l’utilizzo delle opportune API e di HTTP come protocollo di trasporto. La creazione delle macchine virtuali da parte dell’infrastruttura fisica di supporto si realizza attraverso l’uso della Paravirtualization e di un Hypervisor Xen.
Le macchine virtuali vengono istanziate a partire da una immagine di file-system denominata Amazon Machine Image (AMI), contenente un sistema operativo ed eventuali applicazioni aggiuntive. Ogni immagine può essere utilizzata per lanciare un numero arbitrario di istanze. Il concetto può essere chiarito attraverso un’ analogia con il paradigma Object Oriented: l’AMI rappresenta una classe mentre l’istanza rappresenta un oggetto di tale classe.
Le istanze per i nuovi utenti utilizzano un’immagine predefinita in riferimento ad un particolare sistema operativo, in cui sono preinstallate le applicazioni standard. L’utente ha poi la possibilità di configurare la macchina virtuale secondo le proprie esigenze, creando eventualmente una nuova immagine (AMI). L’attribuzione delle istanze è accompagnata dall’assegnazione dinamica di un indirizzo IP, denominato da Amazon elastic IP address, il quale può essere eventualmente riassegnato ad un altro utente al termine dell’istanza stessa. Nonostante le modalità di fruizione, si consideri che in realtà l’indirizzo IP è statico, in quanto legato in modo permanente all’istanza. Secondo tale prospettiva il nome attribuito da Amazon può risultare fuorviante.
Amazon offre un elevato numero di server virtuali dei quali riportiamo alcuni esempi nell’immagine seguente estrapolata sempre dal sito ufficiale (l’intera lista è caratterizzata da oltre 40 istanze):
Quando si sceglie un’istanza è possibile considerare l’opzione di istanza on-demand oppure un’opzione più personale in cui si sceglie un’istanza riservata, utile per chi prevede un utilizzo continuativo di server per tutto l’anno. Per visualizzare le attuali fasce tariffarie in base al tasso di utilizzo ed al tipo di istanza scelta esiste un tool di calcolo in cui inserire le varie specifiche per ottenere un consuntivo del prezzo di utilizzo, tramite AWS pricing.
Inoltre per aiutare i nuovi utenti di AWS a migliorare le loro conoscenze sull’utilizzo del cloud, AWS mette a disposizione opzioni di utilizzo gratuito del proprio servizio, entro alcuni limiti nelle specifiche scelte. I nuovi clienti AWS saranno in grado di eseguite un’istanza Micro di Amazon EC2 per un anno, usufruendo allo stesso tempo di un tier libero per Amazon S3, Amazon Elastic Block Store, Amazon Elastic Load Balancing, ed AWS data transfer. Tramite queste opzioni è possibile lanciare nuove applicazioni, testare applicazioni esistenti nel cloud, o semplicemente acquisire esperienza con AWS.
Amazon SimpleDB
SimpleDB è un database non relazionale ospitato su Amazon. Lanciato per la prima volta nel 2007, si integra al meglio con altri strumenti AWS. SimpleDB fornisce servizi web per eseguire query su dati strutturati in tempo reale. Database relazionali come Oracle e db2 sono eccessivamente costosi, SimpleDB invece offre una piattaforma alternativa di database, usa un linguaggio di query string-based e la sintassi è abbastanza lineare, ma diversa da SQL. SimpleDB non supporta alcune delle funzionalità SQL standard quali joins, full text search, o risultati di query di sorting. Il database è scalabile e accessibile attraverso i web services.
E’ possibile iniziare ad utilizzare SimpleDB senza affrontare alcun costo, gli utenti del database infatti possono utilizzarlo gratuitamente per le prime 25 ore di servizio, fino ad un GB di trasferimento dati e fino ad un 1 GB di storage consumato ogni mese. Per richieste superiori entra in vigore come al solito la tariffa al consumo. E’ possibile visionare una buona documentazione su SimpleDB dal Database Journal nella documentazione AWS.
DynamoDB
Invece di Hbase Amazon fornisce DynamoDB, il suo personale database NoSQL scalabile. Come managed solution questo rappresenta una scelta migliore rispetto all’esecuzione di un database su EC2, sia dal punto di vista economico che delle prestazioni. Tramite DynamoDB i dati possono essere importati ed esportati da S3, fornendo interoperabilità con Elastic Map Reduce.
Elastic Map Reduce (EMR)
EMR può essere programmato tramite le classiche vie di Hadoop, attraverso Pig, Hive o un altro linguaggio di programmazione, usufruendo del servizio di storage di Amazon S3 per prendere dati in input o mandarli in output.
L’accesso ad Elastic Map Reduce avviene attraverso Amazon SDK ed i suoi strumenti, o tramite GUI e prodotti IDE. Insieme a questi EMR rappresenta una forte opzione per lavoro sperimentale e analitico – il suo tariffario lo rende più appetibile rispetto a configurare istanze EC2 per eseguire Hadoop.
Quando si integra Hadoop con applicazioni che generano dati strutturati, l’utilizzo di S3 come principale sorgente di dati può essere troppo ingombrante, poiché similmente ad HDFS, anche S3 lavora ad un livello di archiviazione di blob di dati. La risposta di Hadoop a questo è HBase, un database NoSQL che si integra con il resto dello stack Hadoop.