2006-2007:Κατανεμημένα Συστήματα ΙΙ:Ασκήσεις

Από DistrSys

Case Study: Σύστημα Κρατήσεων Αεροπορικών Θέσεων

Μελέτη ενός κατανεμημένου συστήματος για την κράτηση αεροπορικών θέσεων ως προς τα Θέματα σχεδιασμού και case study της ανάπτυξης του με τέσσερις χαρακτηριστικές τεχνολογίες υλοποίησης:

  • Sockets
  • Κατανεμημένα Αντικείμενα (Servlets)
  • Κλήση Απομακρυσμένων Διαδικασιών (RMI)
  • Κλήση Απομακρυσμένων Υπηρεσιών (JAVA Servlets)
  • Συστήματα Ανταλλαγής Μηνυμάτων (JMS)


Ανάλυση Συστήματος:

Η ανάλυση ενός συστήματος στοχεύει στην καταγραφή των απαιτήσεων των χρηστών και την οριοθέτηση των λειτουργιών του συστήματος. Είναι ένα αναγκαίο βήμα που δημιουργεί τις κατάλληλες προϋποθέσεις για τον σωστό (και ολοκληρωμένο) σχεδιασμό. Συνήθως εμπεριέχει τα ακόλουθα βήματα:

  • Αποτύπωση Απαιτήσεων Συστήματος
  • Αποτύπωση Λειτουργιών Συστήματος -- Use Cases
  • Καταγραφή Προδιαγραφών Συστήματος


Στο 1ο Φροντιστήριο εξετάζουμε τις παραπάνω τρεις πτυχές και αποτυπώνουμε τις απαιτήσεις του συστήματος ως προς την

  • Αναζήτηση πτήσεων
  • Εμφάνιση ανοικτών θέσεων ανά πτήση
  • Κράτηση θέσης
  • Αναζήτηση κρατήσεων


Στην συνέχεια, αναλύουμε τις ανάγκες των χρηστών και καταγράφουμε τις λειτουργίες του συστήματος με τη χρήση των use-cases, έναν τρόπο μοντελοποίησης των μοναδικών λειτουργιών του συστήματος. Τα use-cases είναι ανεξάρτητα από τον κώδικα, μερικές φορές ορισμένες λειτουργίες που αποτυπώνονται από τα use-cases μπορεί να μην υλοποιηθούν στο τελικό σύστημα. Μια συλλογή από use-cases περιγράφει το σύστημα (ή μέρος του), παρατηρούμε όμως ότι η περιγραφή όλου του συστήματος ως ένα use-case είναι πολύ σύνθετη και δεν βοηθάει στην ανάλυση του ενώ ή περιγραφή όλου του συστήματος με πολλά use-case είναι πολύ χρονοβόρα και πολλές φορές δεν είναι απαραίτητη. Επομένως το επίπεδο της ανάλυσης και το σύνολο των λειτουργιών που θα μοντελοποιηθούν μέσω των use-cases πρέπει να ορισθεί προσεκτικά. Στο 1ο Φροντιστήριο μοντελοποιούμε (συνοπτικά) τις ακόλουθες λειτουργίες του συστήματος:

  • Αναζήτηση Πτήσης
  • Επιλογή Πτήσης
  • Έλεγχος Ελεύθερων Θέσεων
  • Δέσμευση Θέσεων
  • Κράτηση Θέσεων
  • Ακύρωση Κράτησης Θέσεων


Στο τρίτο βήμα της ανάλυσης, ορίζουμε τέσσερις γενικές κατηγορίες προδιαγραφών και καταγράφουμε τις προδιαγραφές ως εξής:

  • Γενικές Προδιαγραφές
    • Πολλαπλή πρόσβαση στο σύστημα από διαφορετικά σημεία (θέσεις εργασίας)
    • Ταυτόχρονη χρήση του συστήματος από διαφορετικές θέσεις εργασίας
    • Η πρόσβαση στο σύστημα ελέγχεται με εξωτερικές μεθόδους
    • Η επιβεβαίωση των στοιχείων των πιστωτικών καρτών γίνεται με εξωτερικές μεθόδους
    • Τα στοιχεία των πτήσεων βρίσκονται σε εξωτερικό σύστημα
  • Ειδικές Προδιαγραφές
    • Σωστή καταγραφή των στοιχείων πελατών
    • Εξασφάλιση δημιουργίας μοναδικών κωδικών πελατών
    • Σωστή δέσμευση θέσεων και τήρηση χρονικού περιθωρίου και σειράς προτεραιότητας
    • Σωστή ολοκλήρωση κράτησης θέσεως και καταγραφή στοιχείων
    • Εξασφάλιση δημιουργίας μοναδικών κωδικών δεσμεύσεων και κρατήσεων θέσεων
  • Προδιαγραφές Σύνδεσης με Εξωτερικά Συστήματα
  • Τεχνικές Προδιαγραφές
    • Οι θέσεις εργασίας έχουν την δυνατότητα εκτέλεσης κώδικα JAVA
    • Το σύστημα προσφέρει το πρωτόκολλο TCP


