tesi: progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione...

61
Universit ` a degli Studi di Trieste Dipartimento di Ingegneria e Architettura Corso di Laurea Magistrale in Ingegneria Informatica Tesi di Laurea in Programmazione Distribuita Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita Candidato: Relatore: Paolo Morandini Chiar.mo Prof. Alberto Bartoli Correlatore: Ph.D. Carlos Kavka Anno Accademico 2012-13 - Sessione straordinaria

Upload: paolo-morandini

Post on 05-Jul-2015

300 views

Category:

Technology


1 download

DESCRIPTION

Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita.

TRANSCRIPT

Page 1: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Universita degli Studi di Trieste

Dipartimento di Ingegneria e ArchitetturaCorso di Laurea Magistrale in Ingegneria Informatica

Tesi di Laurea in Programmazione Distribuita

Progetto e realizzazione di unsistema robusto di gestione deidati per ambienti di esecuzione

distribuita

Candidato: Relatore:

Paolo Morandini Chiar.mo Prof. Alberto Bartoli

Correlatore:

Ph.D. Carlos Kavka

Anno Accademico 2012-13 - Sessione straordinaria

Page 2: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

.

Alla mia famiglia, parenti e amici.Grazie.

Page 3: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Introduzione

Negli ambienti di esecuzione distribuita le elaborazioni avvengono su calcola-

tori distinti: queste sono orchestrate in modo statico o dinamico da un’unita

centrale. Tipicamente ognuna di queste elaborazioni richiede uno o piu file

in ingresso e produce uno o piu file in uscita, nasce cosı la necessita di tra-

sportare questi file ovunque essi siano richiesti come input.

Il prodotto di questa tesi e un software in grado di trasferire file di grandezza

arbitraria accessibili attraverso i piu comuni protocolli di trasferimento dei

file, esso utilizza persistenza e transazioni per poter offrire un certo grado di

robustezza in risposta ad eventi non catastrofici. Il prototipo realizzato e al-

tresı capace di individuare una strategia (qualora possibile) per trasferire un

file fra due dispositivi anche nel caso questi non possano stabilire connessioni

dirette fra loro.

Il motivo che ha portato allo sviluppo di un tale sistema e legato alla volonta

presso il gruppo di Ricerca e Sviluppo di ESTECO S.p.A. di sviluppare un

motore in grado di coordinare un’esecuzione distribuita. A fronte di tale

volonta si ritiene utile uno studio riguardo l’opportunita di sviluppare un

sistema ad-hoc, ed un’indagine sul potenziale impatto di alcune tecnologie

quali gli Enterprise Integration Patterns[1](d’ora in poi EIPs).

Il percorso che ha portato alla realizzazione del prototipo comprende lo studio

Page 4: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

II

delle tecnologie di messaggistica asincrona (nello specifico JMS), lo studio di

alcuni sistemi, protocolli e metodologie per il trasferimento dei file, la valuta-

zione di diversi framework (in particolare quelli riguardanti gli EIPs), lo stu-

dio dei concetti di transazionalita e persistenza e delle librerie che forniscono

tali funzionalita.

Vincoli

Il sistema richiesto e vincolato ad utilizzare il linguaggio di programmazione

Java[2] (versione 7 o superiore), deve inoltre operare indifferentemente su

Microsoft Windows, su GNU/Linux e su Mac OS X. L’interfacciamento deve

avvenire in maniera asincrona tramite messaggi JMS utilizzando il broker

Apache ActiveMQ[3].

Contenuto della tesi

Nel primo capitolo verranno fornite informazioni riguardo allo smistamento

dei dati (nella letteratura tecnica: “data placement”) e alla sua importanza

nell’esecuzione distribuita, inoltre verranno passate in rassegna alcune meto-

dologie e tecnologie di trasferimento, movimentazione e distribuzione dei dati

per ognuna delle quali si dara una breve descrizione occasionalmente accom-

pagnata da considerazioni sul loro funzionamento. Nel capitolo successivo

si dara spazio all’analisi che ha preceduto il lavoro di progettazione, verra

delineato lo scenario tipico in cui si vuole lavorare, si analizzeranno obiettivi

e vincoli tecnologici. Il capitolo sulla progettazione definira l’interfaccia del

sistema realizzato e la suddivisione in moduli che e stata eseguita, per ogni

modulo verra definita una interfaccia. In seguito si scendera nel dettaglio

dell’implementazione dimostrando il modo in cui sono stati costruiti i mo-

duli utilizzando principalmente una composizione di Enterprise Integration

Patterns. Si conclude con un capitolo che riporta alcuni test di robustezza

effettuati e i risultati di alcune valutazioni di prestazioni.

Page 5: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Indice

1 Distribuzione dei dati per l’esecuzione distribuita 1

2 Analisi 10

2.1 Ipotesi sullo scenario tipico . . . . . . . . . . . . . . . . . . . . 10

2.2 Obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3 Vincoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Progettazione 13

3.1 Interfaccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2 Macrofunzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2.1 Ricerca dei file . . . . . . . . . . . . . . . . . . . . . . 17

3.2.2 Pianificazione del trasferimento . . . . . . . . . . . . . 18

3.2.3 Esecuzione e verifica del trasferimento . . . . . . . . . 21

4 Implementazione 23

4.1 Ricerca dei file . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.1.1 Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.1.2 Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.2 Pianificazione del trasferimento . . . . . . . . . . . . . . . . . 28

4.2.1 Router . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.2.2 Chunker . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.2.3 Mapper . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.3 Esecuzione e verifica del trasferimento . . . . . . . . . . . . . . 31

Page 6: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

INDICE IV

4.3.1 Transfer Manager . . . . . . . . . . . . . . . . . . . . . 31

4.3.2 File Checker . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Verifica della robustezza e valutazione delle prestazioni 33

5.1 Ambiente di test . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.1.1 Configurazione dei nodi . . . . . . . . . . . . . . . . . 34

5.1.2 Configurazione di ActiveMQ . . . . . . . . . . . . . . . 35

5.1.3 Configurazione FTP e HTTP Server . . . . . . . . . . 36

5.2 Robustezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.2.1 Monitoraggio del sistema . . . . . . . . . . . . . . . . . 36

5.2.2 Interruzioni improvvise . . . . . . . . . . . . . . . . . . 38

5.2.3 Problemi di rete . . . . . . . . . . . . . . . . . . . . . . 40

5.3 Prestazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

5.3.1 Chunking e impatto dei relay . . . . . . . . . . . . . . 43

5.3.2 Thread e memoria occupata. . . . . . . . . . . . . . . . 44

6 Conclusioni 47

Page 7: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Elenco delle figure

1.1 Esempio di esecuzione distribuita . . . . . . . . . . . . . . . . 2

1.2 Esecuzione distribuita: un nodo genera dati che possono ser-

vire su altri nodi . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Stork: grafo rappresentante un trasferimento . . . . . . . . . . 5

1.4 BitTorrent: uso di nodi relay . . . . . . . . . . . . . . . . . . . 7

3.1 Interfaccia esterna del sistema . . . . . . . . . . . . . . . . . . 15

3.2 Moduli del sistema e loro comunicazione . . . . . . . . . . . . 17

3.3 Esempio di grafo della rete con Dijkstra . . . . . . . . . . . . . 19

3.4 Confronto trasferimento con e senza chunking . . . . . . . . . 20

4.1 Ricerca dei file . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2 Percorso messaggi nel Finder . . . . . . . . . . . . . . . . . . . 26

4.3 Percorso messaggi nel Catalog . . . . . . . . . . . . . . . . . . 27

4.4 Pianificazione del trasferimento . . . . . . . . . . . . . . . . . 28

4.5 Percorso messaggi nel Router . . . . . . . . . . . . . . . . . . 29

4.6 Percorso messaggi nel Chunker . . . . . . . . . . . . . . . . . . 30

4.7 Percorso messaggi nel Mapper . . . . . . . . . . . . . . . . . . 30

4.8 Transfer Manager . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.1 Process Mining: analisi del sistema . . . . . . . . . . . . . . . 38

5.2 Attivita sui vari nodi durante il crash test . . . . . . . . . . . 39

Page 8: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Attivita sui vari nodi durante il test di interruzione delle co-

municazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.4 Test modifica della topologia . . . . . . . . . . . . . . . . . . . 41

5.5 Comparazione velocita di trasferimento con e senza chunking . 43

5.6 Risorse impegnate dal sistema . . . . . . . . . . . . . . . . . . 45

5.7 Risorse impegnate durante uno stress test . . . . . . . . . . . 45

5.8 Esempio di mancato rilascio delle risorse. . . . . . . . . . . . . 46

Elenco delle tabelle

5.1 Velocita di trasferimento con e senza chunking . . . . . . . . . 44

Page 9: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 1

Distribuzione dei dati per

l’esecuzione distribuita

Quando l’esecuzione di un flusso di lavoro viene suddivisa e distribuita su piu

nodi e necessario distribuire, e successivamente raccogliere, i dati di ingresso e

uscita ad ogni elaborazione. I dati vengono prodotti su un dispositivo di me-

moria facente parte dell’ambiente distribuito non necessariamente accessibile

dagli altri nodi pertanto nasce la necessita di gestire tali dati.

Necessita degli ambienti di esecuzione distribuita

In un ambiente di esecuzione distribuita ogni nodo esegue un programma il

quale puo aver bisogno di determinati file di input ed eventualmente produce

uno o piu file di output. Una esecuzione puo essere composta da una molti-

tudine di elaborazioni eventualmente su diversi nodi, in tal modo l’output di

una di esse potrebbe essere l’input di una o piu altre esecuzioni, si veda ad

esempio la Figura 1.1. La pianificazione delle esecuzioni e dei trasferimenti

ha uguale importanza poiche nessuna elaborazione puo avvenire se mancano

i dati su cui deve operare.

Page 10: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 2

Node Node

Node

Node

Parameters

Mesh

Thermal Analysis

EMAnalysis

TurbulenceAnalysis

Figura 1.1: Esempio di esecuzione distribuita, a partire da alcuni pa-rametri un nodo crea un modello sul quale altri nodieseguiranno diverse tipologie di analisi e simulazioni.

Uno degli scenari possibili e quello in cui l’ambiente distribuito e composto

da un numero fissato di nodi tutti connessi fra di loro. In questi ambienti

l’esecuzione puo essere pianificata a priori conoscendo tutte le risorse dispo-

nibili cercando la loro allocazione piu efficiente.

Si noti che il tipo di connessione di cui parliamo non e da intendersi come

connessione fisica ma piuttosto come possibilita di utilizzare un protocollo

di trasferimento file fra due nodi, il termine “connessione” verra utilizzato

con questo significato ovunque non diversamente specificato, quando si fara

riferimento alla “topologia” della rete si intendera un grafo in cui i vertici

sono i nodi e gli archi sono connessioni di questo tipo.

Uno scenario diverso e quello di interesse per questa tesi: ad una rete parte-

cipano un numero incognito di nodi i quali, tramite un opportuno software,

sono in grado di riconoscere quali esecuzioni possono portare a termine in ba-

se alle risorse locali disponibili (file, programmi, etc..). Date queste premesse

e necessario che tutti i trasferimenti di dati vengano pianificati nel momento

in cui un nodo viene in possesso di una richiesta di elaborazione da portare

a termine.

In questa tesi non verra definito il modo in cui un nodo puo determinare quali

Page 11: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 3

richieste e in grado di soddisfare o come determina le dipendenze fra esse,

si affronteranno invece le problematiche relative alla localizzazione di dati

presenti nell’ambiente distribuito e al loro trasferimento sul nodo che ne ha

richiesto l’accesso. Si presuppone che i dati presenti nell’ambiente distribuito

siano contenuti (o possano essere inseriti) in dei file.

In un ambiente distribuito con dei nodi che competono per l’esecuzione di

un insieme di operazioni ad uno di essi ne viene assegnata una. Il nodo deve

recuperare tutti i dati necessari all’elaborazione descritta nella richiesta, esso

dispone di un identificatore univoco per ogni file di cui ha bisogno e tale

identificatore gli viene fornito assieme alla descrizione del lavoro che dovra

svolgere. I file cosı identificati risiedono in almeno un dispositivo di memoria

presente nell’ambiente distribuito oppure verranno prodotti e inseriti in uno

di questi, essi potrebbero essere replicati su piu di un nodo e il sistema che

coordina l’esecuzione (qualora esistesse) potrebbe o meno essere a conoscen-

za della loro posizione ed esistenza.

Node Node

NodeNodeParameters

I created Mesh

Thermal Analysis

You need Mesh

?

Figura 1.2: Il nodo in alto a sinistra in seguito ad una elaborazione haprodotto un file, il nodo in basso a destra ha bisogno di quelfile senza sapere chi l’ha generato o quando verra generato.

A tal proposito si veda la Figura 1.2, il nodo in alto a sinistra e incaricato

di eseguire una operazione e al termine di questa produce un file; in un mo-

mento diverso (non necessariamente successivo) un nodo vuole iniziare una

Page 12: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 4

esecuzione che necessita di operare sul file prodotto dal primo nodo: uno

scenario simile richiede un sistema in grado di localizzare tale file, stabilire

una strategia per il suo trasferimento ed effettuarlo in modo che il nodo possa

soddisfare tutti i requisiti necessari all’inizio dell’elaborazione.

Il modo in cui i vari nodi ricevono o prendono in carico una esecuzione, il

formato in cui ricevono la descrizione dell’elaborazione da eseguire, il modo

in cui sono descritti ed identificati i dati necessari in input e i dati che do-

vranno produrre in output non verranno definiti in quanto non sono oggetto

di questa tesi. Si suppone l’esistenza di un sistema in grado di orchestrare

l’esecuzione, di generare tutte le strutture dati necessarie e di comunicarle al

sistema che si vuole progettare.

Nel prosieguo del documento i termini “task”, “esecuzione” e “processo”

verranno sempre utilizzati per indicare l’operazione singola che un nodo ef-

fettua nell’ambiente distribuito. Sorgente e destinazione di un trasferimento

verranno chiamati anche “endpoint” mentre i nodi intermedi sui quali i dati

transitano temporaneamente verranno chiamati “relay”.

Alcuni sistemi di condivisione e trasferimento dei dati

Prima di progettare un sistema ex novo sono stati studiati alcuni sistemi

per la condivisione, distribuzione e trasferimento dei file. Alcuni di essi so-

no molto specifici mentre altri sono “general purpose”, per ognuno di essi

sono state vagliate le funzionalita che potrebbero essere utili nello scenario

descritto e soprattutto l’approccio architetturale al problema. I sistemi presi

in considerazione sono stati Stork[4], BitTorrent[5], Hadoop[6] e PhEDEx[7].

Page 13: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 5

Stork

Questo sistema opera nell’ipotesi di poter predeterminare l’assegnamento di

ogni task da eseguire ovvero di conoscere gia nel dettaglio l’intero ambiente

distribuito. Esso opera su un input che consiste in una rappresentazione del-

l’esecuzione distribuita tramite un grafo diretto aciclico (DAG), questo grafo

contiene tutte le informazioni sulle dipendenze fra le diverse esecuzioni.

Figura 1.3: Stork: DAG rappresentante un trasferimento tramite duenodi intermedi. k e il livello di concorrenza. Immaginetratta da [4]

Stork opera su questo grafo costruendo un secondo grafo (come ad esempio

quello in Figura 1.3) che rappresenta i trasferimenti fra i vari nodi. Questo

e un DAG ricavato da quello di input arricchito da nozioni sulla topologia

della rete (intesa non come rete fisica, ma ad un livello logico) e contenente

una descrizione completa e dettagliata delle operazioni da portare a termine.

Questa descrizione include anche tutti i trasferimenti intermedi quando fra

due nodi non si puo trasferire direttamente un file (ovvero non c’e connes-

sione). Il DAG ottenuto inoltre contiene indicazioni sullo spazio da riservare

sui dispositivi di memoria, sul momento in cui eliminare i file temporanei e

Page 14: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 6

tutti i dettagli inerenti a tali operazioni.

Stork non e stato studiato per esaminarne l’implementazione (anche se si

fosse voluto non sarebbe stato possibile poiche i sorgenti non sono pubblici)

ma per capire che tipo di architettura e organizzazione interna sono state

adottate, inoltre le pubblicazioni a riguardo riportano molte considerazioni

sul trasferimento dei file in ambienti distribuiti.

BitTorrent

Questo protocollo di scambio dei file opera con modalita peer-to-peer pur

mantenendo la necessita di uno (o piu) nodi centrali, questi nodi consentono

la localizzazione dei file e contengono informazioni necessarie a stabilire la

comunicazione fra i peer.

BitTorrent e nato per la distribuzione dei dati in un ambiente fortemente

dinamico. Esso ha lo scopo di raggiungere una elevata replicazione, tuttavia

e utilizzabile, in linea di principio, anche per trasferimenti singoli. Questo

protocollo non prevede una soluzione in grado di aggirare il caso in cui nes-

suno dei due nodi (sorgente e destinazione) puo stabilire una connessione

con l’altro a meno che il file non sia disponibile su altri nodi con i quali essi

possono connettersi.

Questa limitazione e aggirabile dotando la rete di alcuni nodi relay oppor-

tunamente configurati, tali nodi devono essere in grado di rilevare queste

criticita ed operare come “ponte” fra i due nodi interessati al trasferimento,

il meccanismo dovrebbe essere innescato dai nodi di sorgente e destinazione:

quando essi rilevano di non poter trasferire il file fra di loro chiedono ai nodi

relay di agire da tramite.

Page 15: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 7

Source Node

Destination Node

Relay Node

Relay Node

Virtual Direct Transfer

Real Transfer Step 1

Real Transfer Step 2

Real Transfer Step 3

Figura 1.4: BitTorrent: possibile configurazione per permettere il tra-sferimento fra due nodi protetti da firewall. Il trasferi-mento viene realizzato con tre trasferimenti che poggianosu due nodi configurati per fare da relay.

Hadoop

Si tratta di un framework nato per lo storage distribuito dei dati e loro acces-

so su larga scala, nasce con lo scopo di agevolare l’utilizzo degli algoritmi di

“MapReduce”, termine che e stato originato presso Google[8], sui dati salva-

ti. Suddivide, secondo delle strategie configurabili, i file in diversi frammenti

(detti anche “chunk”) che vengono salvati e replicati su un numero variabile

di nodi.

La frammentazione puo essere disattivata facendo in modo che Hadoop lavori

con file interi[9]. Questa tecnologia tuttavia richiede l’utilizzo di una rete in

cui tutti i nodi possono connettersi fra loro (talvolta utilizzando piu di un

protocollo). Il progetto e ritenuto stabile solo su GNU/Linux, mentre e

distribuito come “development platform” su Windows. Mac OS X, il sistema

operativo su cui e stata sviluppata questa tesi, non e supportato.

PhEDEx

Acronimo per “Physics Experiment Data Export”, PhEDEx e un sistema di

distribuzione al pubblico dei dati risultanti da esperimenti di fisica delle alte

Page 16: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 8

energie (HEP) generati presso gli acceleratori di particelle esistenti.

Il funzionamento e grosso modo quello di una struttura di distribuzione mul-

tilivello basata sul modello publisher subscriber[10], dove i centri di ricerca

accademici si registrano alle sorgenti di dati volute e PhEDEx si occupa di

trasportare sui nodi tutti i dati pubblicati dai gruppi di ricerca selezionati.

Questo sistema opera grazie ad una serie di agenti che sono piccoli software

indipendenti cooperanti per creare una funzionalita di alto livello. Grazie a

questo tipo di disaccoppiamento il sistema esibisce una robustezza nei con-

fronti di alcuni eventi non catastrofici in quanto ogni piccolo modulo opera

con un comportamento transazionale. L’elevato disaccoppiamento e stato

oggetto d’interesse e di studio nelle fasi preliminari di questa tesi ed e stato

approfondito in letteratura.

Necessita di sviluppare un sistema dedicato

Il sistema sviluppato in questa tesi richiede alcune funzionalita presenti in uno

o piu dei sistemi precedentemente esposti, tuttavia nessuno di essi le contiene

tutte, questo ha portato all’analisi, progettazione e implementazione di un

sistema dedicato in grado di operare con le seguenti precondizioni:

• Topologia di rete, supporto multiprotocollo: il sistema dovra na-

scondere la complessita legata alle modalita con cui il nodo e inserito nella

rete, ai protocolli che esso utilizza ed alla necessita o meno di usare relay

(anche multipli) per ottenere il trasferimento dei file.

• Verifica dei trasferimenti: ogni trasferimento dovra essere validato an-

che a scapito delle prestazioni in quanto non e ammissibile iniziare un

processo dispendioso di elaborazione su dati di input non validi (si pensi

ad una simulazione della durata di alcune ore o alcuni giorni).

Page 17: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Distribuzione dei dati per l’esecuzione distribuita 9

• Atomicita e persistenza: durante l’esecuzione distribuita alcuni nodi

potrebbero smettere di funzionare senza preavviso per motivi legati al-

l’usura dei componenti, mancanza di fornitura elettrica, problemi di rete,

crash di sistema. Nel caso di eventi non catastrofici i trasferimenti e l’e-

secuzione devono riprendere una volta ripristinato il nodo. I trasferimenti

devono essere atomici e idempotenti.

• Produzione differita dei dati: non e garantito che i dati richiesti da

un nodo siano gia presenti nel sistema al momento della richiesta, essi

potrebbero essere prodotti da un altro nodo in un istante successivo. I

dati potrebbero inoltre non essere mai prodotti.

• Ubicazione incognita dei dati: non deve essere necessario conosce-

re quale nodo ha prodotto i dati richiesti ne in in quale dispositivo essi

risiedano. Un identificatore univoco per tali dati deve essere sufficiente.

• Adattamento all’ingresso di nuovi nodi: l’ingresso di un nuovo nodo

nella rete durante l’esecuzione deve essere supportato, sia nel caso esso sia

un nodo precedentemente presente nella rete e ripristinato a seguito di un

errore sia nel caso esso sia nuovo.

Page 18: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 2

Analisi

La fase di studio ed analisi del sistema che si andra a realizzare consiste

in una fase iniziale in cui sono stati raccolti alcuni dati riguardo il “setup”

tipico dell’ambiente in cui si dovra operare, una lista di funzionalita attese e

di vincoli tecnologici da rispettare.

2.1 Ipotesi sullo scenario tipico

Le caratteristiche degli ambienti di esecuzione distribuita presi in consi-

derazione hanno influenzato le scelte fatte nella fase di progettazione, in

particolare i seguenti punti sono quelli su cui ci si e maggiormente focalizzati.

• Tipologia dei nodi: non si e voluto definire le qualita dei nodi, potreb-

bero essere elaboratori per “High Performance Computing” come essere

dei personal computer con limitate capacita di calcolo. Si presume invece

che ognuno di essi abbia a disposizione uno spazio libero sulla memoria di

massa che consenta tutte le operazioni necessarie. Il sistema operativo non

e rilevante salvo il requisito di poter eseguire una Java Virtual Machine.

• Quantita dei nodi: il numero di nodi coinvolti nel sistema puo variare da

alcune unita a poche decine, ognuno di essi deve essere in grado di inviare

Page 19: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

2.2 Obiettivi 11

e ricevere tutte le informazioni necessarie a determinare la composizione e

lo stato dell’ambiente distribuito.

• Topologia della rete: e richiesto di non fare ipotesi restrittive sulla

topologia della rete salvo il fatto che tutti i nodi hanno, necessariamente,

accesso ad un nodo con un sistema di comunicazione asincrona a messaggi

in esecuzione.

• Accesso ai dati: l’accesso ai dati, a basso livello, viene fornito tra-

mite FTP, HTTP, SMB o altri protocolli non specificati. Alcuni nodi

potrebbero non avere in esecuzione un file server.

2.2 Obiettivi

Lo scopo principale di questa tesi e quello di arrivare ad un prototipo che,

a seguito di una invocazione della sua interfaccia, possa trasferire i file e

notificare il loro avvenuto recupero al nodo che l’ha richiesto. Verranno ora

elencati gli obiettivi principali di questo progetto.

• Interfaccia tramite messaggi JMS: l’interfaccia deve essere composta

da un numero ben preciso di messaggi, non e stato posto alcun vincolo

sul loro contenuto se non quello di essere facilmente producibile con il

linguaggio di programmazione Java.

• Portabilita: tutte le tecnologie utilizzate devono essere in grado di fun-

zionare sui tre sistemi operativi di riferimento, i nodi devono inoltre essere

avviati e monitorati con le stesse modalita.

• Accesso multiprotocollo alle risorse: l’implementazione deve essere

in grado di includere qualsiasi protocollo di trasferimento possa essere

implementato (o importato da librerie di terze parti) in ambiente Java.

Nessuna ipotesi deve essere fatta sul protocollo necessario per accedere

alle risorse.

Page 20: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

2.3 Vincoli 12

• Uso di nodi relay: nel caso in cui fra il nodo sorgente e quello desti-

nazione non fosse possibile effettuare un trasferimento diretto, il sistema

deve pianificare l’uso di uno o piu nodi di relay in cascata in modo che il

trasferimento possa avvenire ugualmente.

• Astrazione: chi invoca il sistema non deve essere necessariamente a co-

noscenza di alcun dettaglio riguardante i nodi, la loro collocazione, la loro

configurazione o altri parametri.

• Utilizzo di una quantita predicibile di risorse: e importante che il

sistema che verra realizzato impegni una quantita di risorse predefinita,

anche sotto stress. Le risorse impegnate per il funzionamento devono essere

correttamente rilasciate una volta terminato il loro utilizzo.

2.3 Vincoli

Il lavoro richiesto e stato sottoposto a pochi vincoli lasciando una discreta

liberta nella scelta delle tecnologie da utilizzare, essi verranno elencati di

seguito. Per ogni vincolo tecnologico viene data una breve spiegazione della

tecnologia e di come viene utilizzata.

• JavaTM 7: si vuole un linguaggio ad oggetti in grado di garantire un’eleva-

ta portabilita, Java risponde a questi requisiti. La versione 7 e attualmente

utilizzata dal gruppo di ricerca e sviluppo e pertanto e stata adottata.

• ActiveMQ: e il middleware di messaggistica utilizzato dal team di svilup-

po del motore di esecuzione distribuita, pertanto il sistema dovra utilizzare

questa implementazione conforme alle specifiche JMS.

• Protocolli esistenti: i trasferimenti devono utilizzare protocolli esisten-

ti e possibilmente molto diffusi in modo che sia plausibile supporre che

ogni nodo abbia, per la sua piattaforma, una implementazione di tale

protocollo.

Page 21: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 3

Progettazione

L’attivita di progettazione ha avuto un ruolo chiave nella definizione archi-

tetturale del sistema sviluppato in questa tesi, nello specifico si e scelto di

utilizzare una “Event-driven architecture”[11,12] distribuita[13] in grado per

sua natura di supportare, se opportunamente utilizzata, un elevato livello di

disaccoppiamento[14].

Questa scelta e nata dal fatto che i messaggi sono, a tutti gli effetti, degli

eventi che arrivano alle varie componenti in tempi impredicibili. L’elevato

disaccoppiamento che ci si prefigge di raggiungere permettera di sostituire le

singole componenti anche in un solo nodo fintanto che queste rispetteranno

l’interfaccia definita in questo capitolo.

La costruzione dell’architettura distribuita viene coadiuvata dall’utilizzo de-

gli “Enterprise Integration Patterns” che si fondano sulla comunicazione tra-

mite messaggi e descrivono (fra i tanti) il pattern “Event Driven Consumer”,

inoltre essi prevedono il pattern “Transactional Client”, che verra utilizzato

per rendere il sistema robusto riguardo un insieme, limitato, di imprevisti.

Esistono diversi progetti, fra essi ci si e focalizzati su quelli Open Source, che

Page 22: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Progettazione 14

si propongono di implementare questi pattern. I framework presi in consi-

derazione in una fase preliminare sono stati: Spring Integration[15,16], Mule

ESB[17] e Apache Camel[18,19].

In seguito ad una valutazione iniziale delle tre alternative si e deciso di uti-

lizzare Apache Camel in quanto supporta un numero maggiore (al momento

della valutazione) di protocolli di comunicazione per i suoi componenti, inol-

tre esso permette di definire la composizione dei pattern tramite il linguaggio

di programmazione Java (contro XML degli altri due progetti), linguaggio

nel quale il candidato ha maggior dimestichezza.

Nella terminologia usata dalla documentazione di questa libreria una com-

posizione di pattern di integrazione si definisce “Route”, ovvero percorso.

Tali percorsi iniziano e terminano con degli “Endpoint”, siano essi reali o

virtuali. Ogni route preleva, elabora, manipola e consegna delle “Exchange”,

in questa tesi le Exchange utilizzate corrispondono a messaggi arricchiti da

metadati identificati da stringhe, tali metadati vengono salvati negli “Hea-

der”. Il paradigma ad eventi implementato in Apache Camel equipara ogni

messaggio recevuto da un endpoint ad un evento. Nel seguito di questo do-

cumento i termini messaggio ed evento verranno utilizzati come sinonimi, i

termini route e header verranno utilizzati con i significati di cui sopra.

Apache Camel e stato utilizzato in sinergia con lo Spring Framework[15] (da

non confondere con lo Spring Integration Framework, di cui sopra). Que-

st’ultimo offre la possibilita di istanziare alcune componenti descrivendole in

un file XML[20]. Il framework fa uso della tecnica di “Inversion of Control”

nello specifico la “Dependency Injection”[21] che permette di alleggerire il

codice delegando a Spring la creazione e la gestione di molti aspetti. Nel

caso specifico di questa tesi il framework e stato utilizzato nella gestione dei

componenti riguardo la comunicazione con JMS, la gestione delle transazio-

Page 23: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.1 Interfaccia 15

ni, nonche l’esecuzione del DBMS H2[22] con relativa web console. Spring

ha permesso anche l’uso di alcune tecnologie di monitoraggio alle quali si

accennera nel Capitolo 5.

3.1 Interfaccia

Il sistema di gestione dei dati deve operare in risposta a determinati eventi,

segnalati dall’arrivo di messaggi in un sistema JMS, e deve rispondere in

modo analogo. L’interfaccia e costituita da due messaggi di richiesta e due

di risposta, il loro contenuto viene ora specificato.

Figura 3.1: L’interfaccia e costituita da messaggi in un sistema JMS,si evidenziano i quattro tipi di messaggi utilizzati.

• Add File to System: contiene un identificatore univoco del file che si

vuole inserire nel sistema, un indirizzo locale al mittente in cui il file esiste

e l’identificatore globale del nodo che ha generato il messaggio.

• Retrieve File: contiene l’identificatore univoco del file che si vuole rice-

vere e l’identificatore globale del nodo che genera la richiesta.

Page 24: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 16

• File Retrived: contiene l’identificatore univoco del file recuperato, l’in-

dirizzo locale al ricevente in cui il file risiede e l’identificatore globale del

nodo che lo ha richiesto.

• Error: contiene una eccezione che identifica un errore nell’uso dell’in-

terfaccia o nel recupero del file, opzionalmente puo includere informa-

zioni aggiuntive generate dai sottosistemi (utilizzabili per identificare piu

dettagliatamente l’errore occorso).

Per aumentare la leggibilita dei messaggi nello scenario di una interazione

manuale essi sono nel formato JSON[23]. Nel caso del messaggio di errore

alcuni degli oggetti che sarebbero consultabili fra le informazioni aggiuntive

non possono essere convertiti al formato JSON a causa di riferimenti circolari

introdotti da alcune librerie utilizzate: tali elementi vengono soppressi.

3.2 Macrofunzioni

In fase di progettazione si e deciso di suddividere la funzionalita globale in

tre macrofunzioni indipendenti ognuna dotata della sua interfaccia. Tali ma-

crofunzioni (dette anche moduli) rispondono alle tre azioni elementari che il

sistema deve svolgere: esse sono la ricerca e localizzazione di un file, la pia-

nificazione del trasferimento e l’esecuzione materiale del trasferimento con

verifica della sua correttezza. L’interfaccia di ogni modulo e basata sui mes-

saggi, si faccia riferimento alla Figura 3.2 che descrive la struttura del sistema.

I componenti indicati come “Orchestrator” e “Exported Interface” non ver-

ranno descritti nel dettaglio in quanto si tratta di funzionalita elementari

necessarie solo ad indirizzare i messaggi ricevuti dall’esterno e quelli generati

internamente sulle code JMS opportune.

Page 25: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 17

Distributed Data Manager

Locate Plan Execute

JMS

Exported InterfaceOrchestrator

ExternalInterface

Figura 3.2: Tutti i moduli comunicano tramite JMS, essi sono indipen-denti ed esportano una interfaccia. I due moduli “orche-strator” e “exported interface” si occupano rispettivamentedi fare da collante fra i vari sottomoduli e implementarel’interfaccia esterna.

3.2.1 Ricerca dei file

Questo modulo, indicato come “Locate” in Figura 3.2, ha il compito di lo-

calizzare un file nel sistema distribuito dato il suo identificativo univoco.

La localizzazione avviene interrogando tutti i nodi del sistema, se uno di essi

possiede il file corrispondente all’identificativo allora rispondera alla richiesta.

Qualora non si ricevesse una risposta il modulo provvede a ripetere la ricer-

ca. Gli intervalli di tempo che intercorrono fra una richiesta e la successiva

aumentano con una crescita esponenziale (per ogni singola ricerca), dopo un

lasso di tempo preconfigurato, se la ricerca non ha esito positivo, essa viene

interrotta.

L’interfaccia si compone dei seguenti messaggi, ad ogni invocazione il primo

e sempre presente mentre gli ultimi due sono mutuamente esclusivi:

• Locate File: contiene l’identificatore univoco di un file che si vuole lo-

calizzare, contiene inoltre informazioni accessorie come il timestamp e il

nome del nodo che fa la richiesta.

Page 26: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 18

• File Located: contiene l’identificatore univoco di un file e le informazioni

riguardo la sua ubicazione, anch’esso contiene il timestamp e il nome del

nodo che ha richiesto il trasferimento.

• Error: nell’eventualita che il file non fosse localizzabile (perche non esi-

ste o perche il nodo su cui risiede e irraggiungibile) viene inserito nella

coda questo messaggio contenente l’identificatore del file e una serie di

informazioni utili a capire l’origine dell’errore.

3.2.2 Pianificazione del trasferimento

Una volta che un file e stato localizzato e necessario determinare le modalita

con cui effettuare il suo trasferimento (modulo “Plan” in Figura 3.2). Il tra-

sferimento sara diretto quando possibile, altrimenti il file verra recuperato

tramite una catena di opportuni trasferimenti.

La connettivita della rete puo essere rappresentata tramite un multigrafo di-

retto (con archi eventualmente pesati) in cui i nodi rappresentano le macchine

nell’ambiente distribuito e ogni arco indica la possibilita di un trasferimento

diretto. Gli archi possono avere un peso non negativo che indica la preferenza

di alcune connessioni (per motivi tecnologici, economici, ...) rispetto ad altre.

Si rappresenta la rete con un multigrafo poiche fra due nodi un file puo essere

trasferito sia tramite protocolli diversi che, usando lo stesso protocollo, con

modalita diverse (push o pull). Data questa rappresentazione si puo utiliz-

zare l’algoritmo di Dijkstra[24] per rilevare il percorso piu corto (potrebbe

non essere unico) fra sorgente e destinazione. Dato il percorso minimo si crea

una lista ordinata di trasferimenti da eseguire.

Questa macrofunzione si deve occupare anche della gestione del “chunking”

dei file: ogni file viene diviso in uno o piu chunk, la cui dimensione e co-

Page 27: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 19

Source

Node Relay

Node

Destination

NodeRelay

Node

NodeNode

Relay Node

Relay

Computing Site 1

Computing Site 2

Source

Node Relay

Node

Destination

NodeRelay

Node

NodeNode

Relay Node

Relay

Computing Site 1

Computing Site 2

Figura 3.3: Grafo rappresentante una serie di nodi connessi, in alto leconnessioni possibili, in basso un possibile percorso per iltrasferimento del file, gli archi con due frecce rappresenta-no in realta due archi con direzione opposta fra i medesimivertici.

stante tranne al piu l’ultimo. L’impatto di questa scelta sulle prestazioni

verra presentato nella Sezione 5.3.1 . L’utilizzo di questa tecnica permette la

ricezione concorrente di un file da piu fonti nel caso fosse presente su piu nodi.

La dimensione dei chunk in un ambiente (non realistico) in cui i trasferi-

menti avvengono senza alcun tipo di “overhead” o latenza potrebbe essere

arbitrariamente piccola. In questo sistema ogni trasferimento ha overhead

multipli dovuti sia al protocollo di trasferimento che allo scambio di messag-

gi, pertanto la dimensione dei chunk e stata scelta pari a 25 MiB, valore che

rappresenta un buon compromesso sulla base di alcune stime e test prelimi-

nari.

Page 28: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 20

Time

Source

Relay

Destination

Relay

Source

Destination

Figura 3.4: Confronto fra un trasferimento senza e uno con chunking.All’istante iniziale vengono richiesti due file, le frecce chia-re rappresentano i trasferimenti relativi al primo file e quel-le scure quelli relativi al secondo file. Ogni nodo puo ese-guire un solo trasferimento alla volta. Il chunking (in bas-so) permette di ricevere i file in un tempo minore nel casodi relay. L’effetto si amplifica nel caso di relay multipli.

Si noti che il transito per i nodi “relay” genera delle copie del file nel sistema,

inoltre dopo il trasferimento il file non viene eliminato dal nodo di partenza.

Queste copie possono essere eliminate o mantenute; nel secondo caso si ha un

effetto di replicazione: i nodi sono in grado di riconoscere la presenza delle

repliche e le mantengono associate al medesimo identificatore univoco. In

questo caso tutti nodi che possiedono delle repliche saranno coinvolti nelle

successive interazioni riguardo tali file.

L’output di questo modulo consiste in una lista non ordinata di messaggi,

uno per ogni chunk, contenenti la descrizione del percorso che tale file deve

Page 29: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 21

eseguire dalla sorgente alla destinazione, che altro non e che la soluzione in-

dividuata dall’algoritmo di Dijkstra.

L’interfaccia si compone dei seguenti messaggi, ad ogni invocazione il primo

e sempre presente mentre gli ultimi due sono mutuamente esclusivi:

• Route File Request: contiene l’identificatore univoco di un file localiz-

zato e l’indicazione del nodo in cui risiede.

• File Chunk Transfer: contiene l’identificatore di un chunk del file da

trasferire e una rappresentazione del percorso che esso dovra compiere per

raggiungere il nodo che l’ha richiesto. Viene generato un messaggio di

questo tipo per ogni chunk di cui e composto il file.

• Error: se non esiste soluzione al problema del percorso minimo per il

trasferimento o in caso di altri errori questo messaggio conterra una serie

di oggetti serializzati che possono permettere di ispezionare il processo di

instradamento e verificare l’origine dell’errore.

3.2.3 Esecuzione e verifica del trasferimento

Dopo aver determinato il percorso il sistema deve provvedere all’esecuzio-

ne materiale dei trasferimenti. Cio viene eseguito da questa macrofunzione

(“Execute” in Figura 3.2) che opera indipendentemente per ogni richiesta di

trasferimento di un chunk, essa e in grado di esaminare la richiesta, estrarre

ed eseguire eventuali trasferimenti di sua competenza e poi inviare il messag-

gio al nodo cui compete il prossimo trasferimento.

All’interno di questo modulo viene nascosta la complessita introdotta dal-

l’uso di protocolli multipli, infatti al suo interno verranno selezionati i client

adatti ad effettuare ogni tipo di trasferimento richiesto. Si presume che ogni

nodo sia in grado di operare con tutti i protocolli previsti.

Page 30: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

3.2 Macrofunzioni 22

Dopo il trasferimento di ogni chunk viene richiesta una verifica: tale verifica

viene eseguita dal nodo di destinazione (o destinazione intermedia) calco-

lando una funzione di “hash” del chunk in questione, questo valore viene

confrontato con un valore fornito durante la fase di pianificazione. In caso

non coincidessero il trasferimento verra ripetuto, eliminando al contempo i

chunk corrotti.

Quando tutti i chunk sono giunti al nodo di destinazione il file viene ricostrui-

to concatenandoli e anche questa operazione viene verificata utilizzando un

“hash”, una volta che il modulo verifica che il file sia integro il trasferimento

puo considerarsi terminato con successo. Soddisfatte queste condizioni il file

in arrivo dovra essere segnalato al richiedente.

L’interfaccia e data dai seguenti messaggi, ad ogni invocazione il primo e

sempre presente mentre gli altri due sono mutuamente esclusivi:

• File Chunk Transfer: contiene l’identificatore di un chunk del file da

trasferire e una rappresentazione del percorso che esso dovra compiere per

raggiungere il nodo che l’ha richiesto.

• File Delivered: contiene l’identificatore univoco del file recuperato, l’in-

dirizzo locale al ricevente in cui il file risiede e l’identificatore globale del

nodo che lo ha richiesto.

• Error: il meccanismo di verifica e ripetizione dei trasferimenti gestisce

buona parte degli errori, quelli non gestiti vengono notificati con que-

sto tipo di messaggio allegando, come negli altri moduli, una serie di

informazioni accessorie.

Page 31: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 4

Implementazione

Per implementare il sistema descritto al capitolo precedente si e scelto, come

anticipato, di utilizzare il framework messo a disposizione dal progetto Apa-

che Camel. In tal senso ogni modulo e stato pensato come una composizione

di “Enterprise Integration Pattern”, ovvero una o piu route.

Ogni implementazione verra descritta mostrando con una notazione leggera

e poco formale le route che la compongono. Le route verranno alleggerite

rimuovendo i passaggi relativi alla generazione dei messaggi di “log”.

Non verra spiegato nel dettaglio il funzionamento dei singoli “bean” in quan-

to svolgono funzioni poco piu che banali e nemmeno si scendera nel dettaglio

implementativo delle singole classi in quanto questo richiederebbe una inclu-

sione dell’intero codice sorgente.

Verranno nascosti alcuni dettagli implementativi poiche essi sono poco si-

gnificativi, ad esempio lo schema del database su cui poggia il catalogo o

l’organizzazione del filesystem per salvare i frammenti dei file non verranno

approfonditi in quanto si tratta nel primo caso di banali tabelle di look-up e

nel secondo di arbitrarie generazioni di URI.

Page 32: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Implementazione 24

Organizzazione in moduli

Il sistema e stato implementato con una modularita su due livelli. Il primo

livello di modularita coincide con le macrofunzioni presentate nel Capitolo 3,

ognuna delle quali e a sua volta organizzata in moduli separati, talvolta

chiamati “componenti”. La descrizione di tali moduli verra data nel corso di

questo capitolo, per ogni macrofunzione essi sono:

• Ricerca dei file: Finder e Catalog.

• Pianificazione del trasferimento: Router, Chunker e Mapper

• Esecuzione e verifica del trasferimento: Transfer Manager e File Checker

Considerazioni sulle risorse utilizzate

Durante l’implementazione ci si e dovuti preoccupare dell’utilizzo delle risor-

se da parte del sistema, in particolare si vuole che esso occupi una dimensione

massima (predeterminata) di memoria ed utilizzi un numero massimo (an-

ch’esso predeterminato) di thread.

Il secondo vincolo viene rispettato grazie al fatto che tutte le librerie utilizza-

te, e nello specifico Apache Camel, utilizzano un modello di multithreading

basato su pool di dimensione fissa, pertanto il numero di thread e propor-

zionale al livello di concorrenza massima specificato per ogni route (quando

non specificato le route non prevedono concorrenza).

I limiti di memoria vengono fatti rispettare badando alle strutture dati piu

pesanti, in questo caso si tratta dei messaggi utilizzati internamente da Apa-

che Camel anche per lo scambio di file (e quindi raggiungendo dimensioni

ragguardevoli). Camel permette di limitare il numero di messaggi “in volo”

sia sulle singole route che globalmente, limitando di fatto la numerosita di

tali strutture dati.

Page 33: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.1 Ricerca dei file 25

Nel Capitolo 5 verra presentato il modo in cui si e verificata la crescita

controllata e limitata delle risorse richieste, anche in situazioni in cui il tasso

di richieste di trasferimento supera quello che il nodo puo sostenere. Una

verifica di questo tipo e necessaria per sistemi che dovranno operare non

supervisionati per un tempo indefinito (ore, giorni, mesi...).

4.1 Ricerca dei file

La ricerca dei file comincia da un nodo, il richiedente, che utilizza un mo-

dulo “Finder” per colloquiare con il modulo “Catalog” degli N nodi di cui e

composto il sistema, compreso lo stesso nodo richiedente.

Finder Catalog

JMS File Located

JMS FileSearchJMS Locate File

File Request

Wait File LocatedTimeout

Got Response

JMS Router

Look Up DB

Found

Not Found

Figura 4.1: Schematizzazione dell’interazione fra due nodi durante laricerca dei file, all’esterno le code JMS, dentro i riquadrile due componenti di ogni nodo che stanno interagendo.

Come si puo notare in Figura 4.1 questa interazione coinvolge quattro code

JMS distinte, di queste, due fanno parte dell’interfaccia esterna, mentre le

altre due - disegnate con bordo tratteggiato - vengono utilizzate solo dalla

macrofunzione di ricerca, e possono essere nascoste agli altri livelli.

Per scelta d’implementazione il messaggio di ricerca del file viene inviato

alla coda solo dopo aver controllato che il file non sia gia presente sul nodo

Page 34: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.1 Ricerca dei file 26

richiedente, questo per evitare le latenze introdotte dal broker JMS in un

caso la cui risposta puo essere fornita immediatamente.

4.1.1 Finder

Ogni nodo possiede un componente finder. Esso riceve un messaggio conte-

nente l’identificativo di un file da cercare, effettua un controllo su un “header”

che indica la presenza del parametro di timeout e se questo non esiste il ti-

meout viene impostato ad un valore di default. A questo punto il file viene

cercato nel catalogo locale per verificare che non sia gia presente sul nodo, nel

caso venisse trovato il componente scrive un messaggio in una coda apposita

segnalando la consegna del file, altrimenti viene generato un messaggio di

ricerca globale.

JMS RequestFile

Begin Transaction

Check Header Wait

Set Header Wait

CheckLocalRepo

Check Header Found

JMS FileSearch

JMS FileFound

Begin Transaction

Aggregate on UniqueID

Aggregate on UniqueID with Timeout = Wait

Check if instanceof FileTransferMessage

Check Wait > Max

Abort

JMS Error

Timeout Increment

JMS Router

JMS Local

True

False

True

False

Null

Not

Nul

l

Figura 4.2: Finder Route: composizione degli Enterprise IntegrationPattern per l’implementazione del modulo “Finder”. Ilgrafo e stato generato a partire dai sorgenti, e manipolatoper renderlo piu leggibile.

Page 35: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.1 Ricerca dei file 27

Il messaggio entra in un aggregatore che effettua una correlazione fra messag-

gi di ricerca globale e messaggi di file localizzati, la correlazione viene fatta

su un header contenente un UUID[25]. L’aggregatore e configurato con un

timeout prelevato dall’header del messaggio di ricerca. Nel caso si ricevesse

entro il timeout un messaggio indicante — file localizzato, verrebbe generato

un messaggio di tipo “FileTransferMessage” che verrebbe inviato sulla coda

“Router”, altrimenti una volta raggiunto il timeout il messaggio di ricerca

rimarrebbe invariato e reinviato nella coda per le richieste. Ad ogni iterazio-

ne il timeout viene incrementato esponenzialmente. Solo nel caso il timeout

superasse un tempo critico configurabile la ricerca verrebbe abbandonata se-

gnalando un errore.

I messaggi di localizzazione dei file, ricevuti in risposta al messaggio di ricerca

globale, vengono a loro volta aggregati con un timeout statico in modo da

poter gestire il caso in cui piu nodi contengano il file, il modulo successivo

utilizzera eventualmente queste informazioni per elaborare una strategia di

trasferimento che ne tenga conto.

4.1.2 Catalog

JMS FileAnnounce

Filter StorageElement == Local

ManageFileAnnounce

JMS FileSearch

Filter StorageElement != Local

ManageFileSearch

Filter Found == true

JMS FileFound

Figura 4.3: Catalog: a sinistra gestione dell’aggiunta di un nuovo file,a destra gestione e risposta ad una ricerca globale.

Page 36: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.2 Pianificazione del trasferimento 28

Il modulo “Catalog” e in grado di gestire due eventi. Alla ricezione di un

messaggio di inserimento di file nel sistema esso lo inserisce, preparando

tutte le informazioni necessarie per utilizzarlo (hash, chunking, etc...). Il

secondo evento e la ricezione di un messaggio di ricerca globale: in questo

caso il modulo ricerca in un database relazionale locale la presenza di quel

file sul nodo in questione. In caso di risposta negativa il messaggio viene

ignorato, altrimenti si genera una risposta positiva e viene inviata nella coda

“FileFound”.

4.2 Pianificazione del trasferimento

La macrofunzione di pianificazione del trasferimento si compone delle fun-

zionalita necessarie a mantenere una rappresentazione sotto forma di grafo

della connettivita dei nodi, inoltre rende possibile tutte le operazioni neces-

sarie per aggiornare, inserire ed estrarre dati utili da tali informazioni.

Router

Mapper

JMS Router

Try Shortest Path

Found

Get Chunk Hash

JMS Chunker

JMS FileTransfer

JMS HeartBeat Send Info

Update Graph

Delay

Not Found

Delay

Set Chunk Hash

Network Graph

Chunker

Figura 4.4: Pianificazione del trasferimento, a sinistra invio e ricezio-ne delle informazioni sulla connettivita, a destra in altoricerca del percorso minimo sul grafo e in basso recuperodei metadati sui chunk.

Page 37: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.2 Pianificazione del trasferimento 29

4.2.1 Router

A questo modulo arrivano i messaggi riguardo file gia localizzati, esso ha il

compito di ricercare il percorso piu corto fra sorgente e destinazione consul-

tando un grafo che rappresenta le possibili connessioni fra i nodi con archi

pesati. Il peso per ogni arco puo essere assegnato secondo diverse metriche:

massima velocita dell’interfaccia di rete, massima velocita di trasferimento

registrata, una funzione inversa del numero di trasferimenti in corso su quel-

l’arco, etc...

JMS Router

Graph Solver

Check Retry Splitter: split[ body ] Set Next Node

JMS Chunker

Delay DefinitionTrue

False

Figura 4.5: Router: il modulo cerca un percorso sul grafo fra sorgentee destinazione, se non lo trova riprova dopo un lasso ditempo configurabile. Se il cammino esiste viene generatoun messaggio di trasferimento per ogni chunk.

Nel caso non fosse possibile trovare un cammino fra sorgente e destinazione

il messaggio viene ritardato di un periodo scelto in fase di configurazione

e successivamente fatto tornare all’input del modulo. Si presuppone che i

nodi siano sempre in qualche momento raggiungibili pertanto questo modu-

lo non prevede l’annullamento della ricerca. Le informazioni su cui opera

questo modulo, ovvero il grafo, vengono costruite ed aggiornate dal modulo

“Mapper” che verra esposto nella sottosezione 4.2.3

4.2.2 Chunker

Il modulo in questione si occupa di reperire le informazioni necessarie alla

gestione del file suddiviso in chunk e di generare i metadati di controllo rela-

tivi. Le informazioni riguardo l’hash dei singoli chunk risiedono sui soli nodi

Page 38: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.2 Pianificazione del trasferimento 30

JMS Chunker Add Chunk Hash JMS FileTransferSet First Active Node

Figura 4.6: Chunker: recupera gli hash relativi ai vari frammenti earricchisce il messaggio di quest’informazione.

in possesso di tali frammenti.

Questa operazione viene effettuata generando dei messaggi di trasferimento

dei chunk che vengono inviati ad una apposita coda. Chi ha le informazioni

richieste (uno dei nodi che possiede il file nel suo catalogo) preleva il messag-

gio, lo arricchisce dei dati necessari e reinserisce tale messaggio in una coda

destinata a contenere i trasferimenti da eseguire.

4.2.3 Mapper

JMS HeartBeat

Merge Foreign Graph

timer:mapper

Bean SendNodeInfo Update Graph

JMS HeartBeat

Figura 4.7: Mapper: invio della propria conoscenza sulla topologia direte, ricezione e integrazione della conoscenza degli altrinodi.

Questo modulo si occupa della costruzione del grafo di connettivita dei nodi.

Si compone di un timer che innesca l’invio delle proprie informazioni di stato

(compreso il grafo della rete) ad un topic (architettura publisher subscriber)

al quale sono registrati tutti i nodi, tale componente e l’omonimo topic sono

stati chiamati “HeartBeat”. Il modulo contiene anche una componente che,

una volta ricevuto il messaggio di cui sopra dagli altri nodi, si occupa di

verificare l’eventuale possibilita di connettersi a loro (nel caso offrissero un

accesso tramite qualche protocollo) e di unire il grafo da loro rilevato a quello

locale. Grazie alle informazioni prodotte e consumate da questo modulo tutti

Page 39: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.3 Esecuzione e verifica del trasferimento 31

i nodi hanno la possibilita di costruire e mantenere costantemente aggiornato

il loro grafo di connettivita.

4.3 Esecuzione e verifica del trasferimento

Questa macrofunzione si occupa di effettuare il trasferimento dei chunk uti-

lizzando uno dei protocolli disponibili fra due nodi connessi. Essa ha an-

che il compito di verificare la correttezza dei singoli trasferimenti nonche di

ricostruire il file dai suoi frammenti quando sono tutti stati ricevuti.

Transfer Manager

File Check

JMS Transfer

Execute Transfer

JMS Verify

Check Hash

Match Fail

Delete ChunkConfirm Transfer

Set Receiver

Figura 4.8: Esecuzione dei trasferimenti: a destra il “Transfer Ma-nager” esegue un trasferimento, a sinistra la componente“File Checker” ne verifica la correttezza.

4.3.1 Transfer Manager

Questa componente riceve un messaggio che descrive il trasferimento di un

frammento di file e il percorso (sul grafo) che il chunk deve compiere. Il mes-

saggio in questione contiene una rappresentazione del percorso come una lista

ordinata di trasferimenti diretti da effettuare fra due nodi, contiene inoltre

l’indicazione di quali siano gia stati effettuati.

Il Transfer Manager riceve un messaggio di richiesta solo quando e parte atti-

va nel processo. Esso preleva il prossimo trasferimento dalla lista, determina

Page 40: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

4.3 Esecuzione e verifica del trasferimento 32

se deve fare un “download” o un “upload” e lo effettua. L’implementazione

utilizzata per gestire i trasferimenti e quella della “Chain of Responsibi-

lity”[26] che rende possibile un elevato disaccoppiamento fra il sistema di

gestione dei trasferimenti e le singole implementazioni per i diversi protocolli

facendo in modo che il primo abbia a che fare con una interfaccia che na-

sconde tutti i dettagli di implementazione.

Una volta completato il trasferimento si determina il nodo che dovra effet-

tuare la verifica dell’integrita del frammento, nel caso il trasferimento fosse

un “download” la verifica spetta al nodo stesso, altrimenti la verifica viene

richiesta al nodo che ha ricevuto il chunk.

4.3.2 File Checker

Ricevuto un messaggio di richiesta della verifica questo nodo accede al suo

“filesystem” per verificare che il frammento indicato dal messaggio esista e

sia integro tramite la verifica dell’hash. Se la verifica ha esito positivo il

messaggio viene trasformato in una richiesta di trasferimento dove l’ultimo

passo effettuato viene confermato e inserito nella lista dei trasferimenti gia

eseguiti, altrimenti il trasferimento verra rimesso nella lista dei trasferimenti

da fare in modo che venga ripetuto.

Non e stato previsto alcun meccanismo di prevenzione del deadlock, ad esem-

pio se il disco del nodo ricevente non ha spazio a sufficienza il trasferimento

potrebbe essere tentato indefinitamente. Per ovviare a questo problema sa-

rebbe sufficiente inserire un contatore associato ad ogni tentativo e stabilire

un numero massimo di tentativi. Questo meccanismo andrebbe integrato con

quello di pianificazione in modo da poter elaborare una strategia che tenga

conto anche di questi problemi, ma non e scopo di questa tesi affrontare tale

problema poiche esula dalle ipotesi iniziali sullo scenario.

Page 41: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 5

Verifica della robustezza e

valutazione delle prestazioni

In questo capitolo si riportano alcuni dei test effettuati per verificare il corret-

to funzionamento del prototipo realizzato e la sua rispondenza ai requisiti.

I test realmente effettuati sono stati molto piu numerosi, sia sulle singole

componenti che sul sistema globale. Buona parte di essi consiste nel richie-

dere un numero elevato di trasferimenti scegliendo casualmente sorgenti e

destinazioni, in questo tipo di test si possono generare decine di migliaia di

messaggi, linee di log e file in pochi minuti.

5.1 Ambiente di test

Per eseguire il sistema distribuito e verificarne le funzionalita sono stati in-

stallati alcuni nodi su macchine virtuali e su macchine fisiche. Questi nodi

eseguono sistemi operativi diversi fra loro eccetto i due nodi con OS X. Ogni

nodo esegue il programma che e il risultato dell’implementazione del siste-

ma in oggetto alla tesi. E necessario installare e configurare gli ambienti in

modo da poter operare, nello specifico sono necessari dei servizi per la tra-

Page 42: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.1 Ambiente di test 34

smissione o condivisione dei file e un servizio (centralizzato o distribuito) per

la comunicazione tramite messaggi.

5.1.1 Configurazione dei nodi

Per eseguire dei test sul sistema sono state fornite quattro macchine virtuali

affiancate a due macchine fisiche con le seguenti configurazioni:

• Workstation: iMac 2008 24, Intel Core 2 Duo 2.4 GHz, 4GB RAM, 320

GB SATA Disk, Ethernet 100 Mbps, OS X 10.9

• Notebook: MacBook 2009 13, Intel Core 2 Duo 2.0 GHz, 8GB RAM, 240

GB SATA SSD, Ethernet 1.0 Gbps, OS X 10.9.1

• Research 01: VM, CPU 2 core 3 GHz, 8 GB RAM, 80 GB Disk, VirtIO

Ethernet 10.0 Gbps, Windows 7

• Research 07: VM, CPU 2 core 3 GHz, 2 GB RAM, 25 GB Disk, Gigabit

Ethernet 1.0 Gbps, GNU/Linux Ubuntu 10.04 LTS

• Research 08: VM, CPU 2 core 3 GHz, 2 GB RAM, 8 GB Disk, VirtIO

Ethernet 10.0 Gbps, GNU/Linux Ubuntu 10.04 LTS

• Research 09: VM, CPU 2 core 3 GHz, 2 GB RAM, 25 GB Disk, Ethernet

NIC 100 Mbps, Windows XP

Le macchine virtuali vengono eseguite su un cluster composto dalle seguenti

unita:

• Prox1, Prox2: Dell PowerEdge R715, 2 x Opteron 3.2 GHz 8 core, 64

GB RAM, SAS RAID (solo SO), 4 x Ethernet Gigabit

• Prox3: Dell PowerEdge R515, 2 x Opteron 2.6 GHz 6 core, 16 GB RAM,

SATA RAID (solo SO), 4 x Ethernet Gigabit

Page 43: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.1 Ambiente di test 35

• Storage3: Supermicro, Xeon E5645, 16 GB RAM, SATA RAID (SO +

share NFS), 4 x Ethernet Gigabit

Le share NFS di Storage3 contengono le immagini dei dischi utilizzati dalle

macchine virtuali che in questo modo possono migrare indifferentemente fra

i tre nodi che compongono il cluster. Il sistema di virtualizzazione utilizzato

e ProxMox VE[27].

5.1.2 Configurazione di ActiveMQ

Il message broker ActiveMQ e necessario per la comunicazione tramite JMS,

per questo specifico software Apache Camel possiede moduli di interfaccia-

mento ottimizzati potendo sfruttare funzionalita non standard, tuttavia que-

sti moduli sono pienamente compatibili con quelli che implementano la co-

municazione standard prevista da JMS. Il broker e stato utilizzato in due

diverse configurazioni:

• Broker Centralizzato: in questa modalita esiste un solo broker nella

rete, raggiungibile da tutti i nodi, che esegue il sistema di gestione dei

messaggi. Esso e configurato per supportare le transazioni e per utilizzare

la persistenza su disco.

• Network of Brokers: ogni nodo del sistema esegue un broker locale

che grazie a Spring Integration viene inizializzato ed eseguito all’avvio del

sistema di gestione dei dati. Questa modalita utilizza il multicast per

creare con gli altri broker in rete una federazione, alcuni parametri quali il

diametro della rete e il time-to-live dei messaggi devono essere impostati

con cura (richiedono una conoscenza sommaria della topologia della rete

in cui verranno utilizzati).

Il sistema di trasferimento dei file e stato utilizzato e testato indifferente-

mente con le due configurazioni, dimostrando performances analoghe a meno

dei tempi aggiuntivi introdotti dal meccanismo di “Store and Forward”[28]

utilizzato dalla configurazione distribuita.

Page 44: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 36

5.1.3 Configurazione FTP e HTTP Server

Alcuni nodi, a seconda della configurazione degli stessi, sono stati configurati

per avere in esecuzione dei server FTP, dei server HTTP o entrambe.

Come server HTTP si e utilizzato Jetty[29], configurato per dare accesso

senza autenticazione a tutti i file contenuti a partire da una determinata

directory radice, esso e stato inserito nel pacchetto software contente il pro-

getto ed e attivabile tramite un parametro da linea di comando. Allo stesso

modo e stato inserito anche un server FTP basato su Apache FtpServer[30].

5.2 Robustezza

Al prototipo realizzato durante questa tesi e richiesto di manifestare un com-

portamento robusto riguardo a chiusure forzate e riavvii sia del software

sviluppato, sia del sistema sottostante. Il sistema deve inoltre dimostrarsi

robusto anche riguardo i problemi di connettivita sia di alto che di basso

livello.

Il primo scenario comprende anche la possibilita di interruzione della forni-

tura elettrica con conseguente arresto dell’esecuzione senza preavviso, ovvero

senza la possibilita di salvare lo stato. La soluzione ad entrambi questi proble-

mi e stata individuata nell’uso delle transazioni e della persistenza, pertanto

questi sono i comportamenti di cui si intende verificare la correttezza.

5.2.1 Monitoraggio del sistema

I trasferimenti durante questo tipo di test sono stati monitorati utilizzando

JMX[31] in combinazione con Jolokia[32] e HawtIO[33], in questo modo tra-

mite una console web si e potuto osservare in tempo reale l’andamento di

Page 45: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 37

alcuni indicatori che riportavano lo stato dei trasferimenti in corso.

In alcune fasi dello sviluppo e in alcuni test si e fatto utilizzo delle tecniche

di “Process Mining”[34] per monitorare il comportamento dell’applicazione

distribuita. Per poter fare uso di questa tecnica i log emessi dai vari nodi

devono essere formattati in modo da poter essere suddivisi per ogni diversa

invocazione del sistema e devono riportare gli eventi in modo uniforme. I log

devono essere inoltre centralizzati ed i loro timestamp allineati ed unificati.

La soluzione adottata prevede l’utilizzo di un server Syslog[35] opportuna-

mente configurato per applicare timestamp con precisione al millisecondo.

Tale server riceve i log da tutti i nodi tramite un appender[36] specifico con-

figurato per produrre i log in formato “CSV”, ovvero con i campi separati

da virgole.

Il software utilizzato e Fluxicon Disco[37] grazie ad una licenza concessa dal

produttore per lo scopo di questa tesi. Esso e stato utilizzato sia per con-

frontare il processo effettivamente rilevato dall’analisi dei log con i workflow

implementati nei vari moduli che per verificare il rispetto dei medesimi an-

che in presenza degli imprevisti summenzionati. Questa tecnica si e rivelata

utile anche nel caso di elevato numero di richieste, circostanza nella quale e

oneroso tener traccia di tutti i trasferimenti senza strumenti di analisi auto-

matizzata. Sono stati inoltre usati gli strumenti di analisi temporale integrati

nel software Fluxicon Disco. In Figura 5.1 si puo vedere un esempio di estra-

zione dei processi in due test, a sinistra uno dei trasferimenti e corrotto e il

chunk relativo viene eliminato e ritrasferito, a destra alcuni dei file richiesti

non vengono trovati entro il timeout stabilito.

Un altro modo per verificare che i trasferimenti siano avvenuti correttamente

e, piu banalmente, quello di verificare la presenza dei file richiesti da ogni

nodo sul suo filesystem locale. Questa modalita fornisce molte meno infor-

Page 46: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 38

File Request

Search

LocatedMatch

Abort

Try Route

OK Route

Split Chunks

Do Transfer

Transfer End

Hash OK

Next Transfer Merge File

Delivered

File Request

Search

LocatedMatch

OK Route

Try Route

Split Chunks

Do Transfer

Transfer End

Hash OK

Next Transfer Merge File

Delivered

Hash Fail

Delete & Retry

Figura 5.1: Process Mining: elaborazione dei log per ricostruire il com-portamento del sistema. La dimensione delle frecce rappre-senta la quantita di eventi che percorrono quell’arco. I dueprocessi rappresentati sono estratti da esecuzioni reali delsistema in cui alcune eventualita non si sono verificate (es.fallimento di “Route”).

mazioni sull’evoluzione del sistema durante il trasferimento ma e ugualmente

prova del corretto funzionamento del sistema.

5.2.2 Interruzioni improvvise

Per testare questo tipo di imprevisto si e fatto terminare il processo cor-

rispondente al sistema realizzato in un momento casuale, successivamente

questo e stato nuovamente eseguito e si e verificato che il trasferimento ve-

nisse effettuato correttamente. Questa procedura e stata effettuata su un

Page 47: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 39

numero arbitrario e casuale di nodi ad ogni verifica.

In questa tesi verra riportata una sola configurazione di test con relativi dati

osservati: essa e quella in cui un trasferimento deve passare attraverso due

nodi relay. Dal nodo destinazione sono stati richiesti 100 trasferimenti, con

un tasso di una richiesta al secondo, e si e verificato che tutti i trasferimenti

terminassero correttamente.

Nella Figura 5.2 si riporta l’andamento dell’attivita su ogni nodo, stimata dal

numero di messaggi di log per unita di tempo. In alto c’e il nodo sorgente,

seguono i due relay, il quarto e il nodo destinazione. L’ultimo grafico rappre-

senta l’attivita globale. Si puo notare un leggero disallineamento dei grafici

dovuto al fatto che gli istanti di inizio e fine attivita dei vari nodi sono diver-

si, il che porta ad un leggero cambio di scala orizzontale (non modificabile

nel software utilizzato) che si e cercato di compensare con una traslazione

durante la manipolazione grafica dell’output.

Source

Relay 1

Relay 2

Destination

Global

Figura 5.2: Attivita durante il test di interruzione, dall’alto verso ilbasso: sorgente, due relay, destinazione e andamento glo-bale. Stima effettuata in base al numero di messaggi di lognell’unita di tempo.

Page 48: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 40

5.2.3 Problemi di rete

Un modo efficace per simulare eventuali problemi di rete e quello di utilizzare

un firewall e modificarne le regole per permettere o impedire la comunica-

zione ad un certo nodo. Tale scenario e simile a quello delle interruzioni

improvvise salvo il fatto che si vuole testare la correttezza dei meccanismi di

timeout. Nella configurazione distribuita del message broker si vuole inoltre

verificare che i messaggi vengano effettivamente inoltrati una volta ristabilita

la connessione di rete.

Source

Relay 1

Relay 2

Destination

A B C

D E

F

Global

Trasferimenti Attivi

Figura 5.3: Test di interruzione delle comunicazioni di rete dei varinodi. Le frecce demarcano gli istanti in cui la condizionidi connettivita subiscono variazioni. “Trasferimenti Atti-vi” rappresenta il numero di trasferimenti in corso (ovverorichiesti e non ancora completati).

In Figura 5.3 si puo vedere un test (come nel test precedente si tratta di

100 trasferimenti con due relay) in cui si agisce sui due relay per simulare

una perdita di connettivita. Inizialmente vengono interdette tutte le comu-

nicazioni di rete al primo relay (A). In seguito viene prima ripristinata la

comunicazione con la coda (B) e, successivamente, anche con il resto dei no-

di (C). Dopo un certo intervallo di tempo viene scollegato il secondo relay

Page 49: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.2 Robustezza 41

(D), gli effetti di questa operazione si vedono sul nodo destinazione che non

ha piu attivita di download da quel nodo. L’attivita riprende non appena si

ripristina la connessione (E).

In basso nella figura si riporta la quantita delle richieste di trasferimento at-

tive nel tempo. Si noti che il tasso di completamento (grossomodo indicato

dalla pendenza della curva) aumenta sotto una certa soglia rivelando un ef-

fetto di saturazione quando i trasferimenti contemporaneamente attivi sullo

stesso percorso superano un numero critico (in questo circa pari a 60).

E stato testato anche il caso in cui la topologia della rete cambiasse: in tale

caso si chiedeva al sistema di adeguarsi senza vincoli sul tempo impiegato.

L’unico modo per verificare che cio accadesse era quello di visualizzare, nodo

per nodo, il grafo rilevato dal componente “Mapper”. Come si puo vedere in

Figura 5.4 l’aggiornamento del grafo avviene correttamente.

Workstation

Research08

push

Research01

Research07

pushpull

pull

pull

push

Workstation

Research01

pull

Research07

pull

Research08

pull pushpush pull

pull

pull

push

Figura 5.4: Verifica dell’aggiornamento del grafo di connettivita inseguito ad una modifica della topologia di rete: il nodo“Workstation” ha un malfuzionamento del server HTTP,gli archi “pull” uscenti da “Workstation” vengono rimossi.

Page 50: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Prestazioni 42

Nell’esempio in Figura 5.4: il nodo “Workstation” inizialmente ha un server

HTTP in esecuzione, in seguito il server non e piu disponibile e il grafo viene

aggiornato. L’aggiornamento delle informazioni ha una frequenza configura-

bile. La figura e stata generata direttamente dal sistema realizzato grazie

ad una funzionalita della libreria per la gestione dei grafi che permette di

esportare la struttura dati nel formato DOT[38].

Nel caso alcuni trasferimenti in corso dovessero utilizzare un collegamento

non piu disponibile il sistema rimane in attesa, se il collegamento viene ripri-

stinato il trasferimento continuera altrimenti, dopo un lasso di tempo configu-

rabile, il sistema richiedera un nuovo trasferimento. Grazie all’idempotenza

dei trasferimenti non sara necessario annullare il precedente trasferimento.

5.3 Prestazioni

Una figura di merito investigata e quella delle prestazioni: in questo caso

tempi e velocita di trasferimento. Benche non ci fossero requisiti minimi su

tali valori si e voluto comunque misurarli. Ci si e da subito confrontati con

la possibilita di scegliere se misurare le singole velocita di trasferimento tra

i vari nodi oppure se aggregare i tempi di comunicazione ed elaborazione

introdotti dal sistema sviluppato.

Si e deciso di calcolare la velocita di trasferimento nel secondo modo, uti-

lizzando come tempo di inizio e fine trasferimento i timestamp relativi al

messaggio di richiesta di trasferimento e al messaggio di notifica di avvenuto

trasferimento. In tale scenario anche nel caso in cui non ci si appoggiasse

ad un relay le velocita rilevate saranno comunque sensibilmente inferiori a

quelle massime teoriche.

Page 51: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Prestazioni 43

5.3.1 Chunking e impatto dei relay

Si vuole verificare che il vantaggio introdotto dal chunking nei trasferimenti

che coinvolgono uno o piu nodi relay sia reale e quale sia la sua entita. Per

fare cio sono stati effettuati trasferimenti diretti, con un relay e con due

relay. Il file trasferito ha una dimensione di 218 MiB, il chunking viene

effettuato con frammenti di 25 MiB, dando luogo ad una ripartizione in 9

parti. Tutti trasferimenti sono stati ripetuti venti volte. La Figura 5.5 riporta

graficamente i risultati medi ottenuti mentre nella Tabella 5.1 si riportano

valori medi e deviazione standard rilevati.

1

2

3

4

5

6

7

Senza chunking

Con chunking

Diretto 1 Relay 2 Relay

Speed MiB/s

Figura 5.5: Differenze nella velocita di trasferimento senza e con chun-king. A scapito di una leggera perdita nei trasferimen-ti diretti il chunking permette guadagni in velocita neitrasferimenti con relay.

Nel caso di trasferimenti senza l’uso del chunking il trasferimento diretto po-

trebbe essere vantaggioso, tuttavia questo test non rende conto dei vantaggi

introdotti dal chunking nel caso in cui un trasferimento dovesse essere ripe-

tuto in seguito ad un evento imprevisto (corruzione del file, crash del nodo).

In tal caso con il chunking attivato si dovra ritrasferire un solo chunk invece

che il file intero.

Page 52: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Prestazioni 44

ConfigurazioneDiretta Un Relay Due Relay

Senza chunkingAvg 6.77 3.96 2.23

StdDev 0.64 0.20 0.13

Con chunkingAvg 5.71 5.07 4.15

StdDev 0.18 0.22 0.16

Tabella 5.1: Velocita di trasferimento rilevate, tutti i valori sono inMiB/s.

5.3.2 Thread e memoria occupata.

Per verificare che il sistema avesse alcune delle proprieta desiderabili per po-

ter rimanere in esecuzione per un tempo indeterminato sono state osservate

e verificate le seguenti caratteristiche: la crescita limitata della memoria uti-

lizzata, del numero di thread e il rilascio di queste risorse al termine delle

operazioni di trasferimento.

La verifica di queste proprieta e stata effettuata tramite l’utilizzo di JCon-

sole[39], un tool compreso nell’ambiente di sviluppo Java 7. Tramite l’uso

di JMX il tool offre una funzionalita in grado di visualizzare la sintesi delle

risorse utilizzate. In questa tesi ci si e concentrati sulla schermata in cui

vengono riportati i valori di Heap Memory utilizzata, il numero di thread

esistenti (sia attivi che inattivi), l’utilizzo della CPU ed il numero di classi

caricate (questo valore non e stato oggetto di analisi).

In Figura 5.6 sono stati eseguiti tre trasferimenti, aspettando che ognuno

terminasse prima di richiedere il successivo. I trasferimenti sono in corri-

spondenza delle tre zone non mascherate nella figura e si possono distinguere

dall’aumento di utilizzo del processore. Si puo vedere che il numero di thread

cresce leggermente durante i trasferimenti ma successivamente diminuisce,

rivelando che le risorse vengono correttamente rilasciate. Per la memoria

valgono considerazioni analoghe.

Page 53: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Prestazioni 45

Figura 5.6: Risorse impegnate dal sistema: la maschera evidenzia tretrasferimenti, le risorse impegnate vengono rilasciate.

Figura 5.7: Dieci trasferimenti contemporanei, il sistema limita itrasferimenti contemporanei a tre.

Page 54: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

5.3 Prestazioni 46

Nella Figura 5.7 viene eseguita una rilevazione analoga ma aumentando il ca-

rico del sistema. Vengono richiesti 10 trasferimenti contemporaneamente: si

nota un plateau nell’aumento del numero di thread e una conseguente dimi-

nuzione degli stessi alla fine dei trasferimenti. Alla fine di questo test tramite

JMX e stata effettuata la Garbage Collection per verificare che la memoria

utilizzata si riportasse ai livelli di partenza. Questa verifica ha avuto successo.

Per riferimento si riporta in Figura 5.8 un comportamento anomalo ottenuto

durante le prime verifiche in fase di implementazione: in questo caso alcuni

thread inerenti la comunicazione FTP rimanevano attivi poiche la libreria

prevedeva il loro riutilizzo risparmiando sui tempi di connessione e login al

server remoto. Questa funzionalita non veniva sfruttata portando alla crea-

zione di un nuovo thread ad ogni richiesta. Come si puo osservare i thread

crescono linearmente, portando in breve tempo alla saturazione delle risorse

sia sul nodo in esame che sul server FTP.

Figura 5.8: Esempio di mancato rilascio delle risorse.

Page 55: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Capitolo 6

Conclusioni

La realizzazione di un prototipo del sistema richiesto e stata completata ed

il suo funzionamento e stato verificato con una moltitudine di configurazio-

ni delle quali in questo documento sono state riportate solo quelle ritenute

piu significative. Gli obiettivi iniziali sono stati soddisfatti sia in termini

di funzionalita che di robustezza, purtroppo il tempo a disposizione non ha

permesso di focalizzare l’attenzione sulla ricerca di performance elevate, esse

comunque risultano adeguate.

Il lavoro di tesi si e protratto per circa cinque mesi buona parte dei quali

dedicati alla progettazione e implementazione. Il prototipo realizzato - per

darne una quantificazione numerica - consiste in circa mille righe di docu-

menti XML piu altre sei mila di codice Java. Il codice e stato distribuito

in 20 packages contenenti un totale di 82 classi. Con tale organizzazione

del codice si e cercato di osservare alcune prassi consolidate sulla stesura di

codice leggibile e manutenibile[40].

A livello soggettivo l’esperienza e stata altamente positiva, l’ambiente di Ri-

cerca e Sviluppo e l’ideale per venire a contatto con idee innovative (ma anche

con metodologie piu affermate) riguardo lo sviluppo software, rappresentan-

Page 56: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Conclusioni 48

do un ulteriore avanzamento nella formazione personale e professionale. La

liberta data in fase di progettazione ed implementazione ha portato ad un

elevato grado di soddisfazione (ed affezione) riguardo il prototipo realizzato

ed ha fornito la motivazione per uno studio approfondito ed accurato delle

tecnologie coinvolte nella realizzazione.

Il prototipo realizzato e completamente disgiunto dai prodotti commerciali

di Esteco S.p.A. e al momento della stesura di questa tesi e visto come un

prodotto della ricerca teso a valutare sia la fattibilita di un tale sistema sia

il possibile impatto delle conoscenze acquisite sulle tecnologie utilizzate in

ambiti diversi da quello di questa tesi.

Page 57: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

Bibliografia

[1] G. Hohpe e B. Woolf, Enterprise Integration Patterns: Designing,

Building, and Deploying Messaging Solutions. Boston, MA, USA:

Addison-Wesley Longman Publishing Co. Inc., 2003.

[2] Oracle, Java(TM) Platform, Standard Edition 7 API Specification.

indirizzo: http://docs.oracle.com/javase/7/docs/api/.

[3] The Apache Software Foundation, ActiveMQ 5.9.0 API. indirizzo:

http://activemq.apache.org/maven/5.9.0/apidocs/index.html.

[4] T. Kosar e M. Livny, “Stork: making data placement a first class ci-

tizen in the grid”, in Proceedings of the 24th International Conference

on Distributed Computing Systems (ICDCS’04), ser. ICDCS ’04, Wa-

shington, DC, USA: IEEE Computer Society, 2004, pp. 342–349. in-

dirizzo: http://research.cs.wisc.edu/htcondor/doc/stork-

icdcs2004.pdf.

[5] B. Cohen, The bittorrent protocol specification, ott. 2013. indirizzo:

http://www.bittorrent.org/beps/bep_0003.html.

[6] The Apache Software Foundation, Apache Hadoop 2.2.0. indirizzo:

http://hadoop.apache.org/docs/r2.2.0/.

[7] J. Rehn, “Phedex high-throughput data transfer management system”,

in Proceedings of CHEP06, Mumbai, India, 2006.

Page 58: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

BIBLIOGRAFIA 50

[8] J. Dean e S. Ghemawat, “Mapreduce: simplified data processing on

large clusters”, in Proceedings of the 6th Conference on Symposium on

Opearting Systems Design & Implementation - Volume 6, ser. OSDI’04,

San Francisco, CA: USENIX Association, 2004, pp. 10–10.

[9] T. White, Hadoop: The Definitive Guide, 1st. 2009, pp. 241–241.

[10] K. Birman e T. Joseph, “Exploiting virtual synchrony in distributed

systems”, SIGOPS Oper. Syst. Rev., vol. 21, n. 5, pp. 123–138, nov.

1987.

[11] G. Hohpe, Programming without a call stack event-driven architectures,

2006. indirizzo: http://eaipatterns.com/docs/EDA.pdf.

[12] O. Etzion, “Towards an event-driven architecture: an infrastructure for

event processing position paper”, in Proceedings of the First Internatio-

nal Conference on Rules and Rule Markup Languages for the Semantic

Web, ser. RuleML’05, Galway, Ireland: Springer-Verlag, 2005, pp. 1–7.

[13] G. Muhl, L. Fiege e P. Pietzuch, Distributed Event-Based Systems.

Secaucus, NJ, USA: Springer-Verlag New York, Inc., 2006.

[14] L. Jellema e L. Dikmans, Oracle SOA Suite 11G Handbook, 1a ed. New

York, NY, USA: McGraw-Hill, Inc., 2010, pp. 271–300.

[15] M. Fisher, J. Partner, M. Bogoevici e I. Fuld, Spring Integration In

Action. Shelter island, NY: Manning, 2012.

[16] M. Fisher, M. Bogoevici, I. Fuld et al., Spring integration reference

manual. indirizzo: http://docs.spring.io/spring-integration/

docs/3.0.0.RELEASE/reference/html/.

[17] MuleSoft Inc., Mule documentation. indirizzo: http://www.mulesoft.

org/documentation/display/current/Home.

[18] C. Ibsen e J. Anstey, Camel in Action, 1st. Greenwich, CT, USA:

Manning Publications Co., 2010.

Page 59: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

BIBLIOGRAFIA 51

[19] The Apache Software Foundation, Apache camel documentation.

indirizzo: http://camel.apache.org/documentation.html.

[20] T. Bray, J. Paoli, C. M. Sperberg-McQueen, E. Maler e F. Yergeau,

Extensible markup language (xml) 1.0 (fifth edition), World Wide Web

Consortium, Recommendation REC-xml-20081126, 2008.

[21] M. Fowler. (gen. 2004). Inversion of Control Containers and the De-

pendency Injection pattern, indirizzo: http://martinfowler.com/

articles/injection.html.

[22] T. Mueller, H2 database engine. indirizzo: http://www.h2database.

com/html/main.html.

[23] D. Crockford, “The application/json media type for javascript object

notation (json)”, IETF, RFC 4627, lug. 2006.

[24] E. W. Dijkstra, “A note on two problems in connexion with graphs”,

NUMERISCHE MATHEMATIK, vol. 1, n. 1, pp. 269–271, 1959.

[25] P. Leach, M. Mealling e R. Salz. (2005). Rfc 4122: a universally unique

identifier (uuid) urn namespace, indirizzo: http://www.ietf.org/

rfc/rfc4122.txt.

[26] E. Gamma, R. Helm, R. Johnson e J. Vlissides, Design Patterns:

Elements of Reusable Object-oriented Software. Boston, MA, USA:

Addison-Wesley Longman Publishing Co., Inc., 1995.

[27] Proxmox Server Solutions GmbH, Proxmox virtual environment.

indirizzo: http://www.proxmox.com/.

[28] The Apache Software Foundation, �using apache activemq - how do

distributed queues work�. indirizzo: http://activemq.apache.org/

how-do-distributed-queues-work.html.

[29] Intalio, Inc., Jetty : the definitive reference. indirizzo: http://www.

eclipse.org/jetty/documentation/current/.

Page 60: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

BIBLIOGRAFIA 52

[30] The Apache Software Foundation, The apache ftpserver documenta-

tion. indirizzo: http : / / mina . apache . org / ftpserver - project /

documentation.html.

[31] Oracle Corporation, Jsr 3: javatm management extensions (jmxtm)

specification. indirizzo: https://www.jcp.org/en/jsr/detail?id=3.

[32] R. Huß, Jolokia - reference documentation. indirizzo: http://www.

jolokia.org/reference/html/index.html.

[33] R. H. Inc., Hawtio documentation. indirizzo: http : / / hawt . io /

configuration/index.html.

[34] W. M. P. v. d. Aalst, A. Adriansyah, A. K. A. d. Medeiros et al.,

“Process mining manifesto”, in BPM 2011 Workshops, Part I, vol. 99,

Springer-Verlag, 2012, pp. 169–194. indirizzo: http://www.win.tue.

nl/ieeetfpm/doku.php?id=shared:process_mining_manifesto.

[35] C. Lonvick, The bsd syslog protocol, United States, 2001.

[36] The Apache Software Foundation, Class syslogappender - javadoc api.

indirizzo: http://logging.apache.org/log4j/1.2/apidocs/org/

apache/log4j/net/SyslogAppender.html.

[37] ——, Class syslogappender - javadoc api. indirizzo: http://logging.

apache . org / log4j / 1 . 2 / apidocs / org / apache / log4j / net /

SyslogAppender.html.

[38] The Graphviz Open Source Team, Graphviz - The DOT Language.

indirizzo: http://www.graphviz.org/doc/info/lang.html.

[39] Oracle Corporation, The JConsole Java Management Extensions

(JMX) compliant monitoring tool. indirizzo: http://docs.oracle.

com/javase/7/docs/technotes/guides/management/jconsole.

html.

Page 61: Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per ambienti di esecuzione distribuita

BIBLIOGRAFIA 53

[40] R. C. Martin, Clean Code: A Handbook of Agile Software Craftsman-

ship, 1a ed. Upper Saddle River, NJ, USA: Prentice Hall PTR,

2008.