Servizio per la ricerca distribuita basato sul
protocollo
Rossi Daniele
193074
Reti L-S 2005
Architettura
Interfaccia per effettuare la ricerca
Area in cui viene mostrato il risultato
WebServer layer
eBiblioServer layer
ChordNode layer
Reti L-S 2005
Architettura
WebServer layer
eBiblioServer layer
ChordNode layer
WebServer basato sul progetto Cassini
Si pone in ascolto sulla porta 80 del nodo locale
Interpreta le richieste provenienti dall’interfaccia Web
Interroga il livello sottostante e fornisce una rappresentazione
del risultato come pagina html
Supporta l’interrogazione a partire dal codice ISBN di un’opera
Si pone in ascolto sulla porta 6001 del nodo locale
Gestisce la replicazione delle informazioni sui nodi della rete
Interroga il livello sottostante per individuare il nodo della rete che
mantiene l’informazione cercata
Supporta l’interrogazione a partire dalla chiave di una risorsa
Implementa il protocollo di rete CHORD
Si pone in ascolto sulla porta 6000
Gestisce bilanciamento di carico, disponibilità e scalabilità
Gestisce join e leave multiplo di nodi
Reti L-S 2005
Introduzione P2P: cos’è?
“Peer-to-peer systems and applications are distributed systems without any
centralized control or hierarchical organization, where the software running at
each node is equivalent in functionality.” [SMK+01]
Usi comuni:
Archiviazione ridondante
Permanenza
Ricerca
Autenticazione
Naming gerarchico
Computazione Distribuita (ad es. [email protected])
Reti L-S 2005
Tipologie di lookup
Lookup centralizzato (Napster)
Architettura ibrida.
Più server centrali risolvono le ricerche.
Search
Publish
Publish
Flooded queries (Gnutella)
Peer to Peer puro non strutturato
Ogni nodo invia ricorsivamente la richiesta
ai propri vicini.
Routed Queries
Architettura pura strutturata.
Ogni peer attua politiche di routing
Reti L-S 2005
Protocollo scalabile per il lookup di chiavi in un sistema peer-to-peer con frequente
arrivo e abbandono di nodi.
Un nodo può entrare o uscire dalla rete in ogni momento
0
7
Ad ogni nodo e risorsa è assegnata una chiave univoca tramite un
algoritmo di consistent hasing
Ogni chiave è mappata in un dato instante su un unico nodo della rete
Load balance
Decentralization
6
2
Scalability
La responsabilità di una chiave può spostarsi da un nodo all’altro
quando i nodi si disconnettono.
Availability
La gestione delle risorse associate alle chiavi è lasciata a protocolli di
livello applicativo
La chiave k viene assegnata al
primo nodo attivo il cui id è uguale
o maggiore all’identificativo k della
chiave. O(N) per il lookup
1
5
3
4
Utilizzo di una tabella di Routing
riduce fino a O(log(N)) il numero di
nodi contattati in un lookup
Reti L-S 2005
Routing : Finger Table
Notazione
Definizione
Finger[k].start
(n+2k-1) mod 2m, 1≤k ≤m
.interval
[finger[k].start,finger[k+1].start)
.node
first node≥n.finger[k].start
successor
the next node on the identifier circle
finger[1].node
predecesor
the previous node on the identifier circle
Ogni nodo ha una forte conoscenza dei
nodi a lui vicini nell‘ anello e una
conoscenza sempre più vaga sui nodi
distanti.
80+25
80+24
L’ i-esima riga della finger table del
nodo n contiene l’identificatore del
nodo che lo segue di almeno 2 (i-1)
posizioni nell’anello
80+23
L’idea è quindi quella di
raddoppiare ad ogni passo la
distanza a cui si cerca il nodo
responsabile di una chiave.
80+22
80+21
80+20
Reti L-S 2005
N80
Multiple Node Join
La Multiple Join NON notifica al resto della rete l’ingresso del nodo n
Ogni nodo esegue periodicamente un protocollo di stabilizzazione per mantenere aggiornato il
proprio successore e predecessore
Stabilize()
Chiede al suo successore, il predecessore
x = (finger[1].node).Find_Predecessor();
if ( x in [ n , finger[1].node )
finger[1].node = x;
(finger[1].node).Notify(n);
Se la rete non è stabilizzata, x potrebbe essere
il nuovo successore. In tal caso aggiorna
l’informazione
Notifica al successore (eventualmente aggiornato)
che n potrebbe essere il suo nuovo predecessore
Notify(n’)
if ( predecessor is null or n’ in [ predecessor , n )
predecessor = n’;
Se non c’è predecessore (es. nodo in
corso di join) o n’ è il nuovo
predecessore, aggiorna l’informazione
Algoritmo Utilizzato nel progetto
Reti L-S 2005
Lookup e fallimento di nodi
Un lookup effettuato prima che la stabilizzazione abbia finito può terminare:
1) Correttamente: tutte le finger table sono ragionevolmente corrette nonostante
il cambiamento dell’anello
2) Correttamente ma dopo molto tempo: le finger tables sono inaccurate ma i nodi
successori sono corretti.
3) Fallendo: l’anello è in uno stato inconsistente al momento del lookup
Gestione di fallimenti multipli
Chord prevede che ogni nodo k mantenga anche una lista
degli O (log(N)) successori.
Se il nodo n si accorge che il suo successore è fallito, lo
sostituisce con la prima entry valida nella sua lista dei
successori.
Ogni nodo è in grado di recuperare dal fallimento degli
r-1 nodi a lui successivi
Reti L-S 2005
TCP – Implementazione ricorsiva
lookup
??
La richiesta di lookup si propaga
lungo il percorso di routing fino ad
individuare il nodo responsabile della
chiave.
Ogni nodo esegue, se necessario, il forward
della richiesta scegliendo il nodo più
opportuno tra quelli presenti nella sua finger
table.
Una volta individuato il successore della
chiave cercata, la risposta viene propagata
in backward
lookup
lookup
PROBLEMA
Sia il nodo di origine, sia i nodi
intermedi rimangono a lungo impegnati
in attesa della risposta
uso di meccanismi sincroni non
bloccanti (?)
Reti L-S 2005
TCP – Implementazione iterativa
La richiesta di lookup non si propaga.
??
Il nodo che deve eseguire il lookup, contatta
iterativamente nodi sempre più prossimi a
quello responsabile della chiave.
L’algoritmo, a livello implementativo, cerca
il predecessore più prossimo del nodo
responsabile della chiave e, una volta
individuato, lo interroga per conoscere il
suo successore (cioè il nodo effettivamente
cercato).
successor
Ogni nodo a cui viene domandato il
predecessore della chiave, restituisce il
nodo che, limitatamente alle informazioni in
suo possesso, pensa che sia il predecessore.
successor
L’algoritmo termina quando il predecessore
restituito nP è tale per cui key appartiene
all’intervallo
predecessor
( key , key.successor ]
Reti L-S 2005
Acquisizione delle risorse
Successore di N
N
Ipotesi di Single Fail
Le risorse associate alle chiavi del nodo N, sono attualmente
allocate sul successore di N
N le richiede al suo successore non appena entra in rete
L’azione di richiesta è a carico del nuovo nodo
Il successore di N già dispone delle risorse replicate
Non è garantita persistenza della informazioni se N e il suo
successore dovessero andare in crash nello stesso momento
Reti L-S 2005
Replicazione
Nuovo successore
N
Le risorse associate alle chiavi del nodo N, vengono replicate sul
nuovo successore
In caso di crash di N il nuovo successore è in grado di rispondere
correttamente
Ipotesi di Single Fail
N
N1
Le risorse associate alle chiavi del nodo N1 sono ora di competenza di N
(precedentemente replicate da N1 su N)
N deve ora replicare le risorse associate alle nuove chiavi di sua
competenza sul suo successore
Reti L-S 2005
Conclusioni finali
Il progetto realizzato
fornisce un esempio di applicazione di ricerca di informazioni su rete distribuita
utilizza un protocollo di rete (CHORD) efficiente e robusto, trattando in particolare gli
aspetti di scalabilità, bilanciamento di carico e disponibilità
introduce un livello superiore al protocollo di rete per trattare la replicazione delle
informazioni distribuite sui nodi
Sviluppi futuri
estensione del protocollo CHORD per gestire il recovery in caso di network partition
miglioramento della replicazione, estendendola al caso di fallimento di più nodi
consecutivi contemporaneamente
ampliamento della interfaccia lato utente e della gestione delle informazioni sui
singoli nodi
Reti L-S 2005
Scarica

presentazione