Τρίτη 15 Φεβρουαρίου 2011

Screenshot εφαρμογής

Παρακάτω παρατίθεται ένα screenshot της εφαρμογής κατά τη λειτουργία της:



Στη συγκεκριμένη εικόνα φαίνεται η τοποθέτηση κόμβων στον πίνακα δρομολόγησης του bootstrap κόμβου.

Παρασκευή 11 Φεβρουαρίου 2011

Περιγραφή υλοποίησης εφαρμογής

Η εφαρμογή διαχωρίστηκε σε πακέτα (packages) κλάσεων, με σκοπό τη διάκριση των διαφόρων λειτουργιών. Αναλυτικά, απαρίζεται από τα ακόλουθα πακέτα:
·          
      Utility
Τo συγκεκριμένο πακέτο περιλαμβάνει μια κλάση, ονόματι Utility, σκοπός της οποίας είναι η δημιουργία των αναγνωριστικών των κόμβων και των αναγνωριστικών των αρχείων με τη χρήση της συνάρτησης SHA-1.

·         Structures
To πακέτο Structures περιλαμβάνει κλάσεις, οι οποίες αναπαριστούν τα βασικά συστατικά κομμάτια για τη λειτουργία του Pastry. Συγκεκριμένα περιλαμβάνει τις ακόλουθες κλάσεις:
  •       Η κλάση KeyID αναπαριστά ένα αναγνωριστικό και περιέχει τις κατάλληλες μεθόδους για τις συγκρίσεις αναγνωριστικών που χρειάζονται.
  •      Για την συγκέντρωση όλων των πληροφοριών που είναι απαραίτητες για τη μεταφορά ενός μηνύματος πάνω στο δακτύλιο του Pastry χρησιμοποιείται η κλάση Message, η οποία περιλαμβάνει το αναγνωριστικό το οποίο δρομολογείται στο δακτύλιο, την IP και το port του αρχικού αποστολέα, καθώς και τον τύπο του μηνύματος (JOIN, FILE_INSERT κ.τ.λ.)
  •       Όλες οι δομικές ενότητες του Pastry (leaf set, neighbor set, routing table, available files) βρίσκονται στην κλάση PastryNode.

·         Communication
Στο πακέτο Communication εντοπίζονται όλες οι κλάσεις που σχετίζονται με την επικοινωνία μέσω της τεχνολογίας RMI, καθώς και η υλοποίηση των μεθόδων του πρωτοκόλλου Pastry.
  •     Η κλάση PastryFunctions είναι η διεπαφή η οποία ορίζει αφηρημένα τις προς υλοποίηση κλάσεις (route, forward, downloadFile, uploadFile, updateStructures).
  •      Η κλάση PastryServer περιλαμβάνει την υλοποίηση όλων των μεθόδων που ορίζονται στην κλάση PastryFunctions, καθώς και άλλων, οι οποίες καλούνται τοπικά και όχι μέσω RMI, π.χ. η μέθοδος deliver.
  •      Η απομακρυσμένη κλήση μεθόδων μέσω RMI πραγματοποιείται μέσω της κλάσης PastryClient.

·         Display
Στο τελευταίο πακέτο περιλαμβάνεται η κλάση MainApp, η οποία είναι η υλοποίηση γραφικής διεπαφής για την εφαρμογή αποτελεί την κύρια διασύνδεση των υπολοίπως πακέτων.

Συσχέτιση πακέτων κώδικα

Η συσχέτιση των πακέτων και των κλάσεων διαφαίνεται στο παρακάτω σχήμα:


Το πακέτο Utility χρησιμοποιείται από όλα τα άλλα πακέτα. Το πακέτο Structures αξιοποιείται από το πακέτο Communication και το πακέτο Display, ενώ το πακέτο Communication χρησιμοποιείται μόνο από το πακέτο Display. Τέλος, το πακέτο Display αξιοποιεί μόνο τα άλλα πακέτα και δε χρησιμοποείται από κάποιο.

Αποκλίσεις από τις προδιαγραφές της περιγραφής της αρχιτεκτονικής