Σχεδιασμός Συστήματος:

Σύμφωνα με τα στοιχεία που συλλέξαμε από το πρώτο βήμα, σχεδιάζουμε το σύστημα ως προς την αρχιτεκτονική του (σε υψηλό επίπεδο), την δομή του συστήματος (σε χαμηλότερο επίπεδο) και τις τεχνικές απαιτήσεις των επιμέρους συστημάτων. Ο σχεδιασμός συνήθως αναδεικνύει μια συγκεκριμένη τεχνολογία υλοποίησης ως καταλληλότερη, στις περισσότερες (πραγματικές) περιπτώσεις η βασική τεχνολογία υλοποίησης έχει επιλεχθεί εκ των προτέρων. Στα πλαίσια του μαθήματος θα εξετάσουμε τέσσερις διαφορετικές τεχνολογίες υλοποίησης

Η αρχιτεκτονική του συστήματος βασίζεται στο μοντέλο Πελάτη-Εξυπηρέτη που μελετήσαμε στο 1ο Φροντιστήριο και το επεκτείνει ορίζοντας τέσσερα λογικά επίπεδα:

  1. Επίπεδο Παρουσίασης (Γραφικό περιβάλλον, Presentation Tier)
  2. Επίπεδο Λειτουργιών (1ο επίπεδο εξυπηρέτη, Business-Logic Tier)
  3. Επίπεδο Αντικειμένων/Οντολογιών (Object Tier)
  4. Επίπεδο Δεδομένων (Βάση Δεδομένων, Data Tier)


Οι λόγοι διαχωρισμού του επίπεδου λειτουργιών από το επίπεδο δεδομένων καθώς και η δημιουργία ενός ενδιάμεσου επιπέδου αντικειμένων/οντολογιών παρουσιάζονται στο 2ο Φροντιστήριο. Στις παρακάτω ενότητες καταγράφουμε αναλυτικά τις λειτουργίες του επίπεδου δεδομένων και του επίπεδου αντικειμένων και παρουσιάζουμε ολοκληρωμένο κώδικα java για την πλήρη υλοποίησή τους. Τα δύο υψηλότερα επίπεδα (παρουσίασης και λειτουργιών) αναπτύσσονται με διαφορετικό τρόπο για κάθε τεχνολογία υλοποίησης και παρουσιάζονται στις αντίστοιχες ενότητες.


Υλοποίηση Επίπεδου Δεδομένων:

Το επίπεδο δεδομένων του συστήματος σχεδιάστηκε σύμφωνα με το σχεσιακό μοντέλο και έχει υλοποιηθεί με την χρήση του λογισμικού Microsoft Access. Ονομάζουμε την βάση Airline.mdb. Η βάση περιέχει τρεις απλούς πίνακες: Passenger, Flight και Reservation.

Η χρήση της βάσης δεδομένων δεν απαιτεί την εγκατάσταση του λογισμικού Microsoft Access. Ο ποιο απλός τρόπος είναι η προσπέλαση της βάσης με την χρήση των οδηγών ODBC. Οι οδηγοί ODBC προσφέρουν ένα ενδιάμεσο επίπεδο αφαίρεσης που επιτρέπει την πρόσβαση στην βάση δεδομένων ανεξάρτητα από την τεχνολογία υλοποίησης της (δηλ. MSAccess, MySQL, Oracle κλπ.) και την τοποθεσία της στο δίκτυο. Αναλυτικές πληροφορίες για τις ρυθμίσεις ODBC υπάρχουν σε διάφορα σημεία σε βιβλία και στο internet, π.χ. για Windows XP, Windows 2000, Windows 98/Me

