ArcheoFoss2012_architetture_scalabili

ArcheoFoss2012_architetture_scalabili

Con l’incremento esplosivo della quantità di informazioni nel mondo, la capacità di analizzarle in maniera relativamente semplice e veloce sta diventando un elemento fondamentale. Informazioni in enormi quantità, delle più svariate tipologie e formati: sono queste le caratteristiche dei cosiddetti Big Data, un binomio che è recentemente entrato nell’uso comune, sebbene le sue prime introduzioni risalgano addirittura all’inizio del nuovo millennio. Quando i computer hanno iniziato a diffondersi come strumenti di business, oltre che di ricerca e di analisi, la prima sfida è stata quella di riuscire ad archiviare e gestire le informazioni aziendali e legate ai vari ambiti di ricerca. Le limitazioni tecnologiche del tempo hanno portato alla creazione dei database così come li conosciamo, e il passo successivo è stato quello di iniziare a utilizzare concretamente questi dati. Poiché i database sono composti da righe e colonne, i computer erano assolutamente in grado di gestirli senza particolari requisiti prestazionali. Le informazioni costituiscono una vera e propria ricchezza per le aziende, e la possibilità di organizzarle all’interno dei database ha permesso di sfruttarne le potenzialità lasciando ai computer il compito di eseguire attività essenziali di analisi e automazione. Oggi la nuova sfida riguarda invece i volumi di dati – la pura quantità (e velocità di crescita) delle informazioni che vengono prodotte quotidianamente e che risultano problematiche da gestire anche per il database più potente al mondo. Dal momento che la produzione dell’informazione avviene tramite mezzi che sono i più variegati (dagli smartphone, ai social network, fino a tutto ciò che può rientrare nell’Internet delle cose), altrettanto variegato è il tipo di informazione che viene prodotta. Siamo lontani dall’informazione fatta solo di parole e numeri, in quest’epoca dove anche immagini e video sono sempre più importanti, nella nostra vita. Tutto è informazione, tutto è correlabile e sempre meno è trascurabile, anche in archeologia. Quindi, la gestione dei Big Data, in passato, è stata un semplice problema tecnologico. Oggi, non è più cosi: esistono framework scalabili come Hadoop che nascono proprio per la gestione di grosse moli di dati e, addirittura, database “ad hoc” (che rientrano sotto il cappello di NoSQL e di NewSQL) che nascono con l’obiettivo di superare i limiti strutturali e intrinseci dei database tradizionali (i database relazionali o RDBMS). Settori quali il data warehousing e la business intelligence stanno convergendo sempre più verso nuove metodologie di analisi dei dati (in quantità sempre crescenti) che prendono il nome di Big Data analytics. Esattamente come per il data warehousing e la business intelligence, questa tecnica permette di gestire grandi quantità di dati e di estrarre informazioni preziose per il business o per la ricerca quali, ad esempio, le tendenze tra i consumatori o correlazini di dati che potevano sembrare slegati. Ovviamente, le organizzazioni più grandi (sicuramente quelle tecnologiche quali Google, Yahoo e Microsoft ma anche altri grossi nomi nel settore automotive, farmaceutico e statistico) sono le principali che hanno dimostrato interesse in questo settore ma anche aziende più piccole e enti di ricerca, che si trovino a gestire qualche terabyte di dati potranno trarre grossi vantaggi da tecniche di analisi evolute, adatte ad ambienti eterogenei. Secondo alcune stime, i dati contenuti nei grandi data warehouse cresceranno tra il 10 e il 20 per cento nel prossimo anno, complicando e rendendo sempre meno efficiente e rapida l’analisi dei dati tramite questi tool. La necessità di tecniche di analisi di Big Data attraversa tutti i segmenti industriali: classiche analisi e segmentazione della clientela, gestione delle reti di trasporto e di distribuzione dell’energia, iniziative antiterrorismo e molto altro ancora. Ovviamente, però, nel caso in cui i dati rientrino nella categoria dei Big Data, non è immediato fare il passaggio dalle metodologie tradizionali di analisi alla Big Data analytics: si parla, infatti, di un cambio radicale di paradigma legato alle modalità di analisi e, di conseguenza, le skill richieste al personale IT dedicato a questa funzionalità sono totalmente diverse da quelle che sono spesso possedute da chi si occupa di analisi in ambito tradizionale I tool stessi, sia per la memorizzazione dei dati, sia per l’analisi, sono diversi: raramente si parla di database relazionali (principalmente per via dei loro limiti di scalabilità) ma, sempre più frequentemente, si parla di structured storage, file system distribuiti e DBMS di tipo NoSQL e NewSQL. Questi fattori, però, non devono essere visti come problematiche o barriere all’ingresso ma come opportunità: riqualificando il proprio personale IT (creando anche nuove figure professionali) e adottando queste tecniche e questi strumenti, ci si rende immediatamente conto dei notevoli vantaggi ottenibili con queste tecniche di analisi avanzata. I risultati così ottenuti permettono di avere dei vantaggi competitivi notevoli su chi adotta le tradizionali tecniche di analisi, più lente e macchinose e, potenzialmente, meno accurate, oltre a permettere l’ottenimento di risultati migliori in meno tempo. I database relazionali (RDBMS), come abbiamo già detto, non rendono semplice e immediata la gestione di grosse moli di dati, specie se devono essere distribuiti su cluster composti da diversi nodi di calcolo. Basti pensare ai principali social network quali Facebook, Digg o Twitter e agli enormi sforzi che, in passato, hanno dovuto compiere per gestire tutti gli iscritti e i dati da loro prodotti. Questi sforzi crescono in base alla quantità di informazioni da memorizzare e sono incentrati sulla gestione di basi dati replicate e distribuite, alle quali vengono richieste caratteristiche di sicurezza, affidabilità, tolleranza ai guasti e performance. Scalare orizzontalmente (cioè incrementare il numero di macchine per incrementare la potenza a disposizione, sia essa di calcolo, sia di memorizzazione all’interno della base dati), in queste situazioni, è sempre stato un problema per i database relazionali in quanto richiedono l’utilizzo di tecniche ad-hoc (sharding, replicazione…) spesso complicate e/o costose, sia in termini prestazionali, sia in termini economici. Proprio per risolvere questo problema, Facebook ha deciso di sviluppare internamente un proprio database che permettesse di scalare senza problemi, mantenendo alcune delle caratteristiche tipiche dei RDBMS. Questo software, dopo poco tempo, è stato reso open source ed è tutt’ora conosciuto con il nome di Cassandra. In seguito a questo episodio, molti altri social network hanno deciso di migrare verso Cassandra per la gestione dei loro dati, sebbene esso non sia il solo database “specializzato”, nato per uno scopo ben preciso. Infatti, sono stati sviluppati molti prodotti, ognuno con caratteristiche differenti: alcuni di questi database sono ottimizzati per escludere i single point of failure tramite svariate tecniche di replica dei dati (fra rack differenti, fra data center differenti…), altri puntano ad ottenere prestazioni elevate nonostante la struttura distribuita (magari, basandosi su strutture dati allocate interamente in memoria), altri ancora puntano alla semplicità di utilizzo e di gestione. Oltre ai social network citati in precedenza, moltissime altre aziende hanno avuto necessità analoghe e hanno fatto ricorso a prodotti specializzati, spesso abbandonando gli RDBMS general purpose che adottavano in ambienti di produzione da anni; alcuni esempi possono essere Sourceforge che ha scelto MongoDB, Yahoo che ha sviluppato PNUTS o LinkedIn con l’adozione di Voldemort. Fattore che accomuna questa moltitudine di database, evidenziato anche dall’appartenenza ad una famiglia chiamata NOSQL (o, come più correttamente si dovrebbe definirla, “Structured storage”), è proprio il fatto che non sfruttano il classico linguaggio di interrogazione SQL e che utilizzano una rappresentazione dei dati spesso slegata dal consueto concetto di tabella. Il movimento NOSQL, al contrario di quello che il nome sembrerebbe indicare, non nasce in opposizione alla “tradizione” dettata dal linguaggio SQL ma come valida alternativa per la risoluzione di problematiche differenti, proprio legate alla continua crescita dei dati e alla loro eterogeneità, tipica dei Big Data. Infatti, NOSQL è acronimo di Not Only SQL ed è un movimento che sostiene l’utilizzo dei database di questo tipo laddove i tradizionali RDBMS risultino carenti o troppo complessi/costosi, seguendo la filosofia “the right tool for the right job”. I campi di applicazione ideali per le basi dati NOSQL sono, come già detto in precedenza, quelli dove è necessario gestire ambienti distribuiti e replicati, specie se si è disposti a “sacrificare” alcune delle caratteristiche tipiche dei RDBMS (ACID – Atomicity, Consistency, Isolation, Durability) verso un insieme di caratteristiche differenti (BASE – Basically Available, Soft state, Eventually consistent) permettendo, a discapito di una diversa gestione della consistenza dei dati e della loro disponibilità, un notevole incremento della scalabilità (come esplicitato anche dal teorema CAP, per il quale non si può avere Consistency, Availability e Partition tolerance al tempo stesso). Inoltre, uno degli obiettivi dei sistemi informativi distribuiti odierni è di poter garantire una disponibilità elevata, persino quando alcuni nodi non sono raggiungibili a causa di guasti improvvisi; è importante, quindi, che il servizio possa continuare a funzionare anche in presenza di una failure che determini un partizionamento della rete e che ogni richiesta ricevuta sia comunque esaudita, anche se il sistema presenta al suo interno dei nodi non operativi. Le basi di dati NOSQL, fra le altre cose, cercano di risolvere (almeno in parte) la suddetta problematica. Inoltre, il fatto che molte di esse siano open source, permette di avere un’elevata adattabilità alle problematiche specifiche che si vogliono risolvere, oltre ad un costo nettamente inferiore rispetto all’utilizzo di soluzioni ad-hoc abbinate ai tradizionali RDBMS (sia per prodotti proprietari, sia per prodotti free), alla possibilità di conservare nel tempo i propri dati e di utilizzare “commodity hardware” come nodi della propria infrastruttura di memorizzazione. A tutto questo si aggiunge una fervente community di sviluppatori che offrono costantemente nuove caratteristiche e contribuiscono al supporto dei vari prodotti. Questi database sembrano sposarsi perfettamente con la crescente metodologia di computazione cloud-based, che richiede l’utilizzo di ambienti fortemente distribuiti, scalabili e dinamici, all’interno dei quali il numero di macchine (virtuali o meno) è in continua variazione. Inoltre, molti di questi prodotti sono in grado di gestire più o meno facilmente i Big Data e permettono l’integrazione con tool di Data Analytics. Oltre alla categoria dei database NOSQL esiste anche la famiglia di DBMS nota con il nome di NewSQL. Questi database cercano di prendere i pregi del mondo del NOSQL e di unirli con i pregi del mondo dei RDBMS. Normalmente, quello che fanno è nascere per funzionare in ambienti distribuiti e supportare la gestione di grosse moli di dati, pur mantenendo gli standard dominanti nel mondo dei RDBMS, cioè l’ACIDità delle transazioni e la possibilità di utilizzare il linguaggio SQL. Il cuore dell’infrastruttura da noi assemblata è dato da Hadoop. Quest’ultimo è un framework che supporta applicazioni distribuite con elevato accesso ai dati, fino a permettere alle applicazioni di lavorare con migliaia di nodi e petabyte di dati. Hadoop, ispirandosi alla tecnologia Map/Reduce di Google e al Google File System, è un progetto top-level di Apache, costruito e usato da una comunità globale di contributori, che usano il linguaggio di programmazione Java. Hadoop è usato anche da alcune grosse società come AOL, Ebay, Facebook, IBM, Imageshack, Joost, Linkedin, The New York Times, Twitter e Yahoo; quest’ultimo è il più grande contribuente al progetto, oltre a farne un uso massiccio. Intorno a questo cuore ruotano tutta una serie di altri strumenti come Fuse, Apache web server (con il modulo WebDav), Hbase, HAproxy, Keepalived e R. Fuse, acronimo di File system in USErspace, è un progetto open source, rilasciato sotto la licenza GPL e LGPL, volto alla realizzazione di un modulo per il kernel Linux che permetta agli utenti non privilegiati di un sistema di creare un proprio file system senza la necessità di scrivere codice a livello kernel. Fuse è divenuto ufficialmente parte del codice del kernel Linux a partire dalla release 2.6.14 ed è particolarmente utile per scrivere file system virtuali. A differenza dei file system tradizionali, che si preoccupano principalmente di organizzare e memorizzare i dati su disco, i file system virtuali non memorizzano realmente i dati per conto proprio; agiscono infatti come un tramite fra l’utente ed il filesystem reale sottostante. Fuse è un sistema molto potente: virtualmente ogni risorsa disponibile ad essere implementata sfruttando Fuse può divenire un file system virtuale. Apache HTTP Server, o più comunemente Apache, è il nome dato alla piattaforma server web modulare più diffusa (ma anche al gruppo di lavoro open source che ha creato, sviluppato e aggiornato il software server), in grado di operare da sistemi operativi UNIX/Linux e Microsoft. Apache è un software open source che realizza le funzioni di trasporto delle informazioni, di internetwork e di collegamento ed ha il vantaggio di offrire anche funzioni di controllo per la sicurezza come quelli che compie il proxy. Questo applicativo, grazie all’installazione di un piccolo modulo, supporta anche il protocollo WebDav (Web-based Distributed Authoring and Versioning). WebDav si riferisce a un set di istruzioni del protocollo HTTP, che permettono all’utente di gestire in modo collaborativo dei file in un server remoto. Questo protocollo ha lo scopo di rendere il World Wide Web un mezzo di lettura e scrittura, seguendo le linee guida dell’idea originale di Tim Berners-Lee. Offre delle funzionalità che permettono la creazione, la modifica lo spostamento di documenti situati in un server remoto. Molti sistemi operativi moderni hanno un supporto integrato per il protocollo WebDav ma, con il giusto client ed una rete veloce, la gestione dei file su server WebDAV è facile quasi quanto una gestione dei file in locale, anche da smartphone e PDA. HBase è una base di dati NOSQL distribuita open source modellata sull’idea di BigTable di Google e scritta in Java. Per usare Hbase è necessario adottare un cluster Hadoop sul quale sia configurato HDFS (Hadoop Distributed File System) come sistema di storage. HAProxy è una soluzione gratuita e open source per ottenere l’alta affidabilità e il load balancing di un servizio basato su protocollo TCP (come accade per il protocollo HTTP) e replicato su più macchine. E’ particolarmente adatto per i server web che devono gestire migliaia di connessioni e, come tale, calza a pennello con la nostra architettura. Keepalived è un altro software open source che ci permette di costruire un’architettura active-passive dove al fallimento di una macchina, un’altra ne prende immediatamente le veci, in modo da non interrompere mai il servizio e offrire continuità operativa. R è un ambiente di sviluppo specifico per l’analisi statistica dei dati; è un software libero, distribuito con la licenza GNU GPL, ed è disponibile per diversi sistemi operativi. Questo linguaggio offre molte funzionalità per l’analisi dei dati, sia in campo statistico che in moltissimi altri campi (anche grazie ad una notevole estendibilità basata su pacchetti aggiuntivi) quali da manipolazione dei dati e la loro rappresentazione grafica. Mettendo insieme tutti questi applicativi open source, si può ottenere un web-based file storage collaborativo che può essere raggiungibile da qualsiasi punto e con ogni dispositivo (PC, smartphone, tablet…); questo sistema integra già alcune metodologie adatte ad effettuare operazioni di Big Data Analytics ma si presta in maniera molto semplice ad interagire con sistemi di analisi avanzata già esistenti (es.: Solr) o creati ad hoc (grazie alla semplice integrazione di Hadoop con molti linguaggi di programmazione, Java in primis). Un dimostrativo dell’architettura è stato ricreato su di un server HP ProLiant DL360 G5 con due processori Intel Xeon E5430 da 2.66Ghz, 18 Gb RAM e due hard disk SAS da 146 Gb in configurazione RAID 1 (mirroring). Su questa macchina è stato installato Ubuntu server 10.4.3 LTS abilitando la virtualizzazione con KVM e i vari software descritti in precedenza sono stati installati e configurati sopra a queste virtual machine, al fine di offrirci un’idea di massima delle caratteristiche della nostra architettura. La maggior attenzione è stata prestata alle caratteristiche di fault tolerance e di scalabilità a caldo, oltre alla capacità di memorizzare ed analizzare dati eterogenei provenienti da diversi device, permettendo di ottenere un sistema resistente e affidabile al tempo stesso. Per la limitatezza dell’hardware e la gestione dell’intera infrastruttura in virtuale, non ci è stato possibile addentrarci in analisi particolarmente interessanti (es.: moli di dati veramente enormi) ma i primi test ci hanno offerto risultati piuttosto interessanti. E’ inoltre da segnalare che l’architettura in questione funziona perfettamente su commodity hardware e non ha dei requisiti tecnici particolari.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.