You are on page 1of 49

|p |   



    




   

| 

  



±  !"#p # 

þ þ

þ
þ
þ
(khóa) þÄ þ
þ þ þÄ þ
þ þ
þ
þ þ

þ




±  !"#p # 
Dùng đӇ lưu trӳ mӝt tұp các khoá: k1, k2,«
Khoá ki đưӧc lưu trӳ ӣ vӏ trí h(ki) cӫa mҧng H, h
là hàm băm.
Các khoá có cùng giá trӏ băm vӟi khoá ki sӁ đưӧc
lưu trӳ trong mӝt danh sách liên kӃt đưӧc quҧn lý
bӣi phҫn tӱ H(h(ki)) (hiӋn tưӧng xung đӝt).
Hàm băm là mӝt hàm biӃn đәi khoá k sang mӝt
sӕ nguyên là vӏ trí trong mҧng H.
VD: h(³Ha Noi´)= 16
Thích hӧp vӟi các thao tác chèn, tìm kiӃm, xoá
mӝt khoá.


$
&D ö  #p #  "p

Úhóa k sӁ đưӧc lưu trӳ tҥi vӏ trí  (M


kích thưӟc mҧng).

r        


hêm phҫn tӱ x = 9 vào mҧng


9 mod  = .


%
&D ö  #p #  "p

c gi trӏ: 


9

9
9

Ä

r        
r         


'
&±  p)" 

iiҧ sӱ thêm  vào mҧng:


r        
  

+  phҧi lưu vào vӏ trí . uy nhiên vӏ trí này đã


có chӭa 9.

=> iiҧi quyӃt đөng đӝ.



(
&±  +  "+ !,#p # 

ë rong thӵc tӃ có nhiӅu trưӡng hӧp có nhiӅu


hơn Ä phҫn tӱ sӁ đưӧc ³băm´ vào cùng  vӏ
trí.

ë iӇn nhiên phҫn tӱ đưӧc ³băm´ đҫu tiên sӁ


chiӃm lĩnh vӏ trí đó
c c phҫn tӱ sau cҫn phҧi
đưӧc lưu vào c c vӏ trí trӕng kh c sao cho
vҩn đӅ truy xuҩt và tìm kiӃm phҧi dӉ dàng.


*
./@"p+  

ë àm băm cҫn đưӧc chӑn sao cho:


ë c xuҩt phân bӕ kho là đӅu nhau.
ë Ӊ dàng tính to n thao t c.

hông thưӡng
hàm băm sӱ dөng c c sӕ
nguyên tӕ (vì x c suҩt ngүu nhiên phân bӕ
c c sӕ nguyên tӕ là đӅu nhҩt).


-
2.3 ö  Ô !"4 V "V

ë  tưӣng: ³
c phҫn tӱ băm vào trùng vӏ
trí k đưӧc nӕi vào  nӕi kӃt´ tҥi vӏ trí đó.
r   
àm băm:
 
F(k) = k mod 
 hêm




01
5 D 

 Ú có nhiӅu khuyӃt điӇm:


ë Úhi có qu nhiӅu kho vào cùng vӏ trí

Ú thì tҥi vӏ trí đó sӁ O  @ => ăng chi


phí tìm kiӃm.
ë
c  O còn dư nhiӅu => lãng phí vӅ
thӡi gian tìm kiӃm và không gian lưu trӳ.


00
22.3 ö U
6)V D 

ë  tưӣng: ³NӃu có  khóa bӏ băm vào vӏ trí


đã có phҫn tӱ thì nó sӁ đưӧc chèn vào ô trӕng
gҫn nhҩt theo phía bên phҧi (hoһc tr i)´.
r   
àm băm:
   
F(k) = k mod 
hêm




0
5 D 

ë hương ph p này dӉ thӵc hiӋn.


ë NӃu có nhiӅu phҫn tӱ băm trùng nhau thì
đһc tính bҧng băm bӏ mҩt đi.
ë rong trưӡng hӧp xҩu nhҩt tìm kiӃm trên
bҧng băm thành tìm kiӃm tuyӃn tính trên
mҧng.


0
|p |  

""# #!




0$
|p # 7  
""# #!



0%
|p # 7  
""# #!


