Προγραμματισμός

Κάντε χώρο για JavaSpaces, Μέρος 1

Αυτό το άρθρο ξεκινά ένα δεύτερο νήμα του Τζινιολογία σειρά. Τον Ιούνιο, ο Bill Venners ξεκίνησε Τζινιολογία με μια επισκόπηση της τεχνολογίας Jini - μια ισχυρή νέα υποδομή για την κατασκευή και ανάπτυξη κατανεμημένων συστημάτων που οργανώνονται ως ομοσπονδίες υπηρεσιών. Αυτό το νήμα, το οποίο θα εμφανίζεται κάθε άλλο μήνα σε αυτήν τη στήλη, επικεντρώνεται JavaSpaces, μια βασική υπηρεσία Jini της Sun Microsystems που παρέχει ένα υψηλού επιπέδου μέσο δημιουργίας συνεργατικών και κατανεμημένων εφαρμογών. Εάν δημιουργείτε εφαρμογές με το Jini, θα θελήσετε να μάθετε πώς να χρησιμοποιείτε το JavaSpaces για να συντονίσετε τους συμμετέχοντες σε μια ομοσπονδία Jini. Αλλά είναι επίσης σημαντικό να θυμάστε ότι μπορείτε να χρησιμοποιήσετε JavaSpaces ξεχωριστά από το Jini, ως εργαλείο για τη δημιουργία γενικών κατανεμημένων συστημάτων στην Java. Και στις δύο περιπτώσεις, το JavaSpaces αξίζει μια ματιά, γιατί μπορεί να διευκολύνει σημαντικά το σχεδιασμό και την κωδικοποίηση των κατανεμημένων εφαρμογών.

Κάντε χώρο για JavaSpaces: Διαβάστε ολόκληρη τη σειρά!

  • Μέρος 1. Διευκολύνετε την ανάπτυξη κατανεμημένων εφαρμογών με JavaSpaces
  • Μέρος 2. Δημιουργήστε έναν υπολογιστή υπολογιστών με JavaSpaces
  • Μέρος 3. Συντονίστε τις εφαρμογές σας Jini με JavaSpaces
  • Μέρος 4. Εξερευνήστε τις συναλλαγές Jini με JavaSpaces
  • Μέρος 5. Κάντε τον διακομιστή υπολογιστών σας ισχυρό και επεκτάσιμο

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

Ας αρχίσουμε.

Ένα νέο μοντέλο κατανεμημένων υπολογιστών

Η δημιουργία κατανεμημένων εφαρμογών με συμβατικά εργαλεία δικτύου συνεπάγεται συνήθως τη μετάδοση μηνυμάτων μεταξύ διεργασιών ή επίκλησης μεθόδων σε απομακρυσμένα αντικείμενα. Σε εφαρμογές JavaSpaces, αντίθετα, οι διαδικασίες δεν επικοινωνούν απευθείας, αλλά αντίθετα συντονίζουν τις δραστηριότητές τους ανταλλάσσοντας αντικείμενα μέσω ενός χώρος, ή κοινόχρηστη μνήμη. Μια διαδικασία μπορεί γράφω νέα αντικείμενα σε ένα διάστημα, παίρνω αντικείμενα από ένα διάστημα ή ανάγνωση (φτιάξτε ένα αντίγραφο) αντικειμένων σε ένα διάστημα. Το Σχήμα 1 απεικονίζει διάφορες διεργασίες (που εκπροσωπούνται από τους Dukes) που αλληλεπιδρούν με χώρους που χρησιμοποιούν αυτές τις λειτουργίες. Κατά τη λήψη ή ανάγνωση αντικειμένων, οι διαδικασίες χρησιμοποιούν απλή αντιστοίχιση, με βάση τις τιμές των πεδίων, για να βρουν τα αντικείμενα που τους ενδιαφέρουν. Εάν δεν εντοπιστεί ένα αντικείμενο που να ταιριάζει αμέσως, τότε μια διαδικασία μπορεί να περιμένει έως ότου φτάσει. Στο JavaSpaces, σε αντίθεση με τα συμβατικά καταστήματα αντικειμένων, οι διεργασίες δεν τροποποιούν αντικείμενα στο χώρο ή επικαλούνται απευθείας τις μεθόδους τους - ενώ εκεί, τα αντικείμενα είναι απλώς παθητικά δεδομένα. Για να τροποποιήσετε ένα αντικείμενο, μια διαδικασία πρέπει να το αφαιρέσει ρητά, να το ενημερώσει και να το τοποθετήσει ξανά στο χώρο.