Για την υλοποίηση του συστήματος σε Java, χρησιμοποιούμε την βιβλιοθήκη JDBC και τον οδηγό/γέφυρα JDBC-ODBC. Για την εξοικείωση με την Java ως προς τη προσπέλαση και χρήση της βάσης μέσω της JDBC δίνονται τα ακόλουθα παραδείγματα:


Στο 2ο Φροντιστήριο γίνεται μια σύντομη περιγραφή της βάσης δεδομένων και των βασικών λειτουργιών σύνδεσης, προσπέλασης των δεδομένων και ενημέρωσης των στοιχείων. Ένα γενικό και αρκετά αναλυτικό tutorial για την σύνδεση σε βάσεις Microsoft Access μέσω της βιβλιοθήκης JDBC μπορείτε να βρείτε εδώ.


Υλοποίηση Επίπεδου Αντικειμένων/Οντολογιών:

Η προσπέλαση των δεδομένων από την βάση γίνεται με την συνιστώσα ResultSet της βιβλιοθήκης JDBC. Τα δεδομένα είναι αποθηκευμένα στους πίνακες της βάσης δεδομένων. Για να εξασφαλίσουμε την προσπέλαση των δεδομένων με αντικειμενοστραφή τρόπο, στο επίπεδο αντικειμένων υλοποιούμε μεθόδους που μετατρέπουν κάθε γραμμή του πίνακα σε ένα νέο αντικείμενο. Κάθε αντικείμενο υλοποιεί τις μεθόδους select/insert/update και με αυτή την έννοια γνωρίζει τον τρόπο αποθήκευσης των στοιχείων στους αντίστοιχους πίνακες. Ο βασικός στόχος μας είναι να προσφέρουμε διάφανη πρόσβαση στην βάση και τα δεδομένα στα ανώτερα επίπεδα κώδικα. Αναλυτικότερη συζήτηση για το επίπεδο αντικειμένων και την υλοποίηση των τριών αντικειμένων/οντολογιών γίνεται στο 2ο Φροντιστήριο.

Σύμφωνα με τον σχεδιασμό και υλοποίηση της βάσης δεδομένων ορίζουμε τρεις συνιστώσες λογισμικού:

  • Συνιστώσα Passenger - υλοποίηση ανάγνωσης/ενημέρωσης στοιχείων του πίνακα Passenger
  • Συνιστώσα Flight - υλοποίηση ανάγνωσης/ενημέρωσης στοιχείων του πίνακα Flight
  • Συνιστώσα Reservation - υλοποίηση ανάγνωσης/ενημέρωσης στοιχείων του πίνακα Reservation
  • Συνιστώσα FlightBookedException - υλοποίηση σφάλματος/exception που χρησιμοποιείται από την συνιστώσα Reservation


Υλοποίηση Επίπεδου Λειτουργιών και Παρουσίασης:


Τεχνολογία Υλοποίησης Sockets 
Αρχικά μελετάμε τη βιβλιοθήκη java.net εξετάζοντας τις βασικές συνιστώσες URL, InetAddress, Socket και SocketServer. Αναλύουμε τα θετικά και αρνητικά της συγκεκριμένης τεχνολογίας υλοποίησης ως προς το σύστημα υπό μελέτη. Για την εξοικείωση μας με την βιβλιοθήκη java.net παρουσιάζουμε μια απλή εφαρμογή πελάτη-εξυπηρέτη που βασίζεται στις ακόλουθες τρεις συνιστώσες:
  • Συνιστώσα BetterSocket - επέκταση της συνιστώσας Socket για διαχείριση sockets που μεταφέρουν strings
  • Applet SimpleClient - υλοποίηση του πελάτη σε μορφή Applet
  • Συνιστώσα SimpleServer - υλοποίηση του εξυπηρέτη
Η υλοποίηση του απλού εξυπηρέτη βασίζεται σε μια ιδιαίτερα περιοριστική παραδοχή: μόνο ένας πελάτης μπορεί να συνδεθεί στον εξυπηρέτη ανά πάσα στιγμή. Την παραδοχή αυτή την κάναμε για να απλοποιήσουμε την υλοποίηση. Η σωστή υλοποίηση του εξυπηρέτη για την παράλληλη διαχείριση πολλαπλών πελατών απαιτεί την χρήση Threads:
  • Συνιστώσα ThreadedServer - υλοποίηση του εξυπηρέτη με την χρήση Threads