Αρχικά, είχε γίνει η παραδοχή πως δύο χρήστες αποφασίζουν τη δημιουργία ενός δακτυλίου και το πραγματοποιούν με τη μεταξύ τους ανταλλαγή πληροφοριών για την αρχικοποίηση των καταστάσεων δρομολόγησης. Αντί αυτού, ο δακτύλιος δημιουργείται με τη βοήθεια ενός αρχικού κόμβου (bootstrap node), με τον οποίο επικοινωνεί κάθε κόμβος που επιθυμεί να εισαχθεί στο δακτύλιο καθόλη τη διάρκεια ύπρξης του δακτυλίου. Καθώς η IP και το port του αρχικού κόμβου είναι γνωστά σε κάθε υποψήφιο χρήστη, ο υποψήφιος χρήστης επικοινωνεί με τον αρχικό κόμβο με χρήση της τεχνολογίας RMI.



Εκτέλεση εφαρμογής

Η μέθοδος εκτέλεσης της εφαρμογής βρίσκεται στην κλάση MainApp του πακέτου Display. To πρώτο στιγμιότυπο της εφαρμογής θα πρέπει να λειτουργήσει ως αρχικός κόμβος (επιλέγοντας το σχετικό check-box). Στη συνέχεια, κάθε νέος κόμβος θα πρέπει να δίνει ως είσοδο προτού ξεκινήσει, μέσω των σχετικών text-boxes, την IP και το port του αρχικού κόμβου.
                Ο αρχικός κόμβος αναλαμβάνει να δρομολογήσει το δακτύλιο ένα JOIN μήνυμα για το νέο κόμβο. Μέσω αυτού του τρόπου και βάσει όσων περιγράφει το πρωτόκολλο Pastry για τη διαδικασία της εισόδου ενός κόμβου, πραγματοποιείται η είσοδος ενός νέου κόμβου παράλληλα με την ενημέρωση των δομών του Pastry κάθε κόμβου που βρίσκεται στο routing path του JOIN μηνύματος. Η διαδικασία εισόδου ολοκληρώθηκε και ο κόμβος είναι έτοιμος να διαθέσει στο δακτύλιο ένα ή περισσότερα αρχεία μουσικής και να αναζητήσει κάποιο αρχείο μουσικής.
                Για την προσθήκη ενός αρχείου στο δακτύλιο, δημιουργείται ένα νέο αναγνωριστικό, βασισμένο στο όνομα του αρχείου, το οποίο παράγεται κατά τον ίδιο τρόπο με το αναγνωριστικό του κόμβου. Στη συνέχεια, δρομολογείται ένα νέο μήνυμα στο δακτύλιο με προορισμό το αναγνωριστικό του αρχείου μουσικής. Μόλις φτάσει στον κόμβο που θα είναι υπεύθυνος για το αρχείο, ο συγκεκριμένος κόμβος “κατεβάζει” το αρχείο από τον κόμβο-πηγή μέσω RMI, καλώντας τη μέθοδο downloadFile.

Τρίτη 8 Φεβρουαρίου 2011

Περιγραφή σταδίων υλοποίησης εφαρμογής

Η ανάπτυξη της εφαρμογής ανταλλαγής μουσικών αρχείων μέσω Pastry overlay πραγματοποιήθηκε στα ακόλουθα στάδια:

  1. Εξοικείωση με την τεχνολογία RMI
  2. Σχεδιασμός της δομής του αναπτυσσόμενου κώδικα (packages), η οποία είναι:
    • πακέτο επικοινωνίας (communication package)
    • πακέτο γραφικής διεπαφής (gui package)
    • πακέτο βασικών δομών (structures package)
    • πακέτο βοηθητικών εργαλείων και μεθόδων (utilities package)
  3. Υλοποίηση των βοηθητικών εργαλείων και μεθόδων και των βασικών δομών, τα οποία απαρτίζονται από:
    • Αναγνωριστικό (είτε κόμβου, είτε αρχείου)
    • Κόμβος Pastry, ο οποίος ενσωματώνει τις όλες τις αναγκαίες δομές (leaf set, neighbor set & routing table)
    • Message, για την επικοινωνία μεταξύ των nodes και σηματοδότηση αυτής
  4. Υλοποίηση της επικοινωνίας, η οποία αποτελείται από τα εξής στοιχεία:
    •  Τύποι μηνυμάτων επικοινωνίας (JOIN, LEAF_SET, FILE_REQUEST κτλ)
    • Διεπαφή (Interface) των μεθόδων που θα εκτελούνται μέσω RMI
    • Client και Server για το RMI, όπου υλοποιούνται οι απαραίτητες μέθοδοι για επικοινωνία μέσω RMI

Παρασκευή 17 Δεκεμβρίου 2010