Τα Spaces είναι καταστήματα αντικειμένων με πολλές σημαντικές ιδιότητες που συμβάλλουν στο να καταστήσετε το JavaSpaces ένα ισχυρό, εκφραστικό εργαλείο. Ας ρίξουμε μια πιο προσεκτική ματιά:

  • Τα space μοιράζονται: Πολλές απομακρυσμένες διεργασίες μπορούν να αλληλεπιδρούν ταυτόχρονα με έναν χώρο - ο ίδιος ο χώρος χειρίζεται τις λεπτομέρειες της ταυτόχρονης πρόσβασης, αφήνοντάς σας να εστιάζετε στο σχεδιασμό των πρωτοκόλλων υψηλού επιπέδου μεταξύ των διαδικασιών σας.

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

  • Οι χώροι είναι συσχετιστικοί: Τα αντικείμενα σε ένα διάστημα βρίσκονται μέσω συνεργατική αναζήτηση, όχι από τη θέση μνήμης ή από το αναγνωριστικό. Η συσχετιστική αναζήτηση παρέχει έναν απλό τρόπο εύρεσης των αντικειμένων στα οποία σας ενδιαφέρει ανάλογα με το περιεχόμενό τους, χωρίς να χρειάζεται να γνωρίζετε τι ονομάζεται το αντικείμενο, ποιος το δημιούργησε ή πού αποθηκεύτηκε. Για να αναζητήσετε ένα αντικείμενο, δημιουργείτε ένα πρότυπο (ένα αντικείμενο με μερικά ή όλα τα πεδία του να ορίζονται σε συγκεκριμένες τιμές και τα υπόλοιπα να παραμένουν ως μηδενικό να ενεργούν ως μπαλαντέρ). Ένα αντικείμενο στο χώρο ταιριάζει με ένα πρότυπο εάν ταιριάζει ακριβώς με τα καθορισμένα πεδία του προτύπου. Θα δείτε ότι, με τη συσχετιστική αναζήτηση, μπορείτε εύκολα να εκφράσετε ερωτήματα για αντικείμενα όπως "Υπάρχουν εργασίες για υπολογισμό;" ή "Υπάρχουν απαντήσεις στον κύριο παράγοντα που ζήτησα;"

  • Οι χώροι είναι ασφαλείς συναλλακτικά: Το JavaSpaces χρησιμοποιεί την υπηρεσία συναλλαγών του Jini για να διασφαλίσει ότι μια λειτουργία σε ένα διάστημα είναι ατομική (είτε η λειτουργία εφαρμόζεται είτε όχι). Οι συναλλαγές υποστηρίζονται για μεμονωμένες λειτουργίες σε έναν μόνο χώρο, καθώς και πολλαπλές λειτουργίες σε έναν ή περισσότερους χώρους (είτε εφαρμόζονται όλες οι λειτουργίες είτε καμία δεν είναι). Όπως θα δείτε αργότερα στη σειρά, οι συναλλαγές είναι ένας σημαντικός τρόπος αντιμετώπισης μερικής αποτυχίας.

  • Το Spaces σάς επιτρέπει να ανταλλάσσετε εκτελέσιμο περιεχόμενο: Ενώ βρίσκεστε σε ένα διάστημα, τα αντικείμενα είναι απλώς παθητικά δεδομένα - δεν μπορείτε να τα τροποποιήσετε ή να επικαλεστείτε τις μεθόδους τους. Ωστόσο, όταν διαβάζετε ή λαμβάνετε ένα αντικείμενο από ένα διάστημα, δημιουργείται ένα τοπικό αντίγραφο του αντικειμένου. Όπως και με οποιοδήποτε άλλο τοπικό αντικείμενο, μπορείτε να τροποποιήσετε τα δημόσια πεδία του και να επικαλεστείτε τις μεθόδους του, ακόμη και αν δεν έχετε δει ποτέ κάτι σαν αυτό στο παρελθόν. Αυτή η δυνατότητα σάς παρέχει έναν ισχυρό μηχανισμό για την επέκταση της συμπεριφοράς των εφαρμογών σας μέσω ενός διαστήματος.

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

Προέλευση των JavaSpaces

