Περιεχόμενα Πρόλογος 5 Μέρος 1 Επισκόπηση 27 Κεφάλαιο 1 Εισαγωγή 29 1.1 Συχνές ερωτήσεις για την τεχνολογία λογισμικού 31 1.2 Επαγγελματική και ηθική ευθύνη 41 Κύρια σημεία 46 Πρόσθετες πηγές 46 Ασκήσεις 47 Κεφάλαιο 2 Κοινωνικοτεχνικά συστήματα 49 2.1 Ανακύπτουσες ιδιότητες συστήματος 52 2.2 Τεχνολογία συστημάτων 54 2.3 Οργανισμοί, άνθρωποι, και συστήματα υπολογιστών 65 2.4 Κληρονομημένα συστήματα 70 Κύρια σημεία 73 Πρόσθετες πηγές 73 Ασκήσεις 74
16 Περιεχόμενα Κεφάλαιο 3 Κρίσιμα συστήματα 77 3.1 Ένα απλό σύστημα κρίσιμο από άποψη ασφάλειας 80 3.2 Φερεγγυότητα συστήματος 82 3.3 Διαθεσιμότητα και αξιοπιστία 85 3.4 Ασφάλεια 91 3.5 Προστασία από εξωτερικούς κινδύνους 94 Κύρια σημεία 97 Πρόσθετες πηγές 98 Ασκήσεις 98 Κεφάλαιο 4 Διαδικασίες παραγωγής λογισμικού 101 4.1 Μοντέλα διαδικασιών παραγωγής λογισμικού 103 4.2 Επαναληπτικές διαδικασίες 110 4.3 Δραστηριότητες διαδικασιών 114 4.4 Η Ορθολογική Ενοποιημένη Διαδικασία 123 4.5 Τεχνολογία λογισμικού με τη βοήθεια υπολογιστή 126 Κύρια σημεία 131 Πρόσθετες πηγές 132 Ασκήσεις 132 Κεφάλαιο 5 Διαχείριση έργων 135 5.1 Δραστηριότητες διαχείρισης 137 5.2 Σχεδιασμός έργου 139 5.3 Χρονοπρογραμματισμός έργου 142 5.4 Διαχείριση κινδύνων 149 Κύρια σημεία 156 Πρόσθετες πηγές 157 Ασκήσεις 157
Περιεχόμενα 17 Μέρος 2 Απαιτήσεις 159 Κεφάλαιο 6 Απαιτήσεις λογισμικού 161 6.1 Λειτουργικές και μη λειτουργικές απαιτήσεις 164 6.2 Απαιτήσεις χρήστη 171 6.3 Απαιτήσεις συστήματος 174 6.4 Προδιαγραφές διασύνδεσης 180 6.5 Το έγγραφο των απαιτήσεων λογισμικού 181 Κύρια σημεία 186 Πρόσθετες πηγές 186 Ασκήσεις 187 Κεφάλαιο 7 Διαδικασίες της τεχνολογίας απαιτήσεων 189 7.1 Μελέτες σκοπιμότητας 192 7.2 Εξαγωγή και ανάλυση απαιτήσεων 193 7.3 Επικύρωση απαιτήσεων 207 7.4 Διαχείριση απαιτήσεων 209 Κύρια σημεία 215 Πρόσθετες πηγές 216 Ασκήσεις 216 Κεφάλαιο 8 Μοντέλα συστήματος 219 8.1 Μοντέλα θεματικού πλαισίου 221 8.2 Μοντέλα συμπεριφοράς 224 8.3 Μοντέλα δεδομένων 228 8.4 Μοντέλα αντικειμένων 232 8.5 Δομημένες μέθοδοι 239 Κύρια σημεία 242 Πρόσθετες πηγές 243 Ασκήσεις 243
18 Περιεχόμενα Κεφάλαιο 9 Προδιαγραφή κρίσιμων συστημάτων 245 9.1 Προδιαγραφή καθοδηγούμενη από κινδύνους 247 9.2 Προδιαγραφή ασφάλειας 256 9.3 Προδιαγραφή προστασίας από εξωτερικούς κινδύνους 258 9.4 Προδιαγραφή αξιοπιστίας λογισμικού 261 Κύρια σημεία 268 Πρόσθετες πηγές 269 Ασκήσεις 269 Κεφάλαιο 10 Τυπική προδιαγραφή 271 10.1 Τυπική προδιαγραφή στη διαδικασία παραγωγής λογισμικού 274 10.2 Προδιαγραφή διασύνδεσης υποσυστημάτων 277 10.3 Προδιαγραφή συμπεριφοράς 285 Κύρια σημεία 292 Πρόσθετες πηγές 292 Ασκήσεις 292 Μέρος 3 Σχεδιασμός 295 Κεφάλαιο 11 Αρχιτεκτονικός σχεδιασμός 297 11.1 Αποφάσεις αρχιτεκτονικού σχεδιασμού 301 11.2 Οργάνωση συστήματος 303 11.3 Στυλ αποδόμησης σε υπομονάδες 309 11.4 Στυλ ελέγχου 313 11.5 Αρχιτεκτονικές αναφοράς 318 Κύρια σημεία 321 Πρόσθετες πηγές 322 Ασκήσεις 322
Περιεχόμενα 19 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων 325 12.1 Αρχιτεκτονικές πολυεπεξεργασίας 328 12.2 Αρχιτεκτονικές πελάτη-διακομιστή 329 12.3 Αρχιτεκτονικές κατανεμημένων αντικειμένων 335 12.4 Διεπιχειρησιακή κατανεμημένη επεξεργασία 343 Κύρια σημεία 351 Πρόσθετες πηγές 351 Ασκήσεις 352 Κεφάλαιο 13 Αρχιτεκτονικές εφαρμογών 353 13.1 Συστήματα επεξεργασίας δεδομένων 356 13.2 Συστήματα επεξεργασίας συναλλαγών 359 13.3 Συστήματα επεξεργασίας συμβάντων 367 13.4 Συστήματα επεξεργασίας γλώσσας 370 Κύρια σημεία 373 Πρόσθετες πηγές 373 Ασκήσεις 374 Κεφάλαιο 14 Αντικειμενοστρεφής σχεδιασμός 377 14.1 Αντικείμενα και κλάσεις αντικειμένων 380 14.2 Μια διαδικασία αντικειμενοστρεφούς σχεδιασμού 385 14.3 Εξέλιξη του σχεδιασμού 400 Κύρια σημεία 402 Πρόσθετες πηγές 403 Ασκήσεις 403 Κεφάλαιο 15 Σχεδιασμός λογισμικού πραγματικού χρόνου 405 15.1 Σχεδιασμός συστήματος 409 15.2 Λειτουργικά συστήματα πραγματικού χρόνου 413 15.3 Συστήματα παρακολούθησης και ελέγχου 416 15.4 Συστήματα απόκτησης δεδομένων 422 Κύρια σημεία 426 Πρόσθετες πηγές 426 Ασκήσεις 427
20 Περιεχόμενα Κεφάλαιο 16 Σχεδιασμός διασύνδεσης χρήστη 429 16.1 Ζητήματα σχεδιασμού 434 16.2 Η διαδικασία σχεδιασμού της διασύνδεσης χρήστη 445 16.3 Ανάλυση χρηστών 446 16.4 Κατασκευή πρωτοτύπων διασύνδεσης χρήστη 450 16.5 Αξιολόγηση διασύνδεσης 452 Κύρια σημεία 455 Πρόσθετες πηγές 455 Ασκήσεις 456 Μέρος 4 Ανάπτυξη 457 Κεφάλαιο 17 Γρήγορη ανάπτυξη λογισμικού 459 17.1 Ευέλικτες μέθοδοι 464 17.2 Ακραίος προγραμματισμός 467 17.3 Γρήγορη ανάπτυξη εφαρμογών 474 17.4 Κατασκευή πρωτοτύπων λογισμικού 479 Κύρια σημεία 483 Πρόσθετες πηγές 484 Ασκήσεις 484 Κεφάλαιο 18 Επαναχρησιμοποίηση λογισμικού 487 18.1 Το τοπίο της επαναχρησιμοποίησης 491 18.2 Σχεδιαστικά υποδείγματα 494 18.3 Επαναχρησιμοποίηση βάσει γεννητριών 497 18.4 Πλαίσια εργασίας εφαρμογών 500 18.5 Επαναχρησιμοποίηση συστημάτων εφαρμογών 502 Κύρια σημεία 513 Πρόσθετες πηγές 514 Ασκήσεις 514
Περιεχόμενα 21 Κεφάλαιο 19 Τεχνολογία λογισμικού βάσει συστατικών στοιχείων 515 19.1 Συστατικά στοιχεία και μοντέλα συστατικών στοιχείων 518 19.2 Η διαδικασία CBSE 528 19.3 Σύνθεση συστατικών στοιχείων 531 Κύρια σημεία 539 Πρόσθετες πηγές 540 Ασκήσεις 540 Κεφάλαιο 20 Ανάπτυξη κρίσιμων συστημάτων 541 20.1 Φερέγγυες διαδικασίες 546 20.2 Φερέγγυος προγραμματισμός 547 20.3 Ανοχή σε σφάλματα 554 20.4 Ανεκτικές σε σφάλματα αρχιτεκτονικές 563 Κύρια σημεία 567 Πρόσθετες πηγές 568 Ασκήσεις 568 Κεφάλαιο 21 Εξέλιξη λογισμικού 569 21.1 Δυναμική της εξέλιξης των προγραμμάτων 571 21.2 Συντήρηση λογισμικού 574 21.3 Διαδικασίες εξέλιξης 580 21.4 Εξέλιξη κληρονομημένων συστημάτων 586 Κύρια σημεία 592 Πρόσθετες πηγές 593 Ασκήσεις 593 Μέρος 5 Επαλήθευση και επικύρωση 595 Κεφάλαιο 22 Επαλήθευση και επικύρωση 597 22.1 Σχεδιασμός επαλήθευσης και επικύρωσης 602 22.2 Επιθεωρήσεις λογισμικού 604
22 Περιεχόμενα 22.3 Αυτοματοποιημένη στατική ανάλυση 610 22.4 Επαλήθευση και τυπικές μέθοδοι 614 Κύρια σημεία 619 Πρόσθετες πηγές 619 Ασκήσεις 620 Κεφάλαιο 23 Δοκιμές λογισμικού 621 23.1 Δοκιμές συστήματος 625 23.2 Δοκιμές συστατικών στοιχείων 633 23.3 Σχεδιασμός περιπτώσεων δοκιμής 637 23.4 Αυτοματοποίηση δοκιμών 648 Κύρια σημεία 650 Πρόσθετες πηγές 651 Ασκήσεις 651 Κεφάλαιο 24 Επικύρωση κρίσιμων συστημάτων 653 24.1 Επικύρωση αξιοπιστίας 655 24.2 Εγγύηση ασφάλειας 661 24.3 Αξιολόγηση προστασίας από εξωτερικούς κινδύνους 669 24.4 Πειστήρια ασφάλειας και φερεγγυότητας 671 Κύρια σημεία 675 Πρόσθετες πηγές 675 Ασκήσεις 676 Μέρος 6 Διαχείριση 679 Κεφάλαιο 25 Διαχείριση ανθρώπινου δυναμικού 681 25.1 Επιλογή του προσωπικού 683 25.2 Παρακίνηση ανθρώπων 686 25.3 Διαχείριση ομάδων 690 25.4 Το μοντέλο Ωριμότητας Ανθρώπινων Ικανοτήτων 699
Περιεχόμενα 23 Κύρια σημεία 702 Πρόσθετες πηγές 702 Ασκήσεις 703 Κεφάλαιο 26 Εκτίμηση κόστους λογισμικού 705 26.1 Παραγωγικότητα λογισμικού 708 26.2 Τεχνικές εκτιμήσεων 713 26.3 Αλγοριθμική μοντελοποίηση κόστους 716 26.4 Διάρκεια και στελέχωση έργων 732 Κύρια σημεία 734 Πρόσθετες πηγές 734 Ασκήσεις 735 Κεφάλαιο 27 Διαχείριση ποιότητας 737 27.1 Ποιότητα διαδικασιών και προϊόντων 740 27.2 Διασφάλιση ποιότητας και πρότυπα 741 27.3 Σχεδιασμός ποιότητας 748 27.4 Έλεγχος ποιότητας 749 27.5 Μετρήσεις και μετρικές λογισμικού 751 Κύρια σημεία 760 Πρόσθετες πηγές 761 Ασκήσεις 761 Κεφάλαιο 28 Βελτίωση διαδικασιών 763 28.1 Ποιότητα διαδικασιών και προϊόντων 765 28.2 Κατηγοριοποίηση διαδικασιών 768 28.3 Μετρήσεις διαδικασιών 770 28.4 Ανάλυση και μοντελοποίηση διαδικασιών 772 28.5 Μεταβολή διαδικασιών 777 28.6 Το πλαίσιο βελτίωσης διαδικασιών του μοντέλου CMMI 779 Κύρια σημεία 786 Πρόσθετες πηγές 786 Ασκήσεις 787
24 Περιεχόμενα Κεφάλαιο 29 Διαχείριση διευθετήσεων 789 29.1 Σχεδιασμός διαχείρισης διευθετήσεων 792 29.2 Διαχείριση αλλαγών 796 29.3 Διαχείριση πρώιμων και τελικών εκδόσεων 799 29.4 Δόμηση συστήματος 807 29.5 Εργαλεία CASE για τη διαχείριση διευθετήσεων 808 Κύρια σημεία 813 Πρόσθετες πηγές 814 Ασκήσεις 814 Μέρος 7 Αναδυόμενες τεχνολογίες 817 Κεφάλαιο 30 Τεχνολογία προστασίας από εξωτερικούς κινδύνους 819 30.1 Έννοιες προστασίας από εξωτερικούς κινδύνους 822 30.2 Διαχείριση κινδύνων σε σχέση με την προστασία 824 30.3 Σχεδιασμός με στόχο την προστασία 831 30.4 Επιβιωσιμότητα συστημάτων 842 Κύρια σημεία 846 Πρόσθετες πηγές 847 Ασκήσεις 847 Κεφάλαιο 31 Υπηρεσιοκεντρική τεχνολογία λογισμικού 849 31.1 Οι υπηρεσίες ως επαναχρησιμοποιήσιμα συστατικά στοιχεία 853 31.2 Τεχνολογία υπηρεσιών 858 31.3 Υπηρεσιοκεντρική ανάπτυξη λογισμικού 868 Κύρια σημεία 877 Πρόσθετες πηγές 878 Ασκήσεις 878
Περιεχόμενα 25 Κεφάλαιο 32 Θεματοκεντρική ανάπτυξη λογισμικού 879 32.1 Διαχωρισμός των ζητουμένων 881 32.2 Θέματα, σημεία σύνδεσης, και σημειοτομές 886 32.3 Τεχνολογία λογισμικού με θέματα 890 Κύρια σημεία 903 Πρόσθετες πηγές 904 Ασκήσεις 904 Γλωσσάρι 905 Βιβλιογραφία 919 Ευρετήριο 939 Ευρετήριο συγγραφέων 953
12 Αρχιτεκτονικές κατανεμημένων συστημάτων Στόχοι Το κεφάλαιο αυτό έχει στόχο να εξετάσει μοντέλα της αρχιτεκτονικής λογισμικού για κατανεμημένα συστήματα. Όταν το ολοκληρώσετε: θα γνωρίζετε τα πλεονεκτήματα και τα μειονεκτήματα των αρχιτεκτονικών κατανεμημένων συστημάτων θα έχετε κατανοήσει τα δύο κύρια μοντέλα αρχιτεκτονικής κατανεμημένων συστημάτων, τα συστήματα πελάτη-διακομιστή και τα συστήματα κατανεμημένων αντικειμένων θα έχετε κατανοήσει την έννοια του διαχειριστή αιτήσεων διάθεσης α- ντικειμένων και τις αρχές στις οποίες βασίζονται τα πρότυπα CORBA θα έχετε γνωρίσει την ομότιμη και την υπηρεσιοκεντρική αρχιτεκτονική ως τρόπους υλοποίησης διεπιχειρησιακών κατανεμημένων συστημάτων. Περιεχόμενα 12.1 Αρχιτεκτονικές πολυεπεξεργασίας 12.2 Αρχιτεκτονικές πελάτη-διακομιστή 12.3 Αρχιτεκτονικές κατανεμημένων αντικειμένων 12.4 Διεπιχειρησιακή κατανεμημένη επεξεργασία 12 Αρχιτεκτονικές κατανεμημένων συστημάτων
326 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων Σήμερα, σχεδόν όλα τα μεγάλα συστήματα που βασίζονται σε υπολογιστές είναι κατανεμημένα. Κατανεμημένο σύστημα (distributed system) είναι ένα σύστημα στο οποίο η επεξεργασία των πληροφοριών κατανέμεται σε πολλούς υπολογιστές και δεν περιορίζεται σε μία μόνο μηχανή. Προφανώς, η τεχνολογία των κατανεμημένων συστημάτων έχει πολλά κοινά με την τεχνολογία οποιουδήποτε άλλου λογισμικού, ωστόσο κατά το σχεδιασμό αυτού του τύπου συστήματος θα πρέπει να ληφθούν υπόψη κάποια ειδικά ζητήματα. Ορισμένα από αυτά τα ζητήματα τα έχω ήδη αναφέρει στην παρουσίαση των αρχιτεκτονικών πελάτη-διακομιστή, στο Κεφάλαιο 11, και εδώ θα τα περιγράψω πιο αναλυτικά. Οι Coulouris κ.ά. (Coulouris, κ.ά., 2001) εξετάζουν τα σημαντικά χαρακτηριστικά των κατανεμημένων συστημάτων. Προσδιορίζουν τα ακόλουθα πλεονεκτήματα της χρήσης μιας κατανεμημένης προσέγγισης για την ανάπτυξη συστημάτων: 1. Μερισμός πόρων. Ένα κατανεμημένο σύστημα επιτρέπει την κοινή χρήση πόρων υλικού και λογισμικού όπως δίσκων, εκτυπωτών, αρχείων, και μεταγλωττιστών που σχετίζονται με τους υπολογιστές ενός δικτύου. 2. Ανοιχτή λειτουργία. Τα κατανεμημένα συστήματα γενικά είναι ανοιχτά συστήματα, που σημαίνει ότι είναι σχεδιασμένα γύρω από καθιερωμένα πρωτόκολλα τα οποία επιτρέπουν το συνδυασμό εξοπλισμού και λογισμικού από διάφορους κατασκευαστές. 3. Ταυτοχρονισμός. Σε ένα κατανεμημένο σύστημα, μπορούν να εκτελούνται πολλές διεργασίες την ίδια στιγμή σε ξεχωριστούς υπολογιστές του δικτύου. Οι διεργασίες αυτές είναι δυνατό (αλλά όχι απαραίτητο) να επικοινωνούν μεταξύ τους κατά την κανονική τους λειτουργία. 4. Επεκτασιμότητα. Τουλάχιστον θεωρητικά, τα κατανεμημένα συστήματα είναι ε- πεκτάσιμα, από την άποψη ότι οι δυνατότητές τους μπορούν να αυξηθούν με την προσθήκη νέων πόρων ώστε να αντιμετωπίζουν νέες απαιτήσεις για το σύστημα. Στην πράξη, το δίκτυο που συνδέει τους μεμονωμένους υπολογιστές στο σύστημα μπορεί να περιορίζει το βαθμό επεκτασιμότητας. Αν προστεθούν πολλοί νέοι υ- πολογιστές, τότε η χωρητικότητα του δικτύου ίσως είναι ανεπαρκής. 5. Ανοχή σε σφάλματα. Η διαθεσιμότητα πολλών υπολογιστών και η δυνατότητα α- ναπαραγωγής πληροφοριών σε πολλά σημεία σημαίνει ότι τα κατανεμημένα συστήματα μπορούν να παρουσιάζουν ανοχή σε ορισμένες αστοχίες υλικού και λογισμικού (δείτε το Κεφάλαιο 20). Τα περισσότερα κατανεμημένα συστήματα είναι σε θέση να παρέχουν κάποιο είδος υποβαθμισμένης εξυπηρέτησης σε περίπτωση αστοχιών ολοκληρωτική απώλεια εξυπηρέτησης παρουσιάζεται μόνο ό- ταν υπάρχει αστοχία του δικτύου. Για επιχειρησιακά συστήματα μεγάλης κλίμακας, τα πλεονεκτήματα αυτά σημαίνουν ότι τα κατανεμημένα συστήματα έχουν αντικαταστήσει σε μεγάλο βαθμό τα παλιά συγκεντρωτικά συστήματα που αναπτύσσονταν στις δεκαετίες του 1980 και του 1990. Ωστόσο, συγκρινόμενα με τα συστήματα που εκτελούνται σε ένα μόνο επεξεργαστή ή σε μια συστοιχία επεξεργαστών, τα κατανεμημένα συστήματα έχουν μια σειρά από μειονεκτήματα:
12 Αρχιτεκτονικές κατανεμημένων συστημάτων 327 1. Πολυπλοκότητα. Τα κατανεμημένα συστήματα είναι πιο πολύπλοκα από τα συγκεντρωτικά συστήματα. Αυτό δυσχεραίνει την κατανόηση των ανακυπτουσών ιδιοτήτων τους και τη δοκιμή τους. Για παράδειγμα, αντί η απόδοση του συστήματος να εξαρτάται από την ταχύτητα ενός επεξεργαστή, εξαρτάται από το εύρος ζώνης του δικτύου και από την ταχύτητα των επεξεργαστών του δικτύου. Η μεταφορά πόρων από ένα σημείο του συστήματος σε ένα άλλο μπορεί να επηρεάσει ριζικά την απόδοση του συστήματος. 2. Προστασία από εξωτερικούς κινδύνους. Το σύστημα μπορεί να προσπελάζεται από πολλούς διαφορετικούς υπολογιστές, και υπάρχει το ενδεχόμενο υποκλοπής της δικτυακής κυκλοφορίας. Αυτό κάνει δυσκολότερη τη διασφάλιση της ακεραιότητας των δεδομένων του συστήματος και την αποφυγή της υποβάθμισης των υπηρεσιών του από επιθέσεις άρνησης εξυπηρέτησης. 3. Διαχειρισιμότητα. Οι υπολογιστές ενός συστήματος μπορεί να είναι διαφορετικών τύπων και να εκτελούν διαφορετικές εκδόσεις του λειτουργικού συστήματος. Βλάβες σε μια μηχανή μπορεί να διαδοθούν σε άλλες μηχανές, με απρόσμενες συνέπειες. Αυτό σημαίνει ότι απαιτείται μεγαλύτερη προσπάθεια για τη διαχείριση και τη διατήρηση του συστήματος σε λειτουργία. 4. Μη προβλεψιμότητα. Όπως γνωρίζουν όλοι οι χρήστες του Ιστού, τα κατανεμημένα συστήματα είναι απρόβλεπτα στις αποκρίσεις τους. Η απόκριση εξαρτάται από το συνολικό φόρτο του συστήματος, την οργάνωσή του, και το φόρτο του δικτύου. Καθώς όλα αυτά μπορεί να αλλάξουν σε σύντομο χρονικό διάστημα, ο χρόνος απόκρισης σε μια αίτηση χρήστη μπορεί να διαφέρει δραματικά από τη μία αίτηση στην άλλη. Η σχεδιαστική πρόκληση είναι ο σχεδιασμός του λογισμικού και του υλικού που θα παρέχουν τα επιθυμητά χαρακτηριστικά των κατανεμημένων συστημάτων, ενώ ταυτόχρονα θα ελαχιστοποιούν τα προβλήματα που είναι εγγενή σε αυτά τα συστήματα. Για να πετύχετε κάτι τέτοιο, θα πρέπει να κατανοείτε τα πλεονεκτήματα και τα μειονεκτήματα των διαφόρων αρχιτεκτονικών κατανεμημένων συστημάτων. Εδώ θα καλύψουμε δύο γενικούς τύπους αρχιτεκτονικών κατανεμημένων συστημάτων: 1. Αρχιτεκτονικές πελάτη-διακομιστή. Σε αυτή την προσέγγιση, το σύστημα μπορεί να θεωρηθεί ως ένα σύνολο υπηρεσιών που παρέχονται σε πελάτες οι οποίοι κάνουν χρήση αυτών των υπηρεσιών. Στα συστήματα αυτά, οι διακομιστές και οι πελάτες αντιμετωπίζονται διαφορετικά. 2. Αρχιτεκτονικές κατανεμημένων αντικειμένων. Σε αυτή την περίπτωση δεν υπάρχει διάκριση μεταξύ διακομιστών και πελατών, και το σύστημα μπορεί να θεωρηθεί ως ένα σύνολο αλληλεπιδρώντων αντικειμένων των οποίων η θέση δεν ενδιαφέρει. Δεν γίνεται διάκριση μεταξύ παρόχου και χρήστη υπηρεσιών. Τόσο η αρχιτεκτονική πελάτη-διακομιστή όσο και η αρχιτεκτονική κατανεμημένων αντικειμένων χρησιμοποιούνται ευρέως στη βιομηχανία, ωστόσο η κατανομή των εφαρμογών αφορά κυρίως το εσωτερικό ενός μεμονωμένου οργανισμού, είναι δηλαδή ενδοεπιχειρησιακή. Θα εξετάσουμε και δύο άλλους τύπους κατανεμημένων αρχιτεκτονικών που είναι καταλληλότερες για διεπιχειρησιακή κατανομή: τις ομότιμες αρχιτεκτονικές (peer-to-peer, p2p) και τις υπηρεσιοκεντρικές αρχιτεκτονικές. Μέχρι τώρα, οι
328 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων ομότιμες αρχιτεκτονικές χρησιμοποιούνταν κυρίως σε προσωπικά συστήματα, αλλά τώρα αρχίζουν να χρησιμοποιούνται σε επιχειρηματικές εφαρμογές. Τη στιγμή που γράφεται αυτό το βιβλίο, τα υπηρεσιοκεντρικά συστήματα έχουν μόλις κάνει την εμφάνισή τους, ωστόσο η υπηρεσιοκεντρική προσέγγιση είναι πιθανό να αποτελέσει ένα πολύ σημαντικό μοντέλο κατανεμημένων αρχιτεκτονικών στο μέλλον. Τα συστατικά στοιχεία ενός κατανεμημένου συστήματος μπορούν να υλοποιηθούν σε διαφορετικές γλώσσες προγραμματισμού και να εκτελούνται σε εντελώς διαφορετικούς τύπους επεξεργαστών. Τα μοντέλα δεδομένων, η αναπαράσταση των πληροφοριών, και τα πρωτόκολλα επικοινωνίας μπορεί όλα να είναι διαφορετικά. Ένα κατανεμημένο σύστημα επομένως χρειάζεται λογισμικό που να μπορεί να διαχειρίζεται αυτά τα ετερογενή μέρη, και να διασφαλίζει ότι είναι σε θέση να επικοινωνούν και να ανταλλάσσουν δεδομένα. Το λογισμικό αυτό αναφέρεται με τον όρο ενδιάμεσο λογισμικό (middleware), για να τονιστεί το γεγονός ότι βρίσκεται στη μέση μεταξύ των διαφόρων κατανεμημένων συστατικών στοιχείων του συστήματος. Ο Bernstein (Bernstein, 1996) συνοψίζει τους τύπους ενδιάμεσου λογισμικού που είναι διαθέσιμοι για την υποστήριξη της κατανεμημένης επεξεργασίας. Το ενδιάμεσο λογισμικό είναι λογισμικό γενικής χρήσης που συνήθως αγοράζεται έτοιμο και δε γράφεται από προγραμματιστές εφαρμογών. Παραδείγματα ενδιάμεσου λογισμικού είναι το λογισμικό για τη διαχείριση της επικοινωνίας με βάσεις δεδομένων, οι διαχειριστές συναλλαγών, οι μετατροπείς δεδομένων, και οι ελεγκτές επικοινωνιών. Αργότερα σε αυτό το κεφάλαιο θα εξετάσουμε τους διαχειριστές αιτήσεων διάθεσης αντικειμένων (object request brokers), μια πολύ σημαντική κατηγορία ενδιάμεσου λογισμικού για κατανεμημένα συστήματα. Τα κατανεμημένα συστήματα συνήθως αναπτύσσονται με τη χρήση μιας αντικειμενοστρεφούς προσέγγισης. Τα συστήματα αυτά αποτελούνται από χαλαρά ενοποιημένα, ανεξάρτητα μέρη, κάθε ένα από τα οποία μπορεί να αλληλεπιδρά απευθείας με τους χρήστες ή με άλλα μέρη του συστήματος. Κάποια μέρη του συστήματος μπορεί να χρειάζεται να αποκρίνονται σε ανεξάρτητα συμβάντα. Τα αντικείμενα λογισμικού αντανακλούν αυτά τα χαρακτηριστικά, συνεπώς αποτελούν φυσιoλογικές αφαιρέσεις για την αναπαράσταση συστατικών στοιχείων σε κατανεμημένα συστήματα. 12.1 Αρχιτεκτονικές πολυεπεξεργασίας Το απλούστερο μοντέλο κατανεμημένου συστήματος είναι ένα σύστημα πολυεπεξεργασίας, με το σύστημα λογισμικού να αποτελείται από μια σειρά διεργασιών οι οποίες μπορούν (χωρίς να είναι απαραίτητο) να εκτελούνται σε ξεχωριστούς επεξεργαστές. Το μοντέλο αυτό είναι συνηθισμένο σε μεγάλα συστήματα πραγματικού χρόνου. Όπως θα δούμε στο Κεφάλαιο 15, τα συστήματα αυτά συλλέγουν πληροφορίες, λαμβάνουν αποφάσεις χρησιμοποιώντας αυτές τις πληροφορίες, και στέλνουν σήματα σε μηχανισμούς δράσης οι οποίοι τροποποιούν το περιβάλλον του συστήματος. Βέβαια, οι διεργασίες που ασχολούνται με τη συλλογή πληροφοριών, τη λήψη αποφάσεων, και τον έλεγχο των μηχανισμών δράσης θα μπορούσαν να εκτελούνται όλες στον ίδιο επεξεργαστή, κάτω από τον έλεγχο ενός χρονοπρογραμματιστή (scheduler). Ωστόσο, η χρήση πολλών επεξεργαστών βελτιώνει την απόδοση και την ευελιξία
12.2 Αρχιτεκτονικές πελάτη-διακομιστή 329 του συστήματος. Η κατανομή των διεργασιών σε επεξεργαστές μπορεί να είναι προκαθορισμένη (κάτι συνηθισμένο σε κρίσιμα συστήματα) ή να πραγματοποιείται κάτω από τον έλεγχο ενός διεκπεραιωτή (dispatcher) ο οποίος αποφασίζει ποιες διεργασίες θα κατανεμηθούν στον κάθε επεξεργαστή. Ένα παράδειγμα συστήματος αυτού του τύπου παρουσιάζεται στην Εικόνα 12.1. Πρόκειται για ένα απλοποιημένο μοντέλο συστήματος ελέγχου οδικής κυκλοφορίας. Ένα σύνολο κατανεμημένων αισθητήρων συλλέγει πληροφορίες για την κυκλοφοριακή ροή και τις επεξεργάζεται τοπικά, πριν τις στείλει σε ένα κέντρο ελέγχου. Οι χειριστές λαμβάνουν αποφάσεις χρησιμοποιώντας αυτές τις πληροφορίες και δίνουν οδηγίες σε μια ξεχωριστή διεργασία ελέγχου φωτεινών σηματοδοτών κυκλοφορίας. Στο παράδειγμα αυτό, υπάρχουν ξεχωριστές λογικές διεργασίες που διαχειρίζονται τους αισθητήρες, το κέντρο ελέγχου, και τους φωτεινούς σηματοδότες. Αυτές οι λογικές διεργασίες μπορεί να είναι μεμονωμένες διεργασίες ή ομάδα διεργασιών. Στο παράδειγμά μας εκτελούνται σε ξεχωριστούς επεξεργαστές. Τα συστήματα λογισμικού που αποτελούνται από πολλές διεργασίες δεν είναι υ- ποχρεωτικά κατανεμημένα συστήματα. Αν υπάρχουν διαθέσιμοι περισσότεροι από έ- νας επεξεργαστές τότε μπορεί να χρησιμοποιηθεί η τεχνική της κατανομής, αλλά οι σχεδιαστές του συστήματος δε χρειάζεται πάντοτε να λαμβάνουν υπόψη τους ζητήματα κατανομής κατά τη διαδικασία του σχεδιασμού. Η σχεδιαστική προσέγγιση για ένα σύστημα αυτού του τύπου είναι ουσιαστικά ίδια με εκείνη των συστημάτων πραγματικού χρόνου, όπως θα δούμε στο Κεφάλαιο 15. 12.2 Αρχιτεκτονικές πελάτη-διακομιστή Έχουμε ήδη συναντήσει την έννοια των αρχιτεκτονικών πελάτη-διακομιστή στο Κεφάλαιο 11. Σε μια αρχιτεκτονική πελάτη-διακομιστή, η εφαρμογή μοντελοποιείται ως ένα σύνολο υπηρεσιών που παρέχονται από διακομιστές και ένα σύνολο πελατών που χρησιμοποιούν αυτές τις υπηρεσίες (Orfali και Harkey, 1998). Οι πελάτες πρέπει Εικόνα 12.1 Πολυεπεξεργαστικό σύστημα ελέγχου οδικής κυκλοφορίας
330 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων να γνωρίζουν τους διακομιστές που είναι διαθέσιμοι, αλλά συνήθως δε γνωρίζουν την ύπαρξη άλλων πελατών. Πελάτες και διακομιστές αποτελούν ξεχωριστές διεργασίες, όπως φαίνεται στην Εικόνα 12.2 η οποία είναι ένα λογικό μοντέλο μιας κατανεμημένης αρχιτεκτονικής πελάτη-διακομιστή. Σε έναν επεξεργαστή μπορούν να εκτελούνται πολλές διεργασίες διακομιστή, δηλαδή δεν υπάρχει αναγκαστικά αντιστοιχία ένα προς ένα μεταξύ διεργασιών και επεξεργαστών στο σύστημα. Η Εικόνα 12.3 δείχνει τη φυσική αρχιτεκτονική ενός συστήματος με έξι υπολογιστές πελάτη και δύο υπολογιστές διακομιστή. Οι υπολογιστές αυτοί μπορούν να εκτελούν τις διεργασίες πελάτη και διακομιστή που είδαμε στην Εικόνα 12.2. Όταν αναφερόμαστε σε πελάτες και διακομιστές, εννοούμε αυτές τις λογικές διεργασίες και όχι τους φυσικούς υπολογιστές στους οποίους εκτελούνται. Ο σχεδιασμός συστημάτων πελάτη-διακομιστή πρέπει να αντανακλά τη λογική δομή της εφαρμογής που αναπτύσσεται. Ένας τρόπος θεώρησης μιας εφαρμογής παρουσιάζεται στην Εικόνα 12.4, η οποία δείχνει ένα σύστημα δομημένο σε τρία επίπεδα. Το επίπεδο της παρουσίασης ασχολείται με την παρουσίαση πληροφοριών στο χρήστη και με το σύνολο της αλληλεπίδρασης με το χρήστη, το επίπεδο επεξεργασίας εφαρμογής ασχολείται με την υλοποίηση της λογικής της εφαρμογής, ενώ το επίπεδο διαχείρισης δεδομένων ασχολείται με όλες τις λειτουργίες της βάσης δεδομένων. Στα συγκεντρωτικά συστήματα, αυτά τα επίπεδα δε χρειάζεται να είναι σαφώς διαχωρισμένα. Ωστόσο, κατά το σχεδιασμό ενός κατανεμημένου συστήματος θα πρέπει να υπάρχει σαφής διάκριση μεταξύ τους, επειδή με αυτόν τον τρόπο το κάθε επίπεδο μπορεί να κατανεμηθεί σε διαφορετικό υπολογιστή. Η απλούστερη αρχιτεκτονική πελάτη-διακομιστή είναι η λεγόμενη διστρωματική αρχιτεκτονική πελάτη-διακομιστή (two-tier), σύμφωνα με την οποία η εφαρμογή είναι οργανωμένη ως ένας διακομιστής (ή πολλοί όμοιοι διακομιστές) και ένα σύνολο πελατών. Όπως φαίνεται στην Εικόνα 12.5, η διστρωματική αρχιτεκτονική πελάτηδιακομιστή μπορεί να πάρει δύο μορφές: Εικόνα 12.2 Σύστημα πελάτη-διακομιστή
12.2 Αρχιτεκτονικές πελάτη-διακομιστή 331 Εικόνα 12.3 Υπολογιστές σε ένα δίκτυο πελάτη-διακομιστή 1. Μοντέλο ελαφρύ πελάτη (thin-client). Στο μοντέλο ελαφρύ πελάτη, όλη η επεξεργασία της εφαρμογής και η διαχείριση των δεδομένων πραγματοποιούνται στο διακομιστή. Ο πελάτης είναι απλώς υπεύθυνος για την εκτέλεση του λογισμικού παρουσίασης. 2. Μοντέλο βαρύ πελάτη (fat-client). Σε αυτό το μοντέλο, ο διακομιστής είναι υπεύθυνος μόνο για τη διαχείριση των δεδομένων. Η λογική της εφαρμογής και οι αλληλεπιδράσεις με το χρήστη του συστήματος υλοποιούνται στο λογισμικό του πελάτη. Όταν ένα κληρονομημένο συγκεντρωτικό σύστημα, όπως αυτά που περιγράφηκαν στο Κεφάλαιο 2, εξελίσσεται σε αρχιτεκτονική πελάτη-διακομιστή, η απλούστερη προσέγγιση που μπορεί να χρησιμοποιηθεί είναι η διστρωματική αρχιτεκτονική ελαφρύ πελάτη. Η διασύνδεση χρήστη αυτών των συστημάτων μεταφέρεται σε προσωπικούς υπολογιστές, και η ίδια η εφαρμογή συμπεριφέρεται ως διακομιστής αναλαμβάνοντας όλη την επεξεργασία της εφαρμογής και τη διαχείριση δεδομένων. Μοντέλα ελαφρύ πελάτη μπορούν επίσης να υλοποιηθούν όταν οι πελάτες είναι απλές δικτυακές συσκευές και όχι προσωπικοί υπολογιστές ή σταθμοί εργασίας. Η δικτυακή συσκευή εκτελεί ένα πρόγραμμα περιήγησης Διαδικτύου και η διασύνδεση χρήστη υλοποιείται μέσω αυτού του συστήματος. Εικόνα 12.4 Επίπεδα εφαρμογής
332 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων Εικόνα 12.5 Ελαφρείς πελάτες και βαρείς πελάτες Ένα σοβαρό μειονέκτημα του μοντέλου ελαφρύ πελάτη είναι ότι επιβάλλει μεγάλο επεξεργαστικό φορτίο τόσο στο διακομιστή όσο και στο δίκτυο. Ο διακομιστής είναι υπεύθυνος για όλη την επεξεργασία, και αυτό μπορεί να συνεπάγεται την παραγωγή σημαντικής κυκλοφορίας στο δίκτυο μεταξύ πελάτη και διακομιστή. Οι σημερινές υπολογιστικές συσκευές διαθέτουν μεγάλη επεξεργαστική ισχύ, η οποία με την προσέγγιση ελαφρύ πελάτη παραμένει σε μεγάλο βαθμό αχρησιμοποίητη. Το μοντέλο βαρύ πελάτη αξιοποιεί αυτή τη διαθέσιμη επεξεργαστική ισχύ και κατανέμει στον πελάτη τόσο την επεξεργαστική λογική της εφαρμογής όσο και την παρουσίαση. Ο διακομιστής είναι ουσιαστικά ένας διακομιστής συναλλαγών που χειρίζεται όλες τις συναλλαγές της βάσης δεδομένων. Ένα παράδειγμα τέτοιου τύπου αρχιτεκτονικής είναι τα τραπεζικά συστήματα ATM, με το ATM να έχει το ρόλο του πελάτη, ενώ ο διακομιστής είναι ένα mainframe που φιλοξενεί τη βάση δεδομένων των λογαριασμών πελατών. Το υλικό του ATM διεκπεραιώνει μεγάλο μέρος της επεξεργασίας που αφορά τον πελάτη στα πλαίσια μιας συναλλαγής. Αυτό το κατανεμημένο σύστημα ATM παρουσιάζεται στην Εικόνα 12.6. Παρατηρήστε ότι τα ATM δε συνδέονται απευθείας με τη βάση δεδομένων των πελατών, αλλά με μια μονάδα παρακολούθησης τηλεπεξεργασίας (teleprocessing monitor). Η Εικόνα 12.6 Σύστημα ATM πελάτη-διακομιστή
12.2 Αρχιτεκτονικές πελάτη-διακομιστή 333 μονάδα παρακολούθησης τηλεπεξεργασίας, ή διαχειριστής συναλλαγών, είναι ένα σύστημα ενδιάμεσου λογισμικού που οργανώνει τις επικοινωνίες με τους μακρινούς πελάτες και διατάσσει σειριακά τις συναλλαγές των πελατών για επεξεργασία από τη βάση δεδομένων. Η χρήση σειριακών συναλλαγών σημαίνει ότι το σύστημα μπορεί να ανακάμπτει από σφάλματα χωρίς να επηρεάζονται τα δεδομένα του συστήματος. Αν και το μοντέλο βαρύ πελάτη κατανέμει την επεξεργασία πιο αποτελεσματικά από το μοντέλο ελαφρύ πελάτη, η διαχείριση του συστήματος είναι πιο σύνθετη. Η λειτουργικότητα της εφαρμογής εκτείνεται σε πολλούς υπολογιστές. Όταν πρέπει να γίνουν αλλαγές στο λογισμικό της εφαρμογής, απαιτείται επανεγκατάσταση σε κάθε υπολογιστή πελάτη. Αυτό μπορεί να έχει σημαντικό κόστος όταν ένα σύστημα διαθέτει εκατοντάδες πελάτες. Η εμφάνιση του φορητού κώδικα (όπως οι μικροεφαρμογές Java ή τα χειριστήρια Active X) που μπορεί να μεταφέρεται από το διακομιστή στον πελάτη, έκανε δυνατή την ανάπτυξη συστημάτων πελάτη-διακομιστή τα οποία βρίσκονται κάπου ανάμεσα στα μοντέλα ελαφρύ πελάτη και βαρύ πελάτη. Ένα μέρος του λογισμικού επεξεργασίας της εφαρμογής μπορεί να μεταφέρεται στον πελάτη ως φορητός κώδικας, μειώνοντας έτσι τον φόρτο του διακομιστή. Η διασύνδεση χρήστη δημιουργείται με τη χρήση ενός προγράμματος περιήγησης του Ιστού που διαθέτει ενσωματωμένη υποστήριξη για την εκτέλεση του κώδικα που μεταφέρεται. Το πρόβλημα της διστρωματικής προσέγγισης πελάτη-διακομιστή είναι ότι τα τρία λογικά επίπεδα παρουσίαση, επεξεργασία εφαρμογής, και διαχείριση δεδομένων πρέπει να αντιστοιχιστούν σε δύο υπολογιστικά συστήματα τον πελάτη και το διακομιστή. Αυτό σημαίνει ότι αν επιλεγεί το μοντέλο ελαφρύ πελάτη μπορεί να παρουσιαστούν προβλήματα επεκτασιμότητας και απόδοσης, ενώ με το μοντέλο βαρύ πελάτη είναι πιθανό να εμφανιστούν προβλήματα διαχείρισης του συστήματος. Για να αποφευχθούν τέτοιου είδους ζητήματα, μια εναλλακτική προσέγγιση είναι η χρήση τριστρωματικής αρχιτεκτονικής πελάτη-διακομιστή (three-tier). Σε αυτή την αρχιτεκτονική, η παρουσίαση, η επεξεργασία της εφαρμογής, και η διαχείριση δεδομένων είναι λογικά ξεχωριστές διεργασίες που εκτελούνται σε διαφορετικούς επεξεργαστές (Εικόνα 12.7). Παράδειγμα τριστρωματικής αρχιτεκτονικής πελάτη-διακομιστή είναι ένα διαδικτυακό τραπεζικό σύστημα (Εικόνα 12.8). Η βάση δεδομένων των πελατών της τράπεζας (που συνήθως βρίσκεται σε κάποιο mainframe) παρέχει υπηρεσίες διαχείρισης δεδομένων. ένας διακομιστής Ιστού παρέχει τις υπηρεσίες της εφαρμογής όπως η μεταφορά μετρητών, η έκδοση στοιχείων κίνησης λογαριασμών, οι πληρωμές, κ.ο.κ. και ο υπολογιστής του χρήστη με ένα πρόγραμμα περιήγησης του Ιστού είναι ο πελάτης. Το σύστημα αυτό διαθέτει επεκτασιμότητα, επειδή είναι σχετικά εύκολο να προστεθούν νέοι διακομιστές Ιστού καθώς αυξάνεται ο αριθμός των πελατών. Η χρήση μιας τριστρωματικής αρχιτεκτονικής σε αυτή την περίπτωση επιτρέπει τη βέλτιστη μεταφορά πληροφοριών μεταξύ του διακομιστή Ιστού και του διακομιστή βάσης δεδομένων. Η επικοινωνία μεταξύ αυτών των συστημάτων μπορεί να χρησιμοποιεί γρήγορα πρωτόκολλα επικοινωνίας χαμηλού επιπέδου. Για το χειρισμό της ανάκτησης πληροφοριών από τη βάση δεδομένων, χρησιμοποιείται αποδοτικό ενδιάμεσο λογισμικό που υποστηρίζει ερωτήματα βάσεων δεδομένων σε γλώσσα SQL (Structured Query Language δομημένη γλώσσα ερωτημάτων).
334 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων Εικόνα 12.7 Τριστρωματική αρχιτεκτονική πελάτη-διακομιστή Εικόνα 12.8 Η αρχιτεκτονική κατανομής ενός διαδικτυακού τραπεζικού συστήματος Σε μερικές περιπτώσεις, το τριστρωματικό μοντέλο πελάτη-διακομιστή πρέπει να επεκτείνται σε μια πολυστρωματική παραλλαγή με βάση την οποία προστίθενται στο σύστημα επιπλέον διακομιστές. Τα πολυστρωματικά συστήματα είναι χρήσιμα όταν οι εφαρμογές χρειάζεται να προσπελάζουν και να χρησιμοποιούν δεδομένα από διαφορετικές βάσεις δεδομένων. Σε αυτή την περίπτωση, μεταξύ του διακομιστή εφαρμογής και των διακομιστών βάσεων δεδομένων τοποθετείται ένας διακομιστής ενοποίησης (integration server). Ο διακομιστής αυτός συλλέγει τα κατανεμημένα δεδομένα και τα παρουσιάζει στην εφαρμογή σαν να προέρχονταν από μία μόνο βάση δεδομένων. Οι τριστρωματικές αρχιτεκτονικές πελάτη-διακομιστή και οι πολυστρωματικές παραλλαγές τους, που κατανέμουν την επεξεργασία της εφαρμογής σε πολλούς διακομιστές, είναι από τη φύση τους πιο επεκτάσιμες από τις διστρωματικές αρχιτεκτονικές. Η κυκλοφορία στο δίκτυο περιορίζεται, σε αντίθεση με τις διστρωματικές αρχιτεκτονικές ελαφρύ πελάτη. Η επεξεργασία της εφαρμογής είναι το πιο ευμετάβλητο μέρος του συστήματος, και μπορεί να ενημερωθεί εύκολα επειδή βρίσκεται σε κεντρικό σημείο. Σε ορισμένες περιπτώσεις, η επεξεργασία μπορεί να κατανεμηθεί μεταξύ της λογικής της εφαρμογής και των διακομιστών διαχείρισης δεδομένων, με αποτέλεσμα την ταχύτερη απόκριση στις αιτήσεις των πελατών. Οι σχεδιαστές αρχιτεκτονικών πελάτη-διακομιστή πρέπει να λαμβάνουν υπόψη τους μια σειρά από παράγοντες όταν επιλέγουν την καταλληλότερη αρχιτεκτονική. Η Εικόνα 12.9 παρουσιάζει περιπτώσεις όπου οι αρχιτεκτονικές πελάτη-διακομιστή που περιγράφηκαν είναι πιθανό να ταιριάζουν.
12.3 Αρχιτεκτονικές κατανεμημένων αντικειμένων 335 Αρχιτεκτονική Διστρωματική αρχιτεκτονική Π/Δ με ελαφρείς πελάτες Διστρωματική αρχιτεκτονική Π/Δ με βαρείς πελάτες Τριστρωματική ή πολυστρωματική αρχιτεκτονική Π/Δ Εφαρμογές Κληρονομημένα συστήματα εφαρμογών, στα οποία ο διαχωρισμός της επεξεργασίας εφαρμογής και της διαχείρισης δεδομένων είναι ανέφικτος. Εφαρμογές με έμφαση στους υπολογισμούς, όπως οι μεταγλωττιστές, οι οποίες έχουν περιορισμένες (ή και μηδαμινές) απαιτήσεις διαχείρισης δεδομένων. Εφαρμογές που χειρίζονται μεγάλο όγκο δεδομένων (για περιήγηση και υποβολή ερωτημάτων), οι οποίες έχουν περιορισμένες ή μηδαμινές απαιτήσεις επεξεργασίας. Εφαρμογές στις οποίες η επεξεργασία παρέχεται μέσω έτοιμου λογισμικού (π.χ. Microsoft Excel) στον πελάτη. Εφαρμογές που απαιτούν επεξεργασία δεδομένων με μεγάλες απαιτήσεις υπολογιστικής ισχύος (π.χ. οπτικοποίηση δεδομένων). Εφαρμογές με σχετικά σταθερή λειτουργικότητα τελικού χρήστη, οι οποίες χρησιμοποιούνται σε περιβάλλοντα με καλά εδραιωμένη διαχείριση συστήματος. Εφαρμογές μεγάλης κλίμακας με εκατοντάδες ή χιλιάδες πελάτες. Εφαρμογές στις οποίες τόσο τα δεδομένα όσο και η εφαρμογή είναι ευμετάβλητα. Εφαρμογές όπου ενοποιούνται δεδομένα από πολλές πηγές. Εικόνα 12.9 Χρήση διαφόρων αρχιτεκτονικών πελάτη-διακομιστή 12.3 Αρχιτεκτονικές κατανεμημένων αντικειμένων Στο μοντέλο πελάτη-διακομιστή για τα κατανεμημένα συστήματα, οι πελάτες είναι διαφορετικοί από τους διακομιστές. Ένας πελάτης δέχεται υπηρεσίες από το διακομιστή και όχι από κάποιον άλλο πελάτη οι διακομιστές μπορούν να δρουν ως πελάτες, δεχόμενοι υπηρεσίες από άλλους διακομιστές, αλλά δε ζητούν υπηρεσίες από πελάτες οι πελάτες πρέπει να γνωρίζουν τις υπηρεσίες που παρέχουν συγκεκριμένοι διακομιστές, καθώς επίσης και το πώς να έρθουν σε επαφή μαζί τους. Το μοντέλο αυτό είναι κατάλληλο για πολλούς τύπους εφαρμογών, αλλά περιορίζει την ευελιξία των σχεδιαστών συστημάτων, οι οποίοι χρειάζεται να αποφασίσουν σε ποια θέση θα παρέχονται οι υ- πηρεσίες. Οι σχεδιαστές πρέπει επίσης να προνοήσουν για τη δυνατότητα επεκτασιμότητας, παρέχοντας κάποια μέσα για την κατανομή του φόρτου των διακομιστών καθώς προστίθενται στο σύστημα περισσότεροι πελάτες. Μια πιο γενική προσέγγιση στο σχεδιασμό κατανεμημένων συστημάτων είναι η κατάργηση της διάκρισης μεταξύ πελάτη και διακομιστή, και ο σχεδιασμός της αρχιτεκτονικής του συστήματος ως αρχιτεκτονική κατανεμημένων αντικειμένων. Σε μια τέτοια αρχιτεκτονική (Εικόνα 12.10), τα θεμελιώδη συστατικά στοιχεία του συστήματος είναι αντικείμενα που διαθέτουν μια διασύνδεση για ένα σύνολο υπηρεσιών τις οποίες παρέχουν. Αυτές οι υπηρεσίες καλούνται από άλλα αντικείμενα, χωρίς να υ- πάρχει λογική διάκριση μεταξύ πελάτη (παραλήπτη μιας υπηρεσίας) και διακομιστή (παρόχου μιας υπηρεσίας). Τα αντικείμενα μπορεί να είναι κατανεμημένα σε ένα σύνολο υπολογιστών ενός δικτύου και να επικοινωνούν μέσω ενδιάμεσου λογισμικού. Αυτό το ενδιάμεσο λογισμικό ονομάζεται διαχειριστής αιτήσεων για τη διάθεση αντικειμένων (object request
336 Κεφάλαιο 12 Αρχιτεκτονικές κατανεμημένων συστημάτων Εικόνα 12.10 Αρχιτεκτονική κατανεμημένων αντικειμένων broker), και ο ρόλος του είναι να παρέχει μια ομοιόμορφη διασύνδεση μεταξύ των α- ντικειμένων. Το λογισμικό αυτό παρέχει ένα σύνολο υπηρεσιών που επιτρέπουν στα αντικείμενα να επικοινωνούν ή να προστίθενται και να αφαιρούνται από το σύστημα. Θα εξετάσουμε τους διαχειριστές αιτήσεων για τη διάθεση αντικειμένων στην Ενότητα 12.3.1. Τα πλεονεκτήματα του μοντέλου κατανεμημένων αντικειμένων είναι τα εξής: Επιτρέπει στο σχεδιαστή του συστήματος να καθυστερήσει τη λήψη αποφάσεων για το πού και το πώς θα πρέπει να παρέχονται οι υπηρεσίες. Αντικείμενα που παρέχουν υπηρεσίες μπορούν να εκτελούνται σε οποιονδήποτε κόμβο του δικτύου. Επομένως, η διάκριση μεταξύ μοντέλων βαρύ πελάτη και ελαφρύ πελάτη δεν έχει νόημα, καθώς δεν υπάρχει ανάγκη να αποφασιστεί εκ των προτέρων η θέση που θα βρίσκονται τα αντικείμενα της λογικής της εφαρμογής. Είναι μια πολύ ανοιχτή αρχιτεκτονική συστήματος η οποία επιτρέπει την προσθήκη νέων πόρων όποτε χρειαστεί. Όπως θα δούμε στην επόμενη ενότητα, έχουν αναπτυχθεί και υλοποιηθεί πρότυπα επικοινωνίας αντικειμένων που επιτρέπουν σε αντικείμενα τα οποία έχουν γραφτεί σε διαφορετικές γλώσσες προγραμματισμού να επικοινωνούν και να παρέχουν υπηρεσίες το ένα στο άλλο. Το σύστημα είναι ευέλικτο και επεκτάσιμο. Για να ανταπεξέρχεται σε διαφορετικά φορτία εργασίας, είναι σε θέση να δημιουργεί διαφορετικά στιγμιότυπα του εαυτού του στα οποία η ίδια υπηρεσία παρέχεται από διαφορετικά ή αναπαραγμένα αντικείμενα. Καθώς αυξάνεται ο φόρτος μπορούν να προστίθενται νέα αντικείμενα, χωρίς να επηρεάζονται τα άλλα αντικείμενα του συστήματος. Το σύστημα μπορεί να επαναδιευθετείται δυναμικά, μέσω της μετακίνησης αντικειμένων σε άλλη θέση του δικτύου όταν χρειάζεται. Αυτό μπορεί να είναι σημαντικό όταν υπάρχουν αυξομειώσεις στις απαιτήσεις εξυπηρέτησης. Ένα αντικείμενο που παρέχει υπηρεσίες μπορεί να μετακινηθεί στον ίδιο επεξεργαστή με τα αντικείμενα που ζητούν τις υπηρεσίες, βελτιώνοντας έτσι την απόδοση του συστήματος. Η αρχιτεκτονική κατανεμημένων αντικειμένων μπορεί να χρησιμοποιηθεί ως λογικό μοντέλο με σκοπό τη διάρθρωση και την οργάνωση του συστήματος. Σε αυτή την
12.3 Αρχιτεκτονικές κατανεμημένων αντικειμένων 337 περίπτωση, εξετάζετε πώς μπορεί να παρασχεθεί η λειτουργικότητα της εφαρμογής αποκλειστικά με βάση υπηρεσίες και συνδυασμούς υπηρεσιών. Έπειτα, προσδιορίζετε πώς θα παρέχονται αυτές οι υπηρεσίες με τη χρήση ενός συνόλου κατανεμημένων α- ντικειμένων. Σε αυτό το επίπεδο, τα αντικείμενα που σχεδιάζετε είναι συνήθως αδρομερή αντικείμενα (μερικές φορές λέγονται επιχειρηματικά αντικείμενα business objects) τα οποία παρέχουν ειδικές υπηρεσίες του πεδίου εφαρμογής. Μια εμπορική ε- φαρμογή, για παράδειγμα, μπορεί να διαθέτει επιχειρηματικά αντικείμενα που αφορούν τον έλεγχο της αποθήκης, την επικοινωνία με τους πελάτες, τις παραγγελίες προϊόντων, κ.ο.κ. Αυτό το λογικό μοντέλο μπορεί φυσικά να χρησιμοποιηθεί ως μοντέλο υλοποίησης. Εναλλακτικά, η προσέγγιση των κατανεμημένων αντικειμένων μπορεί να χρησιμοποιηθεί για την υλοποίηση συστημάτων πελάτη-διακομιστή. Σε τέτοιες περιπτώσεις, το λογικό μοντέλο του συστήματος είναι μοντέλο πελάτη-διακομιστή, αλλά τόσο οι πελάτες όσο και οι διακομιστές είναι κατανεμημένα αντικείμενα που επικοινωνούν μέσω ενός διαύλου λογισμικού. Αυτό διευκολύνει την αλλαγή του συστήματος, π.χ. από διστρωματικό σε πολυστρωματικό σύστημα. Σε αυτή την περίπτωση ο διακομιστής ή ο πελάτης μπορεί να μην υλοποιηθούν ως ένα ενιαίο κατανεμημένο αντικείμενο, αλλά να συντεθούν από μικρότερα αντικείμενα που παρέχουν εξειδικευμένες υπηρεσίες. Παράδειγμα τύπου συστήματος για το οποίο μπορεί να είναι κατάλληλη η αρχιτεκτονική κατανεμημένων αντικειμένων είναι ένα σύστημα εξόρυξης δεδομένων (data mining), το οποίο αναζητάει σχέσεις μεταξύ δεδομένων που είναι αποθηκευμένα σε ένα σύνολο βάσεων δεδομένων (Εικόνα 12.11). Ένα παράδειγμα εφαρμογής εξόρυξης δεδομένων είναι μια εμπορική επιχείρηση που διαθέτει καταστήματα τροφίμων και καταστήματα εξοπλισμού, και θέλει να εντοπίσει σχέσεις μεταξύ των αγορών που Εικόνα 12.11 Η αρχιτεκτονική κατανομής ενός συστήματος εξόρυξης δεδομένων