Πρόοδος Υλοποίησης Αρχιτεκτονικής Καταμερισμού Αρχείων Μουσικής με το Σύστημα Pastry

Η ανάπτυξη μίας δικτυακής εφαρμογής διανομής αντικειμένων με το σύστημα Pastry απαιτεί προσεκτική σχεδίαση και διάκριση των λειτουργιών του συνολικού συστήματος.

Στο στάδιο του σχεδιασμού της αρχιτεκτονικής καταμερισμού αρχείων μουσικής με το σύστημα Pastry, καθορίστηκαν οι θεμελιώδεις λειτουργίες του συστήματος και αναφέρθηκαν οι μηχανισμοί που εξυπηρετούν την υλοποίησή τους.

Στο πρώτο στάδιο της υλοποίησης, το ενδιαφέρον επικεντρώνεται στον αλγόριθμο δρομολόγησης του συστήματος Pastry. Η υλοποίηση και ο έλεγχος ορθότητας του αλγορίθμου δρομολόγησης είναι ουσιαστικής σημασίας, καθώς αποτελεί το βασικό δομικό συστατικό της αρχιτεκτονικής.

Αρχικά, θεωρούμε ένα στατικό Pastry δακτύλιο, ο οποίος αποτελείται από έναν καθορισμένο αριθμό κόμβων. Τα αναγνωριστικά των Pastry κόμβων προκύπτουν από τυχαία ονόματα εφαρμόζοντας τη συνάρτηση κατακερματισμού SHA-1. Βάσει των παραγόμενων αναγνωριστικών, προσδιορίζεται η κατάσταση δρομολόγησης κάθε κόμβου - πίνακας δρομολόγησης, σύνολο φύλλων και σύνολο γειτόνων. Σημειώνεται ότι το σύνολο γειτόνων κάθε κόμβου ορίζεται τυχαία, δηλαδή δε λαμβάνεται υπόψη η φυσική τοπολογία και δεν εφαρμόζονται οι μετρικές εγγύτητας στο παρόν στάδιο.

Το συγκεκριμένο μινιμαλιστικό μοντέλο επιτρέπει την προσεκτική υλοποίηση των βημάτων του αλγορίθμου δρομολόγησης του συστήματος Pastry και τον έλεγχο της ορθής λειτουργίας του μέσω της ανταλλαγής μηνυμάτων κειμένου μεταξύ των κόμβων. Δεδομένης της αναγωγής όλων των θεμελιωδών λειτουργιών της αρχιτεκτονικής – άφιξη νέων κόμβων στο δακτύλιο, αναχώρηση κόμβων, εισαγωγή νέων αντικειμένων στο σύστημα και αντιστοίχισή τους σε κόμβους, διαγραφή αντικειμένων και αναζήτηση αντικειμένων – σε δρομολόγηση μηνυμάτων, η ορθή υλοποίηση του αλγορίθμου δρομολόγησης κρίνεται επιτακτική, ώστε να εξασφαλιστεί η συνέπεια του συστήματος.

Πέμπτη 16 Δεκεμβρίου 2010

Σχεδιασμός Αρχιτεκτονικής Καταμερισμού Αρχείων Μουσικής με το σύστημα Pastry

Αντικείμενο και Στόχος Εργασίας


Αντικείμενο της συγκεκριμένης εργασίας αποτελεί η μελέτη του δομημένου ομότιμου υπερκείμενου δικτύου (structured peer-to-peer overlay network) Pastry και η χρήση του στην ανάπτυξη μίας δικτυακής εφαρμογής διανομής αρχείων μουσικής.

