Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

1 Chord - Stabilization Λίλλης Κώστας Γεωργούλας Κώστας.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "1 Chord - Stabilization Λίλλης Κώστας Γεωργούλας Κώστας."— Μεταγράφημα παρουσίασης:

1 1 Chord - Stabilization Λίλλης Κώστας Γεωργούλας Κώστας

2 2 Γενικά To Chord θα πρέπει να μπορεί να διαχειρίζεται ταυτόχρονα joins κόμβων. Αυτό είναι δύσκολο να γίνει με την «αρχική» διαδικασία join. Stabilization.

3 3 Stabilization Διατηρεί ενημερωμένους τους δείκτες successor και predecessor κάθε κόμβου. Χρησιμοποιούνται  Για να γίνονται σωστά οι αναζητήσεις.  Για ενημέρωση των finger tables

4 4 Stabilization Αν ταυτόχρονα joins έχουν επηρεάσει κάποια περιοχή του Chord και δεν έχει τελειώσει το stabilization:  Τα finger tables είναι σωστά άρα η αναζήτηση γίνεται σωστά σε O(logN).  Οι successor δείκτες είναι σωστοί αλλά τα finger tables όχι οπότε η αναζήτηση είναι σωστή αλλά αργή.  Δεν είναι σωστοί ούτε οι δείκτες ούτε τα finger tables ή δεν έχουν μεταφερθεί τα κλειδιά οπότε η αναζήτηση αποτυγχάνει.

5 5 Join Όταν ένας νέος κόμβος n θέλει να μπει στο Chord καλεί την n.join(n’) όπου n’ ένας γνωστός κόμβος. Με αυτόν τον τρόπο ο n μαθαίνει το successor του. n.join(n’) predecessor = nil; successor = n’.find_succesor(n );

6 6 Stabilization Κάθε κόμβος καλεί περιοδικά τη stabilize.  Ελέγχει αν πρέπει να αλλάξει ο successor του κόμβου.  Ενημερώνει το νέο successor για την ύπαρξη του με την κλήση της notify. n.stabilize() x = successor.predecessor; if(x  (n, successor)) successor = x; successor.notify(n); n.notify(n’) if (predecessor is nil or n’  (predecessor, n)) predecessor = n’;

7 7 Παράδειγμα - n.join npnp nsns n p.successor = n s n s.predecessor = n p n n.predecessor = nil n.successor = n s

8 8 Παράδειγμα – n.stabilize npnp nsns n p.successor = n s n s.predecessor = n p n n.predecessor = nil n.successor = n s n s.predecessor = n n s.notify(n)

9 9 Παράδειγμα - n p.stabilize npnp nsns n p.successor = n s n s.predecessor = n n n.predecessor = nil n.successor = n s n p.stabilize() n p.successor = n

10 10 Παράδειγμα - n p.stabilize npnp nsns n p.successor = n n s.predecessor = n n n.predecessor = nil n.successor = n s n.notify(n p ) n.predecessor = n p n.successor = n s

11 11 Fix fingers Τα finger tables των νέων κόμβών δεν ενημερώνονται άμεσα με την εισαγωγή τους (αναζήτηση και find_predecessor είναι αργή). Για αυτό κάθε κόμβος περιοδικά καλεί την fix_fingers. n.fix_fingers() i = random_index > 1 into finger[]; finger[i].node = find_successor(finger[i].start);

12 12 Stabilization Τα προβλήματα που δημιουργούνται από τα ταυτόχρονα join είναι προσωρινά: Αν ένας κόμβος μπορεί να απαντήσει σε ένα αίτημα, μπορεί πάντα να το κάνει.  Αν ένας κόμβος μπορεί μια φορά να βρει έναν άλλον μέσω successors θα μπορεί πάντα να το κάνει.

13 13 Stabilization Κάποια στιγμή μετά το τελευταίο join όλοι οι successors θα είναι σωστοί.  Έστω ότι δύο κόμβοι θεωρούν ως successor τον κόμβο s. Και οι δύο θα κάνουν notify τον s ο οποίος θα επιλέξει για predecessor του τον κοντινότερο. Ο πιο απομακρυσμένος μέσω stabilize θα μάθει έναν καλύτερο successor από τον s.  Κάποια στιγμή αυτή η διαδικασία θα τερματίσει σε μία κατάσταση όπου κάθε κόμβος θα είναι successor ενός μόνο κόμβου.

14 14 Stabilization Αν σε ένα σταθεροποιημένο δίκτυο με Ν κόμβους μπουν μέχρι Ν νέοι κόμβοι χωρίς ενημερωμένα finger tables, τότε οι αναζητήσεις, με μεγάλη πιθανότητα, γίνονται σε O(logN) βήματα.  Ένας «παλιός» κόμβος μπορεί να φθάσει «κοντά» στο στόχο της αναζήτησης μέσω των finger του και μετά τα joins.  Η αναζήτηση επηρεάζεται μόνο όταν γίνουν πολλά joins ανάμεσα στον «παλιό» predecessor και successor του στόχου της αναζήτησης.

15 15 Παράδειγμα αναζήτησης startInt.succ [1,2) [2,4) [4,0) startInt.succ [2,3) [3,5) [5,1) startInt.succ [4,5) [5,7) [7,3) Lookup(7)

16 16 ? Ερωτήσεις


Κατέβασμα ppt "1 Chord - Stabilization Λίλλης Κώστας Γεωργούλας Κώστας."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google