Η υλοποίηση του απλού εξυπηρέτη κρύβει και μια δεύτερη παραδοχή: το υποκείμενο δίκτυο δεν θα παρουσιάζει σφάλματα κατά την μετάδοση μηνυμάτων. Όπως και πριν, την παραδοχή αυτή την κάναμε για να απλοποιήσουμε την υλοποίηση. Ένας τρόπος για να υλοποιηθούν σωστά οι συνιστώσες του πελάτη και εξυπηρέτη για τον έλεγχο πιθανών σφαλμάτων κατά την αποστολή/μετάδοση μηνυμάτων βασίζεται στην χρήση timeouts:
  • Applet TimeoutClient - υλοποίηση του πελάτη σε μορφή Applet με διαχείριση σφαλμάτων επικοινωνίας
  • Συνιστώσα TimeoutServer - υλοποίηση του εξυπηρέτη με διαχείριση σφαλμάτων επικοινωνίας
Ακολουθώντας την παραπάνω γραμμή υλοποίησης για το σύστημα που μελετάμε, αρχικά επεκτείνουμε την συνιστώσα Socket για διαχείριση sockets που θα μεταφέρουν τα αντικείμενα του επίπεδου Αντικειμένων/Οντολογιών μεταξύ του πελάτη και εξυπηρέτη. Στην συνέχεια, χρησιμοποιώντας την νέα συνιστώσα SuperSocket υλοποιούμε τον εξυπηρέτη και τον πελάτη. Σημειώνουμε ότι οι υλοποιήσεις που προσφέρονται παρακάτω δεν είναι ολοκληρωμένες: μόνο ορισμένες από τις λειτουργίες του συστήματος (όπως αποτυπώνονται στην ανάλυση και σχεδιασμό) έχουν υλοποιηθεί, οι υπόλοιπες λειτουργίες που δεν έχουν υλοποιηθεί αφήνονται ως άσκηση:
  • Συνιστώσα SuperSocket - επέκταση της συνιστώσας Socket για διαχείριση sockets που μεταφέρουν objects
  • Applet RemoteClient - υλοποίηση του πελάτη της εφαρμογής σε μορφή Applet
  • Συνιστώσα Server - υλοποίηση του εξυπηρέτη της εφαρμογής


Τεχνολογία Υλοποίησης RMI (Κλήση Απομακρυσμένων Διαδικασιών) 


Τεχνολογία Υλοποίησης Servlets (Κατανεμημένα Αντικείμενα) 


Τεχνολογία Υλοποίησης JMS (Συστήματα Ανταλλαγής Μηνυμάτων) 


Project

