ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ II «υπό την παρουσία σφαλμάτων» Αντωνέλλης Δημήτριος Α.Μ. 2812 antonel@ceid.upatras.gr ΠΑΤΡΑ ΙΟΥΛΙΟΣ 2007
Outline Μέρος Α Αυτό-σταθεροποιούμενος αλγόριθμος για συγχρονισμό υπό την παρουσία Βυζαντινών σφαλμάτων Μέρος Β Αλγόριθμος για συγχρονισμό ανεκτικός σε σφάλματα που απευθύνεται σε ασύρματα δίκτυα αισθητήρων οργανωμένα σε clusters
Το πρόβλημα Υπάρχουν αποδοτικοί αυτόσταθεροποιούμενοι αλγόριθμοι για συγχρονισμό Υπάρχουν επίσης αποδοτικοί αλγόριθμοι που είναι ανεκτικοί σε Βυζαντινά σφάλματα Δεν υπάρχει όμως αποδοτικός αλγόριθμος για συγχρονισμό που να είναι αυτόσταθεροποιούμενος και παράλληλα ανεκτικός σε Βυζαντινά σφάλματα.
Αυτό-σταθεροποίηση Ένας αλγόριθμος ονομάζεται αυτόσταθεροποιούμενος (self-stabilizing algorithm) εάν ξεκινώντας από μία αυθαίρετη κατάσταση, είναι εγγυημένο ότι θα συγκλίνει σε μία έγκυρη κατάσταση και στην συνέχεια θα παραμείνει σε ένα σύνολο έγκυρων καταστάσεων.
Οαλγόριθμος Algorithm PBSS-Clock-Synch at "pulse" event begin 1. Clock := ET; 2. Revoke possible other instances of PBSS-Clock-Synch and clear all data structures besides ET and Clock; 3. Wait until σ(1+p) time units have elapsed since pulse; 4. Νext_ET := BYZ_CONSENSUS((ET+Cycle) mod M, σ); 5. Clock := (Clock+Next_ET - (ET+Cycle)) mod M; 6. ET := Next_ET; end
παλμών Κόμβος 1 παλμών Κόμβος 2 παλμών Κόμβος 3 παλμών Κόμβος 4 Εκτελείται ένας άλλος αυτό-σταθεροποιούμενος αλγόριθμος για τον συγχρονισμό των παλμών υπό την παρουσία το πολύ f Βυζαντινών κόμβων (n>=3f+1)
παλμών Κόμβος 2 παλμών Κόμβος 3 παλμών Κόμβος 4 Περιστασιακά δημιουργούνται συγχρονισμένοι παλμοί σε κάθε κόμβο (ιδανικά κάθε Cycle)
Clock2 :=ET Clock1 :=ET Clock3 :=ET Clock4 :=ET Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 1. Clock := ET; // ΕΤ= συμφωνημένη χρον. στιγμή για τον επόμενο παλμό
Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 2. Revoke possible other instances of PBSS-Clock-Synch and clear all data structures besides ET and Clock;
Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 3. Wait until σ(1+p) time units have elapsed since pulse; // σ = άνω όριο στον πραγματικό χρόνο μεταξύ των στιγμών που γίνονται οι παλμοί στους κόμβους
Next_ET Next_ET Next_ET Next_ET Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 4. Νext_ET := BYZ_CONSENSUS((ET+Cycle) mod M, σ);
Clock1 Clock2 Clock3 Clock4 Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 5. Clock := (Clock+Next_ET - (ET+Cycle)) mod M;
ΕΤ ΕΤ ΕΤ ΕΤ Όταν λαμβάνεται ο παλμός, ο κόμβος εκτελεί τα εξής: 6. ET := Next_ET;
Outline Μέρος Α Αυτό-σταθεροποιούμενος αλγόριθμος για συγχρονισμό υπό την παρουσία Βυζαντινών σφαλμάτων Μέρος Β Αλγόριθμος για συγχρονισμό ανεκτικός σε σφάλματα που απευθύνεται σε ασύρματα δίκτυα αισθητήρων οργανωμένα σε clusters
Δίκτυα αισθητήρων οργανωμένα σε clusters Σταθμός βάσης Αρχηγός του cluster
Το πρόβλημα (1/2) Ο συγχρονισμός των στους αισθητήρες είναι μία απαραίτητη προϋπόθεση για πολλές εφαρμογές καθώς και για την σωστή λειτουργία του δικτύου π.χ. μπορεί περιστασιακά να θέλουμε κάποιοι αισθητήρες να μπαίνουν σε λειτουργία sleep έτσι ώστε να μην καταναλώνεται άσκοπα ενέργεια
Το πρόβλημα (2/2) Υπάρχουσες προσεγγίσεις για συγχρονισμό ανεκτικό σε σφάλματα για κατανεμημένα συστήματα δεν είναι αποδοτικές σε δίκτυα αισθητήρων εξαιτίας της μεγάλης κατανάλωσης ενέργειας
Υποθέσεις Κάθε κόμβος έχει μία μοναδική ταυτότητα και κάθε ζευγάρι κόμβων στο cluster μοιράζεται ένα μοναδικό κλειδί ζευγαριού Ένας κόμβος μπορεί να αναγνωρίσει κάποιον άλλο κόμβο χρησιμοποιώντας το μοναδικό κλειδί ζευγαριού που μοιράζεται μαζί του Οι κόμβοι αρχικά έχουν συγχρονισμένα τα ρολόγια τους Οι κόμβοι στο cluster συμφωνούν από την αρχή στη σειρά που θα γίνονται συγχρονιστές (synchronizer order)
Πιστοποίηση Μηνυμάτων Συγχρονισμού Δεναπαιτείταινααποστέλλεταιητιμήτου ρολογιού μαζί με κάθε μήνυμα συγχρονισμού, αφού ο δέκτης ξέρει πώς να προσαρμόσει το ρολόι του Το μόνο που πρέπει να γίνει μετά την λήψη ενός μηνύματος συγχρονισμού είναι να εξετάσει ο δέκτης εάν ο αποστολέας είναι ο αναμενόμενος συγχρονιστής
Οαλγόριθμος(1/2) Εκτελείται μία φορά κάθε R χρονικές μονάδες (ένας γύρος) Σε κάθε γύρο, ένας κόμβος στο κάθε cluster λειτουργεί σαν τον συγχρονιστή (synchronizer) ο οποίος στέλνει (broadcast) ένα μήνυμα συγχρονισμού σε όλους τους άλλους κόμβους. Στην συνέχεια, οι κόμβοι που λαμβάνουν το μήνυμα αυτό συγχρονίζουν τα ρολόγια τους αντίστοιχα αφού πιστοποιήσουν ότι ο αποστολέας είναι ο αναμενόμενος και είναι έγκυρος
Οαλγόριθμος(2/2) Initialization f:=1; k:=(n-mε/(δ+ε))/(n- 3m) Δ:=δ+ε(1+4p); x:=(2km+1)δ+mδ; Task 1: Send if (C = f*r) and (Order(Ni)=f mod n) then Broadcast a message "Ni Ki([f/n])"; end if Task 2: Receive if (Receive a message "Ni Ki([f/n])" at T) then if(f*r - x <= T <= f*r + x) and (F(Ki([f/n]))=Ki([f/n]- 1)) and (Order(Ni)=f mod n) then Δ := f*r - T; if (kδ<= Δ' <= x) then Δ' := kδ; else if (-x <= Δ' <= -kδ) then Δ' := -kδ; end if C:=C + Δ'; f:= f+1; else Drop the message; end if end if if (Has not received a correct synch msg by f*r + x) then f := f+1; end if