高いChurn耐性と検索性能を持つキー順序保存型構造化オーバレイネットワークSuzakuの提案と評価...

33
1

Transcript of 高いChurn耐性と検索性能を持つキー順序保存型構造化オーバレイネットワークSuzakuの提案と評価...

1

2

[50, 80)

38

3

4

5

Sucessor=

Predecessor=

N0

N4N12

N8

N14 N2

N10 N6

N15

N3

N11

N7

N13

N1

N9

N5

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

8

Chord#

( ) ⌈log2n⌉

( ) O(n)

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

10

Chord# Skip Graph

( ) ⌈log2n⌉ O(log2n)

( ) O(n) ⌈log2n⌉

11

12

Chord# Skip Graph Suzaku

( ) ⌈log2n⌉ O(log2n) ⌈log2n-1⌉

( ) O(n) ⌈log2n⌉ log2n

13

14

LEVEL 0

LEVEL 1

LEVEL 2

LEVEL 3

N1 N2 N3 N4 N5 N6

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

18

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

pp

p p

20

N0 N8FFT[3]

Reverse Pointer

N4 FFT[2]

N7

N0

N8

FFT[3]

!

N4

FFT[2]

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

23

24

25

0510152025

0 5 10 15 20

#ofhops(ave.)

time elapsed (min)

Chord#Skip Graph

Suzaku

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

29

30

Chord# Skip Graph Suzaku

( ) ⌈log2n⌉ O(log2n) ⌈log2n-1⌉

( ) O(n)

⌈log2n⌉ log2n

31

Chord# Skip Graph Suzaku

( ) ⌈log

2n⌉ O(log

2n) ⌈log

2n-1⌉

( ) O(n) ⌈log

2n⌉ log

2n

😥

32

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 —