Tuesday, 14 December 2010

Αρχιτεκτονική του Συστήματος

Στα πλαίσια της εργασίας, θα πραγματοποιήσουμε μια υλοποίηση του peer-2-peer
συστήματος “Pastry”


Γενικά

Στο σύστημά μας, όπως και στο “Pastry”, οι κόμβοι θα είναι οργανωμένοι σε έναν
δαχτύλιο, και κάθε κόμβος θα έχει ένα μοναδικό 128-bit nodeID. Για την παραγωγή αυτών των nodeID θα χρησιμοποιηθεί η συνάρτηση SHA-1, με είσοδο IP θύρες/ TCP διευθύνσεις ενός κόμβου.

Ο κάθε κόμβος θα κρατάει μια λίστα από Leaf Nodes, δηλαδή τους κοντινότερους κόμβους με βάση το nodeID, μια λίστα από Neighborhood Nodes, δηλαδή τους κοντινότερους κόμβους με βάση κάποια μετρική δρομολόγησης, και έναν πίνακα δρομολόγησης (Routing Table), που περιέχει τα nodeID των πλησιέστερων γνωστών κόμβων.
Παρακάτω αναφέρονται από ένα mini σενάριο για κάθε περίπτωση, καθώς και ποιες
δομοενότητες λογισμικού προβλέπεται να χρησιμοποιηθούν σε κάθε περίπτωση.

 

Αρχικοποίηση και Εισαγωγή Κόμβου

Όταν κάποιος νέος κόμβος θέλει να εισέλθει στον δαχτύλιο, τότε, αφού αποκτίσει δικό του nodeID από την συνάρτηση SHA-1, κάνει multicast στον δαχτύλιο κάποιο ειδικό αίτημα «εισαγωγής» (join). Ο κόμβος που θα απαντήσει (ή οι κόμβοι), θα αποστείλει σε ένα πακέτο το nodeID του κόμβου που θέλει να εισέλθει μαζί με το μήνυμα “join” προς τον κόμβο που έχει το κοντινότερο nodeID στο αντίστοιχο του νεοεισερχόμενου. Στη συνέχεια, ο κόμβος που απάντησε στην αίτηση, ο κόμβος-τελικός παραλήπτης του μηνύματος και όλοι οι ενδιάμεσοι προωθητές του μηνύματος, αποστέλνουν την «κατάστασή» τους στον νεοεισερχόμενο κόμβο. Τέλος ο νεοεισερχόμενος κόμβος χρησιμοποιεί αυτές τις καταστάσεις για να χτίσει την δική του κατάσταση.


Εισαγωγή και Αντιστοίχιση Αντικειμένου

Για να εισάγουμε και να αντιστοιχίσουμε ένα αντικείμενο σε έναν κόμβο, δίνουμε στην
συνάρτηση SHA-1 το όνομα του αντικειμένου και μας επιστρέφεται ένα 16δικό hashcode
(objID), ίδιας μορφής με τα nodeID. Στη συνέχεια αποστέλουμε το objID μέσα στον
δαχτύλιο, και αναζητούμε τον κόμβο με το κοντινότερο αριθμητικά nodeID στο objID. Σε
αυτό τον κόμβο καταχωρείται ότι το αντικείμενο με αυτό το objID, μπορεί να το πάρει
κάποιος από τον κόμβο-αποστολέα του μηνύματος με το objID (καταχωρούνται δηλαδή,
μεταξύ άλλων, και η IP διεύθυνση και η port του αποστολέα).


Αναζήτηση Αντικειμένου

Η αναζήτηση αντικειμένου θυμίζει την εισαγωγή αντικειμένου. Αρχικά δίνουμε στην
συνάρτηση SHA-1 το όνομα του αντικειμένου προς αναζήτηση και μας επιστρέφεται ένα
16δικό hashcode (objID). Στη συνέχεια αποστέλουμε το objID μέσα στον δαχτύλιο, και ο
κόμβος με το κοντινότερο αριθμητικά nodeID στο objID, μας στέλνει ως απάντηση
πληροφορίες για τον κόμβο (μεταξύ άλλων, IP διεύθυνση και port) από τον οποίο
μπορούμε να πάρουμε το αντικείμενο που ψάχνουμε.


Classes

Node: Τάξη που αναπαριστά έναν κόμβο του δαχτυλίου Pastry. Μεταξύ άλλων θα περιέχει και την «κατάσταση» ενός κόμβου (state).

ShaID: Ταξη που αναπαριστά έναν κωδικό κατακερματισμού, αποτέλεσμα της συνάρτησης SHA-1 .

CheckJoin: Νήμα το οποίο ελέγχει για κάποιο μήνυμα “join” από κάποιον κόμβο που θέλει να εισέρθει στον δαχτύλιο.

CheckRequest: Νήμα το οποίο ελέγχει για κάποιο μήνυμα αναζήτησης αντικειμένου, πο έχει παραληπτη τον συγκεκριμένο κόμβο.

Pastry: Τάξη που περιέχει τις απαραίτητες μεθόδους για την λειτουργία του Pastry. Μεταξύ των μεθόδων της θα περιέχονται και οι μέθοδοι του Pastry API.


ΚΑΤΑ ΤΗΝ ΕΞΕΛΙΞΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΙΘΑΝΟΝ ΝΑ ΠΡΟΚΥΨΟΥΝ ΑΛΛΑΓΕΣ ΚΑΙ Η ΑΝΑΡΤΗΣΗ ΑΥΤΗ ΘΑ ΑΝΑΝΕΩΝΕΤΑΙ!

No comments:

Post a Comment