DHTs là mӝt lӟp (class) cӫa hӋ thӕng phân tán


có cҩu trúc, cung cҩp khҧ năng tìm kiӃm
(lookup) tương tӵ như bҧng hash:
Là mӝt dҥng cӫa cҩu trúc bҧng băm thông thưӡng.
Cһp (khóa - key, giá trӏ - value) đưӧc lưu trӳ ӣ DHTs
và bҩt kì node nào cũng có thӇ truy vҩn lҩy value mӝt
cách hiӋu quҧ thông qua key đã cho.
Hӛ các 3 thao tác: chèn, tìm kiӃm, xoá các cһp (key,
value).


0'
|p # 7  
""# #!


DHTs là cơ sӣ đӇ xây dӵng các hӋ thӕng ӭng dөng phân


tán như distributed file systems, peer-to-peer file sharing
và content distribution systems. Bên cҥnh đó là các hӋ
thӕng web caching, multicast, anycast, domain name
services, và instant messaging.
Các hӋ thӕng ӭng dөng sӱ dөng DHTs đáng chú ý có
BitTorrent, eDonkey «.


0(

89: "  

Không gian đӏa chӍ cӫa DHT là mӝt tұp gӗm nhiӅu
sӕ nguyên, vd: tӯ 0 « 23-1, 0 « 2160-1, v.v«.

 

 

 


0*

89: "  

Các Node và dӳ liӋu (data items) đưӧc ánh xҥ


vào cùng mӝt không gian đӏa chӍ.
Sӱ dөng hàm băm bҧo mұt SHA-1 (sinh ra mӝt sӕ
160 bit).
Đҫu vào cӫa hàm băm
Đӏa chӍ IP cӫa mӝt Node.
Tên các files dӳ liӋu.
Hoһc nӝi dung cӫa dӳ liӋu.


0-

89: "  

Trong hình vӁ:


Không gian đӏa chӍ: 0«65535 (216 -1)
Đưӧc phân hoҥch cho 8 Node


1

8;p !, !"

Đӏa chӍ IP cӫa mӝt node đưӧc băm đӇ xác đӏnh vӏ


trí cӫa nó trong bҧng băm.
NodeID = SHA-1(Node IP Address)
Mӛi file dӳ liӋu đưӧc gán mӝt sӕ đӏnh danh (Key)
Key = SHA-1(tên file) hoһc SHA-1(nӝi dung file).
Key là giá trӏ duy nhҩt trong không gian đӏa chӍ.
Mӛi node quҧn lý mӝt khoҧng giá trӏ trong không
gian đӏa chӍ.
Dӳ liӋu đưӧc lưu trӳ ӣ node và đưӧc quҧn lý khoá
cӫa dӳ liӋu.


0

8;p !, !"

Dӳ liӋu có thӇ đưӧc lưu trӳ trӵc tiӃp hoһc gián tiӃp
thông qua đӏa chӍ IP.

(a) ưu trӳ trӵc tiӃp (b) ưu trӳ gi n tiӃp




8<"V !"

Thông điӋp tìm kiӃm khoá K sӁ đưӧc chuyӇn đi lҫn


lưӧt đӃn trong node trong DHT cho đӃn khi gһp
node quҧn lý khoá K.




8 V =p !,

Mӝt node ra nhұp (join) hoһc rӡi bӓ (leave) hӋ


thӕng đưӧc quҧn lý như thӃ nào?
Node Join: 4 bưӟc
Step 1: liên lҥc vӟi mӝt node tӗn tҥi trong DHT.
Step 2: xác đӏnh khoҧng đӏa chӍ mà nó quҧn lý.
Step 3: cұp nhұt lҥi thông tin phөc vө cho viӋc tìm kiӃm.
Step 4: chuyӇn tҩt cҧ các cһp (Key, Value) thuӝc quyӅn
quҧn lý tӯ node trưӟc vӅ nó.


$

8 V =p !,

Node Leave: 2 bưӟc


Step 2: chuyӇn các cһp (Key, Value) cӫa nó vӅ node
trưӟc nó.
Step 2: cұp nhұt lҥi thông tin phөc vө cho viӋc tìm kiӃm.


%
    !


O
f. toica
. Morris
. Úarger
F. Úaashoek
and . Balakrishnan.
O"
#
   $O $O  %
O &O O %%  
. fn
roceedings of the Ä 
M fi
MM
onference
p 9
Ä .


'
    








r 

 



 



  


(
    
Là mӝt trong nhiӅu giao thӭc sӱ dөng DHTs (các
giao thӭc sӱ dөng DHTs khác như CAN, Pastry,
Viceroy«).
HӋ thӕng tìm kiӃm và lưu trӳ thông tin P2P.
Cho mӝt khoá (data item), nó ánh xҥ khoá đó vào
mӝt node.
Sӱ dөng cùng mӝt hàm băm đӇ gán các khoá cho
các node.
Giҧi quyӃt đưӧc vҩn đӅ tìm kiӃm khoá trong mӝt tұp
các node phân tán.
Duy trì thông tin tìm đưӡng khi mӝt node tham gia và
rӡi hӋ thӕng.

*
8 #   ±
Gán cho mӛi node và mӛi khoá mӝt sӕ đӏnh danh
m ± bit.
Sӱ dөng hàm băm SHA-1.
Đӏnh danh cӫa mӝt node là giá trӏ băm đӏa chӍ IP
cӫa node đó.
ID(Node) = SHA-1(IP Address)
Đӏnh danh cӫa mӝt mөc dӳ liӋu (Key) là giá trӏ
băm cӫa tên hoһc nӝi dung dӳ liӋu (phө thuӝc
vào ӭng dөng).
ID(Key) = SHA-1(tên file)
ID(key) = SHA-1(nӝi dung file)


-
89: "  
Trong mӝt không gian đӏnh danh m-bit sӁ có 2m
đӏnh danh.
Các đӏnh danh đưӧc xӃp theo thӭ tӵ vòng tròn
m
modulo 2 .
Vòng tròn đӏnh danh đưӧc gӑi là vòng tròn Chord.
Cһp (k,v) đưӧc lưu ӣ node đҫu tiên có đӏnh danh
lӟn hơn hoһc bҵng key trong không gian đӏnh
danh.
Node như vұy đưӧc gӑi là successor k, đưӧc ký
hiӋu là successor(k).


1
83 

Đӏnh danh
? 



r h hh 
 

òng tròn
h hh       h hh
 
đӏnh danh
 


0
8 >"  
7
Khi node n join vào mҥng, các khoá do n quҧn lý
đã đưӧc gán cho successor cӫa n bay giӡ sӁ
đưӧc gán trҧ lҥi cho n 






r 

 



 



  



8 >"  
7
Khi node n rӡi mҥng thì tҩt cҧ khoá do nó quҧn
lý sӁ đưӧc chuyӇn cho successor cӫa nó.




r 

 



  



  



8< "V  "p
Mӛi node chӍ biӃt successor cӫa nó trong vòng
tròn đӏnh danh, như vұy có thӇ duyӋt qua các
node theo thư tӵ tuyӃn tính.
Các câu truy vҩn vӟi mӝt đӏnh danh cho trưӟc
đưӧc chuyӇn quanh vòng tròn thông qua các
con trӓ successor cho đӃn khi gһo node chӭa
khoá cҫn tìm.


$
8<"V "p

Node gӱi câu truy vҩn h hh  


vӟi key = 

r h hh 

 

  
h hh  

  h hh  


%
8<"V "p
Đoҥn giҧ Code đӇ tìm successor:
¿¿ sk ode n o d he successor o id
n.find_successor(id)
( (id ` (n, successorw)
O  OsuccessorŽ

¿¿ orwrd he uery roud he crcle
O  Osuccessor.d_successor(id)Ž


'
8< "V   

Thông tin bә sung này không phҧi là bҧn chҩt


cho vҩn đӅ tính đúng đҳn.


(
 ? @" #!
ĐӇ tăng tӕc đӝ tìm kiӃm, Chord duy trì thêm
thông tin tìm đưӡng.
Mӛi n duy trì mӝt bҧng tìm đưӡng gӗm m hàng
(m là sӕ bit biӇu diӉn vòng tròn đӏnh danh), đưӧc
gӑi là er le.
Hàng thӭ i trong bҧng er le cӫa node n
xác đӏnhi-1node đҫu tiên s theo sau node n bӣi ít
nhҩt là 2 trong vòng tròn đӏnh danh.
i-1
s = successor(n+2 )
s đưӧc gӑi là er h΁  cӫa node , và đưӧc ký
hiӋu là n.er()
Finger đҫu tiên cӫa node n là successor trӵc tiӃp
cӫa n trong vòng tròn.

*
? <"V  
(
O
m = 3, mӛi node có 3 hàng
?

For. start Int. Succ.


r 
r  
?
r    
For. start Int. Succ.  r  r 
r  r r
 r r r r
   
 

 

?

  For. start Int. Succ. 

r   

   
   r


-
? <"V  
Giҧ code đӇ tìm successor cӫa mӝt đӏnh danh

Find id¶s successor by finding the


immediate predecessor of the id

alk clockwise to find the


node which precedes id
and whose successor succeeds id

tart with the mth finger of node n


ee if it comes between node n and
the id
if not
check the mëth
finger until we find one wich does.
his is the closest node preceding id
among all the fingers of n


$1
? <"V  
id=5
?

n=7
 ? 
?
 [1,2) 
 [2,4) 


 ?   [4,0)
r r r
  r r 


   


 


r





  ?


 ?  
?

h hh 
  
 

 ?       

  
  
 r
  

 ü
r r  r 

r







(logN)

$0
 A" 
Các công viӋc đưӧc thӵc hiӋn
Khӣi tҥo predecessor và bҧng finger table cӫa node n.
Cұp nhұt lҥi bҧng finger table và predecessor cӫa các
node tӗn tҥi khi có thêm node n.
ChuyӇn các khoá thích hӧp cho node n quҧn lý.


$
B!" A" 
Úhӣi tҥo bҧng fingers và predecessor ?


 ? 
find_successor();  [1,2) 
?

 [2,4) 

 ?   ü [4,0) 
r r r ü
  r r 


   


 


r





  ?


 ?  
ü ü 
?

     
  

 ?  ü


   


  

r

  


 


 


$
 A" 

p nht bҧng fingers cӫa c c node trong mҥng ?


 ? 
?
 [1,2) 
 [2,4) 

 ?   ü [4,0) 

r r r ü
  r r 


   


 


r





  ?


 ?  
ü ü 
?

     
  

 ?  ü


  




  

r

  
= find_predecessor(nëÄië)


  i = 
= find_predecessor()


 
(log N) Ä
i = Ä
= find_predecessor()
i = 
= find_predecessor()


$$
 A" 

huyӇn c c Úeys ?


 ? 
?
 [1,2) 
 [2,4) 

 ?   ü [4,0) 
r r r ü
  r r 


   


 


r





  ?


 ?  
ü ü 
?

     
  

 ?  ü


  




  

r

  


 


 


$%
? A" 

Pseudocode for the node join operation


$'
 3#"!"C"
Stabilization
Đҧm bҧo tính đúng đҳn và hiӋu quҧ.
Đҧm bҧo tính cұp nhұt cho các nodeµs successor.
Sӱ dөng successor pointers đӇ đҧm bҧo tính đúng
đҳn cӫa các bҧn ghi trong các bҧng finger.


$(
 3#"!"C"
Giҧ code cho quá trình stabilization

¨oin does not make the


rest of the network aware of n

Every node runs stabilize


periodically
to verify the
successor

Node n asks its successor for


the successor¶s predecessor x.
ee if x should be n¶s successor
instead. (happens if x recently
joined the system)

Notify n¶s successor of n¶s


exist. uccessor changes
its predecessor to n if it
knows no closer
predecessor than n.

Use successor pointers to


update finger tables.


$*
p
I. Stoica, R. Morris, D. Karger, F. Kaashoek, and
H. Balakrishnan. Chord: A scalable Peer-To-
Peer lookup service for internet applications. In
Proceedings of the 2001 ACM SIGCOMM
Conference, pages 149±160, 2001.

R. Steinmetz, K. Wehrle (Edt.): "Peer-to-Peer


Systems and Applications", LNCS 3485,
Springer, Chapter 7-8, 2005.
http://www.wikipedia.org
http://www.google.com

$-

You might also like