Το Pastry συνιστά ένα σχήμα κατανεμημένου εντοπισμού και δρομολόγησης αντικειμένων (Distributed Object Location and Routing schemeDOLR scheme), του οποίου τα σημαντικότερα χαρακτηριστικά είναι ο πλήρως αποκεντρωμένος έλεγχος, η αυτό-οργάνωση, η κλιμάκωση, η προσαρμοστικότητα, η αξιοπιστία και οι αποδοτικές τοπολογικές ιδιότητες. Η ιδέα στην οποία στηρίζονται τα δομημένα ομότιμα δίκτυα είναι η εξής: Οτιδήποτε αναζητείται στο δικτύο χαρακτηρίζεται από ένα αναγνωριστικό(identifier). Σε κάθε αντικείμενο αποδίδεται ένα αναγνωριστικό – κλειδί (key) και κάθε κόμβος (node) του δικτύου είναι υπεύθυνος να διατηρεί ένα σύνολο αντικειμένων που αντιστοιχίζονται σε ένα συγκεκριμένο εύρος τιμών του κλειδιού. Συνεπώς, σε ένα δίκτυο Pastry ο εντοπισμός και η δρομολόγηση αντικειμένων εκτελούνται σύμφωνα με την εξής θεμελιώδη αρχή: Δεδομένου ενός μηνύματος και ενός κλειδιού, ένας κόμβος του δικτύου Pastry δρομολογεί αποδοτικά το μήνυμα στον κόμβο του οποίου το αναγνωριστικό είναι αριθμητικά πλησιέστερο στο κλειδί, μεταξύ όλων των ενεργών κόμβων (route(msg, key)).

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

Δημιουργία δακτυλίου

Οι κόμβοι στο δίκτυο Pastry οργνώνονται σε ένα δακτύλιο (Pastry ring), όπου κάθε κόμβος χαρακτηρίζεται μοναδικά από ένα αριθμητικό αναγνωριστικό (nodeId). Το αναγνωριστικό κάθε κόμβου παράγεται εφαρμόζοντας τη συνάρτηση κατακερματισμού SHA-1 στο ζεύγος (διεύθυνση IP κόμβου, αριθμός θύρας εφαρμογής), με αποτέλεσμα το σύνολο των αναγνωριστικών των κόμβων να είναι ομοιόμορφα κατανεμημένο. Επίσης, κάθε κόμβος διατηρεί μία κατάσταση δρομολόγησης που αποτελείται από το σύνολο γειτόνων (neighborhood set), το σύνολο φύλλων (leaf set) και τον πίνακα δρομολόγησης (routing table). Το σύνολο γειτόνων και ο πίνακας δρομολόγησης συντίθενται βάσει μίας μετρικής εγγύτητας (proximity metric) στο Διαδίκτυο(Internet), η οποία αρχικά υπολογίζει τον αριθμό των βημάτων δρομολόγησης (routing hops number)  και στη συνέχεια αξιολογεί το χρόνο διαδρομής μετ’ επιστροφής (round trip time - rtt) σε ένα καθορισμένο υποσύνολο του αρχικού αποτελέσματος, ώστε να αποφευχθούν καταστάσεις συμφόρησης.        

Θεωρούμε μία ομάδα N χρηστών, οι οποίοι είναι διασυνδεδενένοι μέσω του Διαδικτύου και επιθυμούν να δημιουργήσουν το δίκτυο Pastry, ώστε να διανέμουν αρχεία μουσικής. Αρχικά, ένας από τους N κόμβους δημιουργεί το δακτύλιο παράγοντας το αναγνωριστικό του και αρχικοποιώντας την κατάσταση δρομολόγησής του ως κενή. Στη συνέχεια, κάθε νέος κόμβος, που επιθυμεί να εισαχθεί στο δακτύλιο με ένα νέο αναγνωριστικό, αρχικοποιεί την κατάσταση δρομολόγησής του επικοινωνώντας με τον πλησιέστερό του Pastry κόμβο (bootstrapped/rendezvous node), βάσει της μετρικής εγγύτητας, και αιτώντας τη δρομολόγηση ενός ειδικού μηνύματος συμμετοχής (join message), όπου η τιμή του κλειδιού τίθεται ίση με την τιμή του αναγνωριστικού του. Το μήνυμα δρομολογείται στον Pastry κόμβο με αναγνωριστικό αριθμητικά πλησιέστερο στο κλειδί. Ο νέος κόμβος ανακτά πληροφορίες από τον αρχικό Pastry κόμβο, τον Pastry κόμβο στον οποίο κατέληξε το μήνυμα και τους ενδιάμεσους Pastry κόμβους από τους οποίους διήλθε το μήνυμα. Χρησιμοποιώντας τις συγκεκριμένες πληροφορίες, ο νέος κόμβος αρχικοποιεί την κατάσταση δρομολόγησής του ορθά και γνωστοποιεί την άφιξή του στους Pastry κόμβους που απαιτείται.
Οι κόμβοι στο δίκτυο Pastry ανιχνεύουν επίσης μία απροειδοποίητη αναχώρηση ή αποτυχία ενός γειτονικού κόμβου μέσω της μη ανταπόκρισής του στην επικοινωνία. Στη συγκεκριμένη περίπτωση, διενεργείται ενημέρωση της κατάστασης δρομολόγησης τους μέσω επικοινωνίας με άλλους ενεργούς γειτονικούς κόμβους.

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

