Κατανόηση των μεσιτών μηνυμάτων. Μαθαίνοντας τους μηχανισμούς των μηνυμάτων με το ActiveMQ και τον Kafka. Κεφάλαιο 1

Γεια σε όλους!

Άρχισα να μεταφράζω ένα μικρό βιβλίο:
«Κατανόηση Message Brokers",
συγγραφέας: Jakub Korab, εκδότης: O'Reilly Media, Inc., ημερομηνία δημοσίευσης: Ιούνιος 2017, ISBN: 9781492049296.

Από την εισαγωγή του βιβλίου:
»... Αυτό το βιβλίο θα σας διδάξει πώς να σκέφτεστε τα συστήματα ανταλλαγής μηνυμάτων μεσίτη, συγκρίνοντας και αντιπαραβάλλοντας δύο δημοφιλείς τεχνολογίες μεσιτών: το Apache ActiveMQ και το Apache Kafka. Θα περιγράψει τις περιπτώσεις χρήσης και τα κίνητρα ανάπτυξης που οδήγησαν τους προγραμματιστές τους να υιοθετήσουν πολύ διαφορετικές προσεγγίσεις στον ίδιο τομέα—ανταλλαγή μηνυμάτων μεταξύ συστημάτων με έναν ενδιάμεσο μεσίτη. Θα εξετάσουμε αυτές τις τεχνολογίες από την αρχή και θα τονίσουμε τον αντίκτυπο των διαφόρων σχεδιαστικών επιλογών στην πορεία. Θα αποκτήσετε μια βαθιά κατανόηση και των δύο προϊόντων, θα κατανοήσετε πώς πρέπει και πώς δεν πρέπει να χρησιμοποιούνται και τι πρέπει να αναζητήσετε όταν εξετάζετε άλλες τεχνολογίες ανταλλαγής μηνυμάτων στο μέλλον ... "

Μέρη που έχουν μεταφραστεί μέχρι τώρα:
Κεφάλαιο 1 Εισαγωγή
Κεφάλαιο 3. Κάφκα

Θα δημοσιεύσω ολοκληρωμένα κεφάλαια όπως είναι μεταφρασμένα.

ΚΕΦΑΛΑΙΟ 1

Εισαγωγή

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

Οι άνθρωποι έχουν συνήθως πολύ περιορισμένη επαφή με την υποδομή ανταλλαγής μηνυμάτων. Συχνά συνδέονται σε ένα σύστημα που δημιουργήθηκε πριν από πολύ καιρό ή κάνουν λήψη μιας διανομής από το Διαδίκτυο, την εγκαθιστούν στο PROM και αρχίζουν να γράφουν κώδικα για αυτό. Μετά την εκτέλεση της υποδομής στο PROM, τα αποτελέσματα μπορούν να αναμειχθούν: τα μηνύματα χάνονται λόγω αστοχιών, η αποστολή δεν λειτουργεί όπως περιμένατε ή οι μεσίτες «κολλούν» τους παραγωγούς σας ή δεν στέλνουν μηνύματα στους καταναλωτές σας.

Ακούγεται γνωστό?

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

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

  • Το σύστημα δεν θα χάσει ποτέ μηνύματα
  • Η επεξεργασία των μηνυμάτων θα γίνεται διαδοχικά
  • Η προσθήκη καταναλωτών θα κάνει το σύστημα πιο γρήγορο
  • Τα μηνύματα θα παραδοθούν μόνο μία φορά

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

Αυτό το βιβλίο θα σας διδάξει πώς να σκέφτεστε τα συστήματα ανταλλαγής μηνυμάτων που βασίζονται σε μεσίτες συγκρίνοντας και αντιπαραβάλλοντας δύο δημοφιλείς τεχνολογίες μεσιτών: το Apache ActiveMQ και το Apache Kafka. Θα περιγράψει τις περιπτώσεις χρήσης και τα κίνητρα ανάπτυξης που οδήγησαν τους προγραμματιστές τους να υιοθετήσουν πολύ διαφορετικές προσεγγίσεις στον ίδιο τομέα—ανταλλαγή μηνυμάτων μεταξύ συστημάτων με έναν ενδιάμεσο μεσίτη. Θα εξετάσουμε αυτές τις τεχνολογίες από την αρχή και θα τονίσουμε τον αντίκτυπο των διαφόρων σχεδιαστικών επιλογών στην πορεία. Θα αποκτήσετε μια βαθιά κατανόηση και των δύο προϊόντων, θα κατανοήσετε πώς πρέπει και πώς δεν πρέπει να χρησιμοποιούνται και τι πρέπει να αναζητήσετε όταν εξετάζετε άλλες τεχνολογίες ανταλλαγής μηνυμάτων στο μέλλον.

