高いChurn耐性と検索性能を持つキー順序保存型構造化オーバレイネットワークSuzakuの提案と評価...
-
Upload
kota-abe -
Category
Technology
-
view
182 -
download
0
Transcript of 高いChurn耐性と検索性能を持つキー順序保存型構造化オーバレイネットワークSuzakuの提案と評価...
O(n)
O(log n)
6
+1 N1 12+2 N2 25+4 N4 36+8 N8 50
N0 Finger Table
+2
+4
+8
+1
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N13
N1
N9
N5
7
+1 N1+2 N2+4 N4+8 N8
N0 Finger Table
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N13
N1
N9
N5
N2
N4
N0N8
i i
9
keyMV
148
21
21 33
7 21 33 148 275 399
7 33
275 399
275 399
148 275 399
7 148
7
LEVEL 0
LEVEL 1
LEVEL 2
LEVEL 3
N1001
N210
N301
N4000
N5110
N6111
15
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N13
N1
N9
N5
BFT FFT
+1 N1+2 N2+4 N4+8 N8
N0 FFT
-1 N15-2 N14-4 N12-8 N8
N0 BFT
N13
16
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N1
N9
N5
BFT FFT
+1 N1+2 N2+4 N4+8 N8
N0 FFT
-1 N15-2 N14-4 N12➡N11
-8 N8
N0 BFT
17
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N13
N1
N9
N5
BFT FFT
+1 N1+2 N2+4 N4+8 N8
N0 FFT
-1 N15-2 N14-4 N12-8 N8
N0 BFT
x x
19
N0
N4N12
N8
N14 N2
N10 N6
N15
N3
N11
N7
N13
N1
N9
N5
BFT FFT
+1 N1+2 N2+4 N4+8 N8
N0 FFT
-1 N15-2 N14-4 N12-8 N8
N0 BFT
21
getEnt
N0 (new) N1 N2 N4N7N6N4
FFT[2] FFT[1]
getEnt
getEnt
getEnt
N2
N6
N4
N4
N1
N7
lev0lev0
getEnt
BFT[1]
getEnt
FFT[1]
BFT[1]
BFT[2]
FFT[2]
FFT[1]
FFT[3]
FFT[2]
BFT[2]
N3N5
SuccPred
getEnt
N0 (new) N1 N2 N4N7N6N4
FFT[1]
N2
N4
N1
getEnt
BFT[1]
getEnt
FFT[2]
BFT[2]
N3N5
wait
wait
wait
22
26
00.050.10.150.20.250.3
0 10 20 30 40 50
freq.
# of hops (after insertion)0 2 4 6 8 10 12 14 16 18
# of hops (converged)
Chord#Skip Graph
Suzaku
27
00.20.40.60.81
0 10 20 30 40 50 60 70lookupretryratio
time elapsed since massive deletion (sec)
Chord#Skip Graph
Suzaku
28
02468101214
-64-48-32-16 0 16 32 48 64
#ofhops
dist. to node (Skip Graph)
010203040506070
-64-48-32-16 0 16 32 48 64dist. to node (Chord#)
after insertionconverged
012345678
-64-48-32-16 0 16 32 48 64dist. to node (Suzaku)
after insertionconverged
33
1 c o n s t FFT = 0 , BFT = 1 ;2 // f t [FFT] is FFT, f t [BFT] is BFT3 // f t [FFT][0 ] = successor , f t [BFT][0 ] = predecessor4 var f t [ 2 ] [ ] : Array of {Array of NodeAndKey } ;5 var R : Set o f NodeAndKey ; // reverse pointers6 n . u p d a t e B o t h ( d i r , i , n1 , n2 ) {7 t a b ← f t [ d i r ] ;8 i f ( i = 0 ) n1 ← f t [ d i r ] [ 0 ] ; // succ or pred9 i f ( n1 = n u l l or n1 = n ) {
10 x ← n u l l ; goto n e x t ;11 }12 i f ( d i r = FFT ) {y ← n2 ;} e l s e {y ← f t [ FFT ] [ i ] ; }13 x ← n1 . g e t E n t ( d i r , i , n , y ) ;14 i f ( n1 f a i l e d ) { we omit the detail of this case }15 i f ( i |= 0) change ( tab , i , n1 , t rue ) ; // active update16 i f ( ( d i r = FFT and x ∈ [ n , t a b [ i ] ] ) or17 ( d i r = BFT and x ∈ [ t a b [ i ] , n ] ) ) x ← n u l l ; // circulated18 n e x t :19 i f ( x = n u l l and n2 = n u l l ) re turn ;20 i f ( d i r = FFT ) { n . u p d a t e B o t h ( BFT , i , n2 , x ) ; }21 e l s e { n . u p d a t e B o t h ( FFT , i + 1 , n2 , x ) ; }22 }23 n . updateFFT ( i , n1 ) {24 i f ( i = 0 ) n1 ← f t [ FFT ] [ 0 ] ; // successor25 x ← n1 . g e t E n t ( FFT , i , n , n u l l ) ;26 i f ( n1 f a i l e d ) { we omit the detail of this case }27 i f ( i |= 0) change ( f t [ FFT ] , i , n1 , t rue ) ; // active update28 i f ( x ∈ [ n , f t [ FFT ] [ i ] ] ) { // circulated29 // truncate FFT and BFT to size i30 f o r ( j← i t o f t [ FFT ] . l e n g t h −1) change ( f t [ FFT ] , i , nul l , f a l s e ) ;31 f o r ( j← i t o f t [BFT ] . l e n g t h −1) change ( f t [BFT ] , i , nul l , f a l s e ) ;32 s l e e p (Tft ) ;33 n . updateFFT ( 0 , n u l l ) ;34 } e l s e {35 s l e e p (Tft ) ;36 n . updateFFT ( i + 1 , x ) ;37 }38 }39 n . g e t E n t ( d i r , l e v e l , p , q ) {40 i f ( l e v e l |= 0) {41 change ( f t [1 − d i r ] , l e v e l , p , t rue ) ; // pasv . update 142 }43 i f ( q |= n u l l ) {44 i f ( d i r = BFT) {45 change ( f t [1− d i r ] , l e v e l +1 , q , f a l s e ) ; // pasv . update 246 } e l s e R ← R ∪ {q } ;47 }48 re turn f t [ d i r ] [ l e v e l ] ;49 }50 n . change ( tab , l e v e l , new , a d d t o r e v ) {51 o l d ← t a b [ l e v e l ] ;52 t a b [ l e v e l ] ← new ;53 i f ( a d d t o r e v and new |= n u l l ) R ← R ∪ {new } ;54 i f ( o l d |= n u l l and (FFT and BFT do not contain old ) ) {55 o l d . removeRev ( n ) ;56 }57 }58 n . removeRev ( p ) {59 R ← R \ {p } ;60 }
2 Suzaku: finger table
Fig. 2 Finger table update algorithm of Suzaku.
Skip Graph
4. 2
255
0
30 2000 0 20
3 i
[i, i+ 0.5)
4 Chord#
44 Suzaku 47
0510152025
0 5 10 15 20
#ofhops(ave.)
time elapsed (min)
Chord#Skip Graph
Suzaku
3
Fig. 3 Changes of # of lookup hops.
00.050.10.150.20.250.3
0 10 20 30 40 50
freq.
# of hops (after insertion)0 2 4 6 8 10 12 14 16 18
# of hops (converged)
Chord#Skip Graph
Suzaku
4
Fig. 4 Distribution of lookup hops.
00.20.40.60.81
0 10 20 30 40 50 60 70lookupretryratio
time elapsed since massive deletion (sec)
Chord#Skip Graph
Suzaku
5
Fig. 5 Lookup retry ratio in massive node deletion.
Chord# 51
Suzaku 10
Chord# 8 (= ⌈log2 256⌉) Suzaku
7(= ⌈log2 256⌉ − 1)
Skip Graph 17
Chord# finger table
Suzaku
Chord# Skip Graph
Suzaku
4. 3
256 N0 N255
N32 N96 1
1 N0 N31 N97
N127
1
1
10 5
Chord#
Suzaku Skip Graph
Suzaku Skip Graph
4. 4
127
N0 N63 N65 N127
— 5 —