Υπάρχουν τρείς κατηγορίες project:

  1. Θεωρητικό -- Ατομική άσκηση με στόχο την μελέτη ενός θεμελειώδους προβλήματος των κατανεμημένων συστημάτων. Οι φοιτητές καλούνται (i) να μελετήσουν 2 δημοσιεύσεις που μελετάνε το πρόβλημα, (ii) να παρουσιάσουν το πρόβλημα που επιλέξανε και τα κυριώτερα θέματα (10' παρουσίαση με χρήση διαφανειών και projector) και (iii) να παραδώσουν μια αναφορά (5-7 σελίδες).
  2. Πρακτικό -- Ομαδική άσκηση (1-3 άτομα) με στόχο την ανάλυση, σχεδιασμό και ανάπτυξη ενός κατανεμημένου αλγόριθμου στο περιβάλλον tinyos. Οι ομάδες καλούνται (i) να μελετήσουν 2 δημοσιεύσεις που μελετάνε το πρόβλημα και προσφέρουν αλγοριθμικές λύσεις για το περιβάλλον tinyos, (ii) να υλοποιήσουν τον αλγόριθμο σύμφωνα με τις δημοσιεύσεις και (iii) να παρουσιάσουν το πρόβλημα, τον αλγόριθμο και ορισμένα επιλεγμένα θέματα υλοποίησης (10' παρουσίαση με χρήση διαφανειών και projector).
  3. Πρακτικό -- Ομαδική άσκηση (1-3 άτομα) με στόχο την ανάλυση, σχεδιασμό και ανάπτυξη ενός κατανεμημένου συστήματος. Οι ομάδες καλούνται (i) να καταγράψουν τις απαιτήσεις, την ανάλυση και σχεδιασμό του συστήματος, (ii) να αναπτύξουν το σύστημα σύμφωνα με την τεχνολογία που επιλέξανε και (iii) να παρουσιάσουν το σύστημά τους και ορισμένα επιλεγμένα θέματα υλοποίησης (10' παρουσίαση με χρήση διαφανειών και projector).


Η βαθμολόγηση της άσκησης γίνεται ως εξής:

  • 50% - τεχνική αναφορά
  • 50% - τελική παρουσίαση


Θέματα Επιλογής:

  • Θεωρητικά Project
    • Συγχρονισμός ρολογιών υπο την παρουσία σφαλμάτων
    • Το πρόβλημα των Βυζαντινών στρατηγών
    • Κατανεμημένες δομές με αυτο-σταθεροποίηση
    • Κατανεμημένοι Αλγόριθμοι Συντονισμού Κίνησης Αυτοκινούμενων Συσκευών
  • Πρακτικά -- Υλοποίηση Αλγόριθμου στο περιβάλλον tinyOS
  • Πρακτικά -- Υλοποίηση Κατανεμημένου Συστήματος
    • Σύστημα Διαχείρισης Δικτύων Αισθητήρων
    • Σύστημα Διαχείρισης Επιστημονικών Έργων
    • Σύστημα Διαμοιρασμού Βιβλιογραφικών Αναφορών
    • Σύστημα Διαχείρισης Ψηφιακών Τεκμηρίων


Ομάδες:

 Ομάδα / Μέλη   Κατηγορία   Σελίδα Ομάδας   Τίτλος   Βαθμός 
Κοντοτάσιου Ιωάννα (3125)
Μπέσσας Απόστολος (3171)
3 1η Ομάδα  Σύστημα Διαμοιρασμού Βιβλιογραφικών Αναφορών   10 
Αντωνέλλης Δημήτριος (2812) 1 2η Ομάδα  Συγχρονισμός ρολογιών υπο την παρουσία σφαλμάτων   10 
Ρεσβάνης Μιχάλης (3206)
Χριστοφοράκη Μαρία (3249)
3 3η Ομάδα  Σύστημα Διαχείρισης Επιστημονικών Έργων   10 
Μποχρίνη Σταυρούλα (3173)
Σταθόπουλος Αναστάσιος (3220)
3 4η Ομάδα  Σύστημα Διαχείρισης Επιστημονικών Έργων   9 
Γεράκιος Κώστας (3072)
Καραμπίνας Δημήτρης (3112)
Παπαπαναγιώτου Βασίλης (3186)
3 5η Ομάδα  Σύστημα Διαχείρισης Δικτύων Αισθητήρων   10 
Κούστα Μαρία (3130)
Ρίνης Ηλίας (3207)
3 6η Ομάδα  Σύστημα Διαχείρισης Ψηφιακών Τεκμηρίων   10 
Αλτανης Παυλος-Αλεξανδρος (3053)
Σεραφειμ Μελλος (3155)
2 7η Ομάδα  Δρομολόγηση με χρήση εικονικών συντεταγμένων σε δίκτυα αισθητήρων   - 
Παπουτσάκης Κώστας (2916) 1 8η Ομάδα  Κατανεμημένοι Αλγόριθμοι Συντονισμού Κίνησης Αυτοκινούμενων Συσκευών   - 


Τελικός Βαθμός

Ο τελικός βαθμός υπολογίζεται σύμφωνα με τον βαθμό του project.

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


Βαθμολογία:

 ΑΜ   Ονοματεπώνυμο   Βαθμός 
 2812  Αντωνέλλης Δημήτριος  10 
 3072  Γεράκιος Κώστας  10 
 3112  Καραμπίνας Δημήτρης  10 
 3125  Κοντοτάσιου Ιωάννα  10 
 3130  Κούστα Μαρία  10 
 3171  Μπέσσας Απόστολος  10 
 3173  Μποχρίνη Σταυρούλα  9 
 3186  Παπαπαναγιώτου Βασίλης  10 
 3206  Ρεσβάνης Μιχάλης  10 
 3207  Ρίνης Ηλίας  10 
 3220  Σταθόπουλος Αναστάσιος  9 
 3249  Χριστοφοράκη Μαρία  10