Περιγράψαμε το JavaSpaces ως ένα νέο μοντέλο κατανεμημένων υπολογιστών, αλλά η προέλευσή του μπορεί να εντοπιστεί στο Πανεπιστήμιο Yale στις αρχές της δεκαετίας του 1980. Εκεί, ο Δρ David Gelernter ανέπτυξε ένα εργαλείο που ονομάζεται Λίντα για τη δημιουργία κατανεμημένων εφαρμογών. Η Linda αποτελείται από έναν μικρό αριθμό εργασιών σε συνδυασμό με ένα επίμονο κατάστημα που ονομάζεται a χώρος πλειάδας. Αυτές οι λειτουργίες είναι ορθογώνιες σε οποιαδήποτε συγκεκριμένη γλώσσα προγραμματισμού. είναι μέρος ενός γλώσσα συντονισμού που μπορεί να προστεθεί σε οποιοδήποτε άλλο γλώσσα υπολογισμού. Το αποτέλεσμα της έρευνας Linda ήταν εκπληκτικό: χρησιμοποιώντας ένα κατάστημα αντικειμένων μαζί με έναν μικρό αριθμό απλών λειτουργιών, μπορείτε εύκολα να εφαρμόσετε μια μεγάλη κατηγορία παράλληλων και κατανεμημένων προβλημάτων χρησιμοποιώντας τεχνικές που ανακουφίζουν πολλές από τις παγίδες της κατασκευής δικτύων συστημάτων. Με άλλα λόγια, τα διαστημικά συστήματα δεν είναι μόνο απλά (απαιτούν μόνο λίγες λειτουργίες), αλλά και εκφραστικά (προσφέρονται καλά για την επίλυση πολλών κατανεμημένων προβλημάτων).

Το έργο του Dr. Gelernter ενέπνευσε την υπηρεσία JavaSpaces της Sun και επηρέασε επίσης το σχεδιασμό των στοιχείων αναζήτησης και ανακάλυψης της βασικής τεχνολογίας Jini (την οποία θα δείτε ως Τζινιολογία η σειρά εξελίσσεται). Ενώ το JavaSpaces κληρονόμησε το διαστημικό μοντέλο από τη Linda, οι σχεδιαστές του JavaSpaces έχουν ενημερώσει το μοντέλο με σημαντικούς τρόπους, αξιοποιώντας τη δύναμη των αντικειμένων Java, Jini, RMI και σειριοποίησης αντικειμένων.

JavaSpaces σε περιβάλλον

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

Συστήματα συνομιλίας

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

Υπολογιστές διακομιστές

Τώρα εξετάστε το ενδεχόμενο ανάλυσης δεδομένων ραδιοτηλεσκοπικού σε πραγματικό χρόνο για σημάδια εξωγήινης ζωής (όπως και το έργο SETI @ home). Τέτοια δεδομένα είναι ογκώδη και η ανάλυσή τους είναι μια εντατικά υπολογιστική δουλειά που ταιριάζει στον παράλληλο υπολογισμό από ένα δίκτυο υπολογιστών - με άλλα λόγια, ένας "υπολογιστής διακομιστής". Χρησιμοποιώντας την τεχνολογία JavaSpaces, μια σειρά εργασιών - για παράδειγμα, μία εργασία ανά κομμάτι δεδομένων που πρέπει να αναλυθεί - γράφεται στο χώρο. Κάθε συμμετέχων υπολογιστής αναζητά το χώρο για μια εργασία, την αφαιρεί, ολοκληρώνει την απαραίτητη υπολογιστική εργασία, ρίχνει το αποτέλεσμα πίσω στο χώρο και στη συνέχεια συνεχίζει να αναζητά περισσότερες εργασίες. Αυτή η προσέγγιση κλιμακώνεται φυσικά: λειτουργεί με τον ίδιο τρόπο είτε υπάρχουν 10 υπολογιστές είτε 1.000. Η προσέγγιση παρέχει επίσης φυσικό εξισορρόπηση φορτίου, δεδομένου ότι κάθε εργαζόμενος παίρνει ακριβώς όσο δουλειά μπορεί να χειριστεί σε ένα δεδομένο χρόνο, με τους αργούς υπολογιστές να κάνουν λιγότερη δουλειά και τους γρήγορους υπολογιστές να κάνουν περισσότερα.

Μεσιτικά συστήματα

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

Μια σύντομη επισκόπηση του API

Τώρα ήρθε η ώρα να εισαγάγετε το JavaSpaces API. Όπως έχουμε ήδη πει, είναι απλό. Στην πραγματικότητα, στο υπόλοιπο αυτού του άρθρου θα καλύψουμε όλα όσα πρέπει να γνωρίζετε (χωρίς κάποιες μικρές λεπτομέρειες) σχετικά με αυτό. Ωστόσο, πριν περιγράψουμε το JavaSpace διεπαφή και τις μεθόδους της, πρέπει πρώτα να μιλήσουμε για τις καταχωρήσεις.

Συμμετοχές

Ένα αντικείμενο που είναι αποθηκευμένο σε ένα χώρο ονομάζεται

είσοδος.

Για να είναι μια καταχώριση, ένα αντικείμενο πρέπει απλώς να εφαρμόσει το

Είσοδος

