2005-2006:Κατανεμημένα Συστήματα ΙΙ:Ασκήσεις
Από DistrSys
Case Study: Σύστημα Κρατήσεων Αεροπορικών Θέσεων
|
Μελέτη ενός κατανεμημένου συστήματος για την κράτηση αεροπορικών θέσεων ως προς τα Θέματα σχεδιασμού και case study της ανάπτυξης του με τέσσερις χαρακτηριστικές τεχνολογίες υλοποίησης:
|
Ανάλυση Συστήματος:
Η ανάλυση ενός συστήματος στοχεύει στην καταγραφή των απαιτήσεων των χρηστών και την οριοθέτηση των λειτουργιών του συστήματος. Είναι ένα αναγκαίο βήμα που δημιουργεί τις κατάλληλες προϋποθέσεις για τον σωστό (και ολοκληρωμένο) σχεδιασμό. Συνήθως εμπεριέχει τα ακόλουθα βήματα:
- Αποτύπωση Απαιτήσεων Συστήματος
- Αποτύπωση Λειτουργιών Συστήματος -- Use Cases
- Καταγραφή Προδιαγραφών Συστήματος
Στο 1ο Φροντιστήριο εξετάζουμε τις παραπάνω τρεις πτυχές και αποτυπώνουμε τις απαιτήσεις του συστήματος ως προς την
- Αναζήτηση πτήσεων
- Εμφάνιση ανοικτών θέσεων ανά πτήση
- Κράτηση θέσης
- Αναζήτηση κρατήσεων
Στην συνέχεια, αναλύουμε τις ανάγκες των χρηστών και καταγράφουμε τις λειτουργίες του συστήματος με τη χρήση των use-cases, έναν τρόπο μοντελοποίησης των μοναδικών λειτουργιών του συστήματος. Τα use-cases είναι ανεξάρτητα από τον κώδικα, μερικές φορές ορισμένες λειτουργίες που αποτυπώνονται από τα use-cases μπορεί να μην υλοποιηθούν στο τελικό σύστημα. Μια συλλογή από use-cases περιγράφει το σύστημα (ή μέρος του), παρατηρούμε όμως ότι η περιγραφή όλου του συστήματος ως ένα use-case είναι πολύ σύνθετη και δεν βοηθάει στην ανάλυση του ενώ ή περιγραφή όλου του συστήματος με πολλά use-case είναι πολύ χρονοβόρα και πολλές φορές δεν είναι απαραίτητη. Επομένως το επίπεδο της ανάλυσης και το σύνολο των λειτουργιών που θα μοντελοποιηθούν μέσω των use-cases πρέπει να ορισθεί προσεκτικά. Στο 1ο Φροντιστήριο μοντελοποιούμε (συνοπτικά) τις ακόλουθες λειτουργίες του συστήματος:
- Αναζήτηση Πτήσης
- Επιλογή Πτήσης
- Έλεγχος Ελεύθερων Θέσεων
- Δέσμευση Θέσεων
- Κράτηση Θέσεων
- Ακύρωση Κράτησης Θέσεων
Στο τρίτο βήμα της ανάλυσης, ορίζουμε τέσσερις γενικές κατηγορίες προδιαγραφών και καταγράφουμε τις προδιαγραφές ως εξής:
- Γενικές Προδιαγραφές
- Πολλαπλή πρόσβαση στο σύστημα από διαφορετικά σημεία (θέσεις εργασίας)
- Ταυτόχρονη χρήση του συστήματος από διαφορετικές θέσεις εργασίας
- Η πρόσβαση στο σύστημα ελέγχεται με εξωτερικές μεθόδους
- Η επιβεβαίωση των στοιχείων των πιστωτικών καρτών γίνεται με εξωτερικές μεθόδους
- Τα στοιχεία των πτήσεων βρίσκονται σε εξωτερικό σύστημα
- Ειδικές Προδιαγραφές
- Σωστή καταγραφή των στοιχείων πελατών
- Εξασφάλιση δημιουργίας μοναδικών κωδικών πελατών
- Σωστή δέσμευση θέσεων και τήρηση χρονικού περιθωρίου και σειράς προτεραιότητας
- Σωστή ολοκλήρωση κράτησης θέσεως και καταγραφή στοιχείων
- Εξασφάλιση δημιουργίας μοναδικών κωδικών δεσμεύσεων και κρατήσεων θέσεων
- Προδιαγραφές Σύνδεσης με Εξωτερικά Συστήματα
- Τεχνικές Προδιαγραφές
- Οι θέσεις εργασίας έχουν την δυνατότητα εκτέλεσης κώδικα JAVA
- Το σύστημα προσφέρει το πρωτόκολλο TCP
Σχεδιασμός Συστήματος:
Σύμφωνα με τα στοιχεία που συλλέξαμε από το πρώτο βήμα, σχεδιάζουμε το σύστημα ως προς την αρχιτεκτονική του (σε υψηλό επίπεδο), την δομή του συστήματος (σε χαμηλότερο επίπεδο) και τις τεχνικές απαιτήσεις των επιμέρους συστημάτων. Ο σχεδιασμός συνήθως αναδεικνύει μια συγκεκριμένη τεχνολογία υλοποίησης ως καταλληλότερη, στις περισσότερες (πραγματικές) περιπτώσεις η βασική τεχνολογία υλοποίησης έχει επιλεχθεί εκ των προτέρων. Στα πλαίσια του μαθήματος θα εξετάσουμε τέσσερις διαφορετικές τεχνολογίες υλοποίησης
Η αρχιτεκτονική του συστήματος βασίζεται στο μοντέλο Πελάτη-Εξυπηρέτη που μελετήσαμε το προηγούμενο εξάμηνο (ΚΣ Ι) στην 8η Διάλεξη και το επεκτείνει ορίζοντας τέσσερα λογικά επίπεδα:
- Επίπεδο Παρουσίασης (Γραφικό περιβάλλον, Presentation Tier)
- Επίπεδο Λειτουργιών (1ο επίπεδο εξυπηρέτη, Business-Logic Tier)
- Επίπεδο Αντικειμένων/Οντολογιών (Object Tier)
- Επίπεδο Δεδομένων (Βάση Δεδομένων, 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 δίνονται τα ακόλουθα παραδείγματα:
- Συνιστώσα PassengerList - παράδειγμα ανάγνωσης στοιχείων
- Applet MetaData - χρήση της συνιστώσας ResultSet σε γραφικό περιβάλλον Applet
- Συνιστώσα PassengerUpdate - παράδειγμα ενημέρωσης στοιχείων
- Συνιστώσα Passenger - υλοποίηση ανάγνωσης/ενημέρωσης στοιχείων του πίνακα Passenger σε αντικειμενοστραφή προγραμματισμό
- Συνιστώσα PassengerTransaction - υλοποίηση συναλλαγών (transaction) κατά την ενημέρωση στοιχείων της βάσης δεδομένων
- Applet PassengerApplet - χρήση των παραπάνω λειτουργιών σε γραφικό περιβάλλον
Στο 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
- Η υλοποίηση του απλού εξυπηρέτη βασίζεται σε μια ιδιαίτερα περιοριστική παραδοχή: μόνο ένας πελάτης μπορεί να συνδεθεί στον εξυπηρέτη ανά πάσα στιγμή. Την παραδοχή αυτή την κάναμε για να απλοποιήσουμε την υλοποίηση. Η σωστή υλοποίηση του εξυπηρέτη για την παράλληλη διαχείριση πολλαπλών πελατών απαιτεί την χρήση Threads:
- Η υλοποίηση του απλού εξυπηρέτη κρύβει και μια δεύτερη παραδοχή: το υποκείμενο δίκτυο δεν θα παρουσιάζει σφάλματα κατά την μετάδοση μηνυμάτων. Όπως και πριν, την παραδοχή αυτή την κάναμε για να απλοποιήσουμε την υλοποίηση. Ένας τρόπος για να υλοποιηθούν σωστά οι συνιστώσες του πελάτη και εξυπηρέτη για τον έλεγχο πιθανών σφαλμάτων κατά την αποστολή/μετάδοση μηνυμάτων βασίζεται στην χρήση timeouts:
- Applet TimeoutClient - υλοποίηση του πελάτη σε μορφή Applet με διαχείριση σφαλμάτων επικοινωνίας
- Συνιστώσα TimeoutServer - υλοποίηση του εξυπηρέτη με διαχείριση σφαλμάτων επικοινωνίας
- Η υλοποίηση του απλού εξυπηρέτη κρύβει και μια δεύτερη παραδοχή: το υποκείμενο δίκτυο δεν θα παρουσιάζει σφάλματα κατά την μετάδοση μηνυμάτων. Όπως και πριν, την παραδοχή αυτή την κάναμε για να απλοποιήσουμε την υλοποίηση. Ένας τρόπος για να υλοποιηθούν σωστά οι συνιστώσες του πελάτη και εξυπηρέτη για τον έλεγχο πιθανών σφαλμάτων κατά την αποστολή/μετάδοση μηνυμάτων βασίζεται στην χρήση timeouts:
- Ακολουθώντας την παραπάνω γραμμή υλοποίησης για το σύστημα που μελετάμε, αρχικά επεκτείνουμε την συνιστώσα Socket για διαχείριση sockets που θα μεταφέρουν τα αντικείμενα του επίπεδου Αντικειμένων/Οντολογιών μεταξύ του πελάτη και εξυπηρέτη. Στην συνέχεια, χρησιμοποιώντας την νέα συνιστώσα SuperSocket υλοποιούμε τον εξυπηρέτη και τον πελάτη. Σημειώνουμε ότι οι υλοποιήσεις που προσφέρονται παρακάτω δεν είναι ολοκληρωμένες: μόνο ορισμένες από τις λειτουργίες του συστήματος (όπως αποτυπώνονται στην ανάλυση και σχεδιασμό) έχουν υλοποιηθεί, οι υπόλοιπες λειτουργίες που δεν έχουν υλοποιηθεί αφήνονται ως άσκηση:
- Συνιστώσα SuperSocket - επέκταση της συνιστώσας Socket για διαχείριση sockets που μεταφέρουν objects
- Applet RemoteClient - υλοποίηση του πελάτη της εφαρμογής σε μορφή Applet
- Συνιστώσα Server - υλοποίηση του εξυπηρέτη της εφαρμογής
- Ακολουθώντας την παραπάνω γραμμή υλοποίησης για το σύστημα που μελετάμε, αρχικά επεκτείνουμε την συνιστώσα Socket για διαχείριση sockets που θα μεταφέρουν τα αντικείμενα του επίπεδου Αντικειμένων/Οντολογιών μεταξύ του πελάτη και εξυπηρέτη. Στην συνέχεια, χρησιμοποιώντας την νέα συνιστώσα SuperSocket υλοποιούμε τον εξυπηρέτη και τον πελάτη. Σημειώνουμε ότι οι υλοποιήσεις που προσφέρονται παρακάτω δεν είναι ολοκληρωμένες: μόνο ορισμένες από τις λειτουργίες του συστήματος (όπως αποτυπώνονται στην ανάλυση και σχεδιασμό) έχουν υλοποιηθεί, οι υπόλοιπες λειτουργίες που δεν έχουν υλοποιηθεί αφήνονται ως άσκηση:
- Τεχνολογία Υλοποίησης Servlets (Κατανεμημένα Αντικείμενα)
- Τεχνολογία Υλοποίησης RMI (Κλήση Απομακρυσμένων Διαδικασιών)
- Τεχνολογία Υλοποίησης JMS (Συστήματα Ανταλλαγής Μηνυμάτων)
Project
|
Ομαδική άσκηση (1-3 άτομα) με στόχο την ανάλυση, σχεδιασμό και ανάπτυξη ενός κατανεμημένου συστήματος. Η κάθε ομάδα έχει δικαίωμα επιλογής (α) θέματος και (β) τεχνολογίας υλοποίησης που θα χρησιμοποιηθεί κατά την ανάπτυξη. Οι ομάδες καλούνται να (i) παρουσιάσουν την ανάλυση και σχεδιασμό του συστήματος που επιλέξανε (5' παρουσίαση με χρήση διαφανειών και projector), (ii) αναπτύξουν το σύστημα σύμφωνα με την τεχνολογία που επιλέξανε και (iii) παρουσιάσουν το σύστημά τους και ορισμένα επιλεγμένα θέματα υλοποίησης (10' παρουσίαση με χρήση διαφανειών και projector). Θέματα Επιλογής (ένα):
|
Θέματα Επιλογής:
Τα δύο θέματα παρουσιάστηκαν κατά την 1η Διάλεξη και το 1ο Φροντιστήριο του μαθήματος.
- Σύστημα διαχείρισης σκεπτόμενων συσκευών
- Το σύστημα πρέπει να προσφέρει (κατ'ελάχιστον) τις παρακάτω λειτουργίες:
- Εμφάνιση συσκευών συστήματος
- Καταγραφή μετρήσεων αισθητήρων
- Εμφάνιση τελευταίων μετρήσεων αισθητήρων ανά συσκευή
- Εμφάνιση ιστορικών μετρήσεων συγκεκριμένης συσκευής
- Οι υπόλοιπες απαιτήσεις του συστήματος θα συζητηθούν για κάθε ομάδα ξεχωριστά.
- Περισσότερο υλικό για τις απαιτήσεις και λειτουργίες ενός συστήματος διαχείρισης σκεπτόμενων συσκευών:
- Σύστημα χρονομίσθωσης αυτοκινήτων
- Το σύστημα πρέπει να προσφέρει (κατ'ελάχιστον) τις παρακάτω λειτουργίες:
- Αναζήτηση οχημάτων
- Εμφάνιση ανοικτών ωρών ανά όχημα
- Κράτηση ωρών οχήματος
- Αναζήτηση κρατήσεων
- Οι υπόλοιπες απαιτήσεις του συστήματος θα συζητηθούν για κάθε ομάδα ξεχωριστά.
- Περισσότερο υλικό για τις απαιτήσεις και λειτουργίες ενός συστήματος χρονομίσθωσης αυτοκινήτων:
Ομάδες:
| Ομάδα / Μέλη | Θέμα | Τεχνολογία | Σελίδα Ομάδας | 1ο Μέρος | 2ο Μέρος | 3ο Μέρος | Βαθμός |
| Δάφνη-Σταυρούλα Ζώη (2847) Χέλμης Χαράλαμπος (2982) |
2 | RMI | 1η Ομάδα | 10 | 10 | 10 | 10 |
| Μαλή Γεωργία (2885) Μιχαήλ Παναγιώτης (2890) Δημητρός Κων/νος (3046) |
1 | Servlets | 2η Ομάδα | 10 | 9 | 10 | 9.5 |
| Κολαΐτη Ειρήνη (2860) | 2 | RMI | 3η Ομάδα | 10 | 7.5 | 9 | 8.5 |
| Παππά Αντιγόνη (2918) Πατρούμπα Δήμητρα (2923) Χαρίση Αμαλία (2979) |
- | - | 4η Ομάδα | - | - | - | - |
| Γεωργίου Κωσταντίνος (2614) Παπαγεωργίου Απόστολος (2703) Παπαλουκόπουλος Γιώργος (2710) |
1 | RMI | 5η Ομάδα | 10 | 10 | 10 | 10 |
| Ασημακόπουλος Σωτήρης (3021) | 1 | RMI | 6η Ομάδα | 10 | 9 | 9 | 9.5 |
Τελικός Βαθμός
|
Ο τελικός βαθμός υπολογίζεται σύμφωνα με τον βαθμό του project. Η στρογγυλοποιήση γίνεται στο τέλος, στο πλησιέστερο (προς τα πάνω, δηλ. υπέρ του φοιτητή) μισό ή ολόκληρο βαθμό. |
Βαθμολογία:
| ΑΜ | Ονοματεπώνυμο | Βαθμός |
| 2612 | Γεωργίου Κωσταντίνος | 10 |
| 2703 | Παπαγεωργίου Απόστολος | 10 |
| 2710 | Παπαλουκόπουλος Γιώργος | 10 |
| 2847 | Δάφνη-Σταυρούλα Ζώη | 10 |
| 2860 | Κολαΐτη Ειρήνη | 8.5 |
| 2885 | Μαλή Γεωργία | 9.5 |
| 2890 | Μιχαήλ Παναγιώτης | 9.5 |
| 2982 | Χέλμης Χαράλαμπος | 10 |
| 3021 | Ασημακόπουλος Σωτήρης | 9.5 |
| 3046 | Δημήτριος Κωνσταντίνος | 9.5 |