Τα αντικείμενα (αρχεία μουσικής) στο δίκτυο Pastry περιγράφονται μέσω κλειδιών που προκύπτουν από την εφαρμογή της συνάρτησης κατακερματισμού SHA-1 στην τριάδα (όνομα αρχείου, διεύθυνση IP κόμβου-ιδιοκτήτη, αριθμός θύρας εφαρμογής). Η εισαγωγή ενός αρχείου μουσικής επιτυγχάνεται μέσω της δρομολόγησης ενός μηνύματος εισαγωγής (insert message), όπου η τιμή του κλειδιού τίθεται ίση με την τιμή του κλειδιού του αρχείου προς εισαγωγή. Το μήνυμα δρομολογείται στον Pastry κόμβο με αναγνωριστικό αριθμητικά πλησιέστερο στο κλειδί. Στη συνέχεια, αντίγραφα του αρχείου αποθηκεύονται στους k-1 αριθμητικά πλησιέστερους στο κλειδί Pastry κόμβους (όπου k ≤ |leaf set|). Μέσω του συγκεκριμένου μηχανισμού, το δίκτυο Pastry επιτρέπει την ύπαρξη αντιγράφων, αυξάνοντας συνεπώς την αξιοπιστία και την επίδοση του συστήματος. Επίσης, το σύστημα επιτρέπει τη διαγραφή ενός αρχείου μουσικής μέσω της δρομολόγησης ενός μηνύματος διαγραφής (delete message), όπου η τιμή του κλειδιού τίθεται ίση με την τιμή του κλειδιού του αρχείου προς διαγραφή. Σημειώνεται ότι το αντικείμενο διαγράφεται τελικά και από τους k Pastry κόμβους στους οποίους είναι αντιστοιχισμένο.

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

Η αναζήτηση αρχείων μουσικής στο δίκτυο Pastry πραγματοποιείται μέσω της δρομολόγησης ενός μηνύματος αναζήτησης (lookup message), όπου η τιμή του κλειδιού τίθεται ίση με την τιμή του κλειδιού του αρχείου προς αναζήτηση. Ο ευρετικός μηχανισμός δρομολόγησης του συστήματος Pastry, ο οποίος αξιοποιεί και πληροφορίες σχετικά με τη φυσική τοπολογία, εξασφαλίζει ότι το μήνυμα θα καταλήξει στον πλησιέστερο Pastry κόμβο, βάσει της μετρικής εγγύτητας, μεταξύ των k Pastry κόμβων με αναγνωριστικά αριθμητικά πλησιέστερα στο κλειδί. Αναλυτικότερα, δεδομένου ενός μηνύματος αναζήτησης προς δρομολόγηση, ένας Pastry κόμβος αρχικά εξετάζει το σύνολο φύλλων του, ώστε να διαπιστώσει αν ο ίδιος ή κάποιος από τους άμεσους γείτονές του είναι «υπεύθυνος» για το ζητούμενο αρχείο μουσικής. Αν εντοπιστεί ένας «υπεύθυνος» κόμβος, το μήνυμα δρομολογείται άμεσα στον προορισμό του. Αν δεν εντοπιστεί ένα «υπεύθυνος» κόμβος στο σύνολο φύλλων, ο Pastry κόμβος χρησιμοποιεί τον πίνακα δρομολόγησης, προκειμένου να εντοπίσει έναν Pastry κόμβο, του οποίου το αναγνωριστικό έχει μεγαλύτερου μήκους κοινό πρόθεμα με το κλειδί συγκριτικά με το δικό του αναγνωριστικό. Ωστόσο, ενδέχεται ένας Pastry κόμβος με τη συγκεκριμένη ιδιότητα να μην αναφέρεται στον πίνακα δρομολόγησης ή να μην είναι ενεργός. Στη συγκεκριμένη περίπτωση, επιλέγεται ένας Pastry κόμβος από το σύνολο φύλλων, του οποίου το αναγνωριστικό έχει ίσου μήκους κοινό πρόθεμα με το κλειδί και είναι αριθμητικά πλησιέστερο στο κλειδί συγκριτικά με το αναγνωριστικό του τρέχοντος Pastry κόμβου.