διεπαφή. Για παράδειγμα, ας καθορίσουμε μια καταχώρηση μηνύματος που μπορείτε να γράψετε σε ένα κενό διάστημα:

εισαγωγή net.jini.core.entry.Entry;

Δημόσια τάξη Μήνυμα υλοποιεί Καταχώριση {public String content;

// ένα δημόσιο μήνυμα κατασκευαστή no-arg () {}}

Εδώ έχουμε ορίσει ένα Μήνυμα τάξη με πεδίο συμβολοσειράς που θα διατηρεί το περιεχόμενο του μηνύματος. Επειδή θέλουμε να χρησιμοποιήσουμε αυτήν την τάξη με κενά, πρέπει να εφαρμόσουμε τη διεπαφή net.jini.core.entry.Entry, το οποίο βρίσκεται στο πακέτο net.jini.core.entry. Είναι σημαντικό να επισημάνουμε ότι Είσοδος είναι ένα διεπαφή δείκτη · Με άλλα λόγια, η διεπαφή δεν περιέχει σταθερές ή μεθόδους και επομένως δεν απαιτεί καμία ειδική εργασία για την εφαρμογή, εκτός από την προσθήκη εφαρμόζει το Entry στον ορισμό της τάξης σας.

Εκτός από την εφαρμογή του Είσοδος διεπαφή, υπάρχουν μερικές άλλες συμβάσεις που πρέπει να ακολουθούν οι καταχωρίσεις μας. Θα έχουμε περισσότερα να πούμε για τους λόγους σε μεταγενέστερα άρθρα, αλλά προς το παρόν θα δούμε απλώς τις γενικές γραμμές. Μια καταχώριση πρέπει να έχει έναν δημόσιο κατασκευαστή που δεν λαμβάνει επιχειρήματα (το λεγόμενο όχι-arg κατασκευαστής); Αυτή η απαίτηση πηγάζει από την υποκείμενη σειριοποίηση που συμβαίνει όταν οι καταχωρήσεις μεταφέρονται μέσα και έξω από κενά. Σημειώστε ότι ο ορισμός μας για Μήνυμα περιέχει έναν κατασκευαστή no-arg. Μια άλλη σύμβαση είναι ότι τα πεδία μιας καταχώρησης πρέπει να δηλώνονται δημόσιο; Αυτό επιτρέπει σε άλλες διαδικασίες να βρουν τις καταχωρίσεις σας σε κενά μέσω συσχετιστικής αναζήτησης, με βάση τις τιμές αυτών των πεδίων. Μια τρίτη σύμβαση είναι ότι τα πεδία μιας καταχώρησης πρέπει να περιέχουν αναφορές σε αντικείμενα, παρά πρωτόγονους τύπους (δηλαδή, εάν πρέπει να ορίσετε ένα πρωτόγονο πεδίο τύπου όπως int, θα πρέπει να χρησιμοποιήσετε την αντίστοιχη τάξη περιτυλίγματος Ακέραιος αριθμός αντι αυτου). Για να βεβαιωθείτε ότι καλύπτετε όλες τις βάσεις σας στον καθορισμό των καταχωρήσεων, σας συνιστούμε να ανατρέξετε Αρχές, μοτίβα και πρακτικές JavaSpaces,ή στην Προδιαγραφή JavaSpaces της Sun Microsystems για λεπτομέρειες. Θα αναφερθούμε επίσης, όπως αναφέρθηκε, σε μερικά από τα καλύτερα σημεία σε μεταγενέστερα άρθρα.

Εκτός από αυτές τις απαιτήσεις, μια καταχώριση είναι όπως οποιαδήποτε άλλη κλάση Java. μπορείτε να το δημιουργήσετε, να επικαλεστείτε τις μεθόδους του και να εκχωρήσετε τιμές στα δημόσια πεδία του. Τώρα που έχουμε ορίσει ένα Μήνυμα τάξη εισόδου, ας δούμε ποιες λειτουργίες είναι διαθέσιμες για αλληλεπίδραση με καταχωρήσεις σε κενά.

Η διεπαφή JavaSpace

Για να αλληλεπιδράσετε με ένα διάστημα, πρέπει να αποκτήσετε πρόσβαση σε ένα αντικείμενο που εφαρμόζει το JavaSpace διεπαφή. Υπάρχουν πολλοί τρόποι για να αποκτήσετε πρόσβαση σε ένα τέτοιο αντικείμενο (μπορείτε, για παράδειγμα, να χρησιμοποιήσετε την αναζήτηση Jini ή το μητρώο RMI) και θα καλύψουμε τις λεπτομέρειες σχετικά με αυτό στο επόμενο άρθρο. Προς το παρόν, θα επικεντρωθούμε στο JavaSpace διεπαφή ίδια.