Sunteți pe pagina 1din 16

P2P Computing

Sisteme P2P
DHT(Distributed Hash Tables)

Chord

Pastry
Aplicatii

Sisteme P2P

Sistem P2P este o retea de calculatoare unde fiecare nod(peer)


are rol de client , server, unitate de stocare si nod intermediar in
drumul de routare a mesajelor de la un nod sursa la destinatie.
Fiecare nod are o lista de vecini pe care ii poate accesa(IP) pentru
a putea ajunge in orice punct al retelei. E important sa se obtina
un echilibru intre numarul de vecini al fiecarui nod si un algoritm
de routare eficient.

Acesta a aparut in 1960 US, odata cu creare ARPANET, o retea de


transfer de fisiere intre centrele de cercetare.
Devine popular in anul 1999 odata cu aparitia programului
Napster(distributie muzica).

In zilele noastre este pe langa distributia fisiere(BitTorrent) , P2P


este folosit in diverse domenii:
-media(Skype)
-altele(Bitcoin)

Sisteme P2P

P2P vs Sisteme Centralizate

-scalabilitate
-distributie uniforma a taskurilor, reducerea fenomenului de
bottlenecking
-manipulare mai buna a exceptiilor
Clasificare sisteme P2P
-structurate, adresare directa folosind un Id unic,Ex: Youtube URL
fiecare obiect poate fi identificat usor, necesita o structura de
stocare
speciala pentru o manipulare eficienta
-nestructurate , cautare folosind termeni cheie, EX: cautarea in
sistem de fisiere
user friendly , dificil sa diferentiam 2 obiecte diferite

DHT(Distributed Hash Tables)

DHT sistem descentralizat distribuit care ofera aceeasi


functionalitate ca si
o structura hash table(functia de lookup)

Hash table
-un sir de elemente (buckets)
-functie de hash mapeaza chei in elementele
din sir
-eficienta
-ofera o buna distributie a cheilor(SHA1)

-hash(x) = x mod 10
-inseram 0,1,4,25,16,19
-observam ca avem astfel o metoda
rapida de cautare a unei chei

DHT(Distributed Hash Tables)

Fiecare obiect si nod au o cheie respectiv un


identificator unic

Fiecare nod e responsabil de unul sau mai


mule hashbucket-uri, pe masura ce alte
noduri sunt adaugate sau eliminate
responsabilitatea se schimba

Nodurile comunica intre ele pentru a


identifica nodul responsabil de stocarea unei
chei

Chord

Foloseste SHA1 ca functie de hash pentru calcularea cheilor


obiectelor si id-urile
nodurilor
-cheile se obtin din aplicarea functiei de hash pe numele
obiectelor, id-urile nodurilor se obtin plin aplicarea aceiasi functii
de hash pe IP-ul acestuia
-cheile au valori pe 160 de biti in practica astfel se reduce
probabilitatea de a obtine coliziuni

Reteaua are o structura virtuala de inel


-fiecare nod tine o legataura catre predecesorul si
succesorul sau
-un nod este responsabil de obiectele(buchet-uri) a caror id
se afla intre el si
predecesorul sau

Chord

Inserarea unui nod intr-un inel chord cu spatiul cheilor memorat


pe 3 biti

nodul 0 retine cheile [5,0]


nodul 0 retine cheile [7,0]
nodul 1 retine cheile [1,1]
nodul 1 retine cheile [1,1]
nodul 4 retine cheile [2,4]
nodul 4 retine cheile [2,4]
nodul 6 retine cheile [5,6]

Chord

Exemplu:
-inseram obiectul Foo cu valoarea 5, hash(Foo) = 2
-recuperam obiectul cu cheia 2 din punctul 1

Simplu dar ineficient.

Chord
Finger table

Tabel de routare cu m elemente, m = numarul de biti al spatiului


cheilor produse de functia de hashing
Pe pozitia i din tabel se afla primul nod care se
afla la distanta de cel putin
pe inel

Nod

Chord
Operatia de cautare
n.find_successor(id)
if (id in (n, successor] )
return successor;
else
n0
=closest_preceding_node(id);
return n0.find_successor(id);

n.closest_preceding_node(id)
for i = m downto 1
if (finger[i] in (n, id))
return finger[i];
return finger[m];

Complexitate O(log n)

Creare unui nod nou


n.create()
predecessor = nil;
successor = n;

n.join(n')
predecessor = nil;
successor = n'.find_successor(n);

Chord
Operatia de initializare finger table
n.init_finger_table()
k = n.find_succesor(n + 1)
for i = 2 t o m
if (k >= i +
)
finger[i] = k
else
finger[i] = n.find_succesor(n +

Complexitate

Chord
Stabilizare
n.stabilize()
x=
successor.predecessor;
if (x in (n, successor))
successor = x;
successor.notify(n);

n.notify(n')
if (predecessor is nil or n in
(predecessor, n))

n.fix_fingers()
next = next + 1;
if (next > m)
next = 1;
finger[next] = find_successor(n +

predecessor = n';

);

Plaxton

Plaxton retea cu structura virtuala de graf, static, cu N


noduri.
Nodurile sunt reprezenatte pe m biti unde m = (log b N)
Cu cat doua noduri au prefixul in comun mai lung cu atat
sunt mai apropiate.

Plaxton
Exemplu algoritm routare

Bibliografie
1.
2.
3.
4.
5.

6.

http://en.wikipedia.org/wiki/Peer-to-peer
http://www.cs.helsinki.fi/u/jakangas/Teaching/P2P/P2P-03-Net+DHTs.pdf
Peer to Peer Computing the Evolution of a Disruptive Technology
http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29
Chord: A Scalable Peer-to-peer Lookup Protocol for Internet Applications
(http://pdos.csail.mit.edu/papers/ton:chord/paper-ton.pdf)
Parallel Algorithms (Chapman & Hall/CRC Numerical Analysis and
Scientific Computing Series)

S-ar putea să vă placă și