Δημοσίευση / Συνδρομή (Publish / Subscribe)

Η Δημοσίευση / Συνδρομή αποτελεί ένα σχήμα αλληλεπίδρασης μεταξύ δύο οντοτήτων, τους εκδότες (publishers), που δημοσιοποιούν ένα αντικείμενο, και τους συνδρομητές (subscribers), που γίνονται συνδρομητές σε δημοσιοποιημένα αντικείμενα. Πιο συγκεκριμένα, το σχήμα της Δημοσίευσης / Συνδρομής παρέχει στους συνδρομητές την δυνατότητα να εκφράσουν το ενδιαφέρον τους για ένα γεγονός ή ένα πρότυπο γεγονότων έτσι ώστε να ειδοποιηθούν στη συνέχεια για κάποιο γεγονός, που έχει παραχθεί από έναν εκδότη, το οποίο ταιριάζει με το καταχωρημένο ενδιαφέρον τους. Με άλλα λόγια, οι παραγωγοί (δηλαδή οι εκδότες) δημοσιοποιούν πληροφορίες σε έναν υπεύθυνο γεγονότων (event manager) -- ένα κομμάτι λογισμικού / εφαρμογής στο διαδίκτυο -- και οι καταναλωτές (δηλαδή οι συνδρομητές) γίνονται συνδρομητές σε πληροφορίες που επιθυμούν να λάβουν από τον υπεύθυνο γεγονότων. Τυπικά, οι πληροφορίες δηλώνονται με τον όρο γεγονός και η πράξη της παράδοσής τους με τον όρο ειδοποίηση [28].

Figure: Υπηρεσία ειδοποίησης γεγονότων στο πλαίσιο ενός συστήματος Δημοσίευσης / Συνδρομής.
Image event_service

Το βασικό μοντέλο συστήματος για μία αλληλεπίδραση δημοσίευσης / συνδρομής (Σχήμα 2.10) βασίζεται σε μία υπηρεσία ειδοποίησης γεγονότων (event notification service) παρέχοντας αποθήκευση και διαχείριση των συνδρομών και της αποδοτικής παράδοσης των γεγονότων. Μία τέτοια υπηρεσία αναπαριστά ένα φυσικό διαμεσολαβητή μεταξύ των εκδοτών, δρώντας ως παραγωγός γεγονότων, και των συνδρομητών, δρώντας ως καταναλωτής γεγονότων. Οι συνδρομητές καταχωρούν το ενδιαφέρον τους σε γεγονότα με την κλήση της λειτουργίας $ subscribe()$ που προσφέρει η υπηρεσία ειδοποίησης γεγονότων, χωρίς να γνωρίζουν τις πηγές των γεγονότων αυτών. Η συνδρομή ως πληροφορία αποθηκεύεται στην υπηρεσία, ενώ δεν προωθείται ούτε γίνεται γνωστή στους εκδότες. Η συμμετρική λειτουργία της συνδρομής, η $ unsubscribe()$ τερματίζει μία συνδρομή.

Για την παραγωγή ενός γεγονότος, ένας εκδότης καλεί την λειτουργία $ publish()$ που προσφέρει η υπηρεσία γεγονότων. Στη συνέχεια, η υπηρεσία διαδίδει το γεγονός στους σχετιζόμενους συνδρομητές· έτσι μπορεί να δρα ως πληρεξούσιος των συνδρομητών. Κάθε συνδρομητής θα ειδοποιηθεί για εκείνα τα γεγονότα που ταιριάζουν στις καταχωρημένες προτιμήσεις του. Επίσης, οι εκδότες έχουν τη δυνατότητα να διαφημίσουν ένα γεγονός πριν την δημοσιοποίησή του καλώντας την λειτουργία $ advertise()$ . Αυτή η λειτουργία είναι χρήσιμη, διότι δίνει τη δυνατότητα:

  1. στην υπηρεσία διαχείρισης γεγονότων να προσαρμοσθεί στην αναμενόμενη ροή των γεγονότων.
  2. στους συνδρομητές να μάθουν πότε ένας συγκεκριμένος τύπος πληροφορίας θα είναι διαθέσιμος.

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

Figure: Αποσύνδεση χώρου στα πλαίσια ενός συστήματος παροχής υπηρεσιών Δημοσίευσης / Συνδρομής.
Image space_decoupling

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

Figure: Αποσύνδεση χρόνου στα πλαίσια ενός συστήματος παροχής υπηρεσιών Δημοσίευσης / Συνδρομής.
Image time_decoupling

  1. Αποσύνδεση χώρου (Σχήμα 2.11): οι οντότητες που αλληλεπιδρούν δεν χρειάζεται να γνωρίζουν η μία την άλλη. Οι εκδότες δημοσιοποιούν κάποιο γεγονός μέσω της παραπάνω υπηρεσίας και οι συνδρομητές ειδοποιούνται έμμεσα από αυτή. Ούτε οι εκδότες, ούτε οι συνδρομητές γνωρίζουν ποιός/ποιοί έχει/έχουν γίνει συνδρομητής(ές) σε/δημοσιοποιήσει κάποιο γεγονός.
  2. Αποσύνδεση χρόνου (Σχήμα 2.12): οι οντότητες που αλληλεπιδρούν δεν χρειάζεται να συμμετέχουν ενεργά την ίδια χρονική στιγμή. Πιο συγκεκριμένα, ο εκδότης μπορεί να δημοσιοποιήσει κάποια γεγονότα, ενώ ο συνδρομητής να είναι αποσυνδεδεμένος από την υπηρεσία, και αντίστροφα, ο συνδρομητής μπορεί να ειδοποιηθεί από την υπηρεσία για κάποιο γεγονός, ενώ ο πραγματικός εκδότης αυτού γεγονότος να είναι αποσυνδεδεμένος.
  3. Αποσύνδεση συγχρονισμού (Σχήμα 2.13): Οι εκδότες δεν αποτρέπονται από την πολλαπλή δημοσιοποίηση γεγονότων, ενώ οι συνδρομητές μπορούν να ειδοποιούνται για την ύπαρξη ενός γεγονότος που ικανοποιεί τα ενδιαφέροντά τους ασύγχρονα ενόσω πραγματοποιούν κάποιες άλλες ενέργειες ασυσχέτιστες με τη συνδρομή τους. Η παραγωγή και η κατανάλωση των γεγονότων δεν γίνεται στην κύρια ροή ελέγχου των εκδοτών και των συνδρομών και έτσι δεν πραγματοποιούνται σύγχρονα.

Figure: Αποσύνδεση συγχρονισμού στα πλαίσια ενός συστήματος παροχής υπηρεσιών Δημοσίευσης / Συνδρομής.
Image synch_decoupling

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



Charalampos Nikolaou 2008-04-02