Professional Documents
Culture Documents
|
± !"#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
r
%
&D ö #p # "p
c gi trӏ:
9
Ä
9
9
Ä
r
r
'
&± p)"
*
./@"p+
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
00
22.3 ö U
6)V D
0
5 D
0
|p |
""##!
0$
|p # 7
""##!
0%
|p # 7
""##!
0'
|p # 7
""##!
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: "
0-
89: "
1
8;p !, !"
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.
8<"V !"
8 V =p !,
$
8 V =p !,
%
!
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
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
(
? @" #!
ĐӇ 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
?
?
r
r
-
? <"V
Giҧ code đӇ tìm successor cӫa mӝt đӏnh danh
$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"
?
?
[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"
$'
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
$*
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.