Πριν ξεκινήσουμε, ας δούμε τα βασικά.

Τι είναι ένα Σύστημα Μηνυμάτων και γιατί χρειάζεται;

Για να επικοινωνήσουν δύο εφαρμογές μεταξύ τους, πρέπει πρώτα να ορίσουν μια διεπαφή. Ο ορισμός αυτής της διεπαφής περιλαμβάνει την επιλογή μιας μεταφοράς ή πρωτοκόλλου, όπως HTTP, MQTT ή SMTP, και τη διαπραγμάτευση των μορφών μηνυμάτων που θα ανταλλάσσονται μεταξύ των συστημάτων. Αυτή μπορεί να είναι μια αυστηρή διαδικασία, όπως ο καθορισμός ενός σχήματος XML με απαιτήσεις κόστους ωφέλιμου φορτίου μηνυμάτων ή μπορεί να είναι πολύ λιγότερο επίσημη, όπως μια συμφωνία μεταξύ δύο προγραμματιστών ότι κάποιο μέρος του αιτήματος HTTP θα περιέχει το αναγνωριστικό πελάτη .

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

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

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

Από σημείο σε σημείο

Η Αλεξάνδρα πηγαίνει στο ταχυδρομείο για να στείλει στον Αδάμ ένα πακέτο. Πηγαίνει στο παράθυρο και δίνει στον υπάλληλο το πακέτο. Ο υπάλληλος παίρνει το πακέτο και δίνει στην Αλεξάνδρα μια απόδειξη. Ο Άνταμ δεν χρειάζεται να είναι σπίτι όταν αποστέλλεται το δέμα. Η Αλεξάνδρα είναι σίγουρη ότι το πακέτο θα παραδοθεί στον Άνταμ κάποια στιγμή στο μέλλον και μπορεί να συνεχίσει να ασχολείται με την επιχείρησή της. Αργότερα κάποια στιγμή ο Αδάμ λαμβάνει ένα πακέτο.

Αυτό είναι ένα παράδειγμα μοντέλου ανταλλαγής μηνυμάτων από σημείο σε σημείο. Το ταχυδρομείο εδώ λειτουργεί ως μηχανισμός διανομής δεμάτων, διασφαλίζοντας ότι κάθε δέμα παραδίδεται μία φορά. Η χρήση ταχυδρομείου διαχωρίζει την πράξη της αποστολής ενός δέματος από την παράδοση του πακέτου.
Στα κλασικά συστήματα ανταλλαγής μηνυμάτων, το μοντέλο από σημείο σε σημείο υλοποιείται μέσω ουρές. Η ουρά λειτουργεί ως buffer FIFO (first in, first out) που μπορεί να εγγραφεί από έναν ή περισσότερους καταναλωτές. Κάθε μήνυμα παραδίδεται μόνο σε έναν από τους εγγεγραμμένους καταναλωτές. Οι ουρές συνήθως προσπαθούν να διανείμουν τα μηνύματα δίκαια μεταξύ των καταναλωτών. Μόνο ένας καταναλωτής θα λάβει αυτό το μήνυμα.

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

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

Εκδότης-Συνδρομητής

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

Αυτό είναι ένα παράδειγμα μοντέλου ανταλλαγής μηνυμάτων δημοσίευση-εγγραφή. Η κλήση συνδιάσκεψης λειτουργεί ως μηχανισμός εκπομπής. Το άτομο που μιλά δεν ενδιαφέρεται για το πόσα άτομα καλούν αυτήν τη στιγμή - το σύστημα διασφαλίζει ότι όποιος είναι συνδεδεμένος αυτήν τη στιγμή θα ακούσει τι λέγεται.
Στα κλασικά συστήματα ανταλλαγής μηνυμάτων, το μοντέλο ανταλλαγής μηνυμάτων δημοσίευση-εγγραφή υλοποιείται μέσω Θέματα. Το Topic παρέχει την ίδια μέθοδο μετάδοσης με τον μηχανισμό συνδιάσκεψης. Όταν ένα μήνυμα αποστέλλεται σε ένα θέμα, διανέμεται για όλους τους εγγεγραμμένους χρήστες.

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

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

υβριδικά μοντέλα

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

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

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

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

Τώρα που έχουμε κάποια βασική ορολογία και κατανοούμε σε τι μπορούμε να χρησιμοποιήσουμε ένα σύστημα ανταλλαγής μηνυμάτων, ας πάμε στις λεπτομέρειες.

Η μετάφραση έγινε: tele.gg/middle_java

Το ακόλουθο μεταφρασμένο μέρος: Κεφάλαιο 3. Κάφκα

Για να συνεχιστεί ...

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο