Το RabbitMQ εξηγείται σε 5 λεπτά ή λιγότερο

Θα δούμε σήμερα πώς να επιταχύνετε τον χρόνο φόρτωσης των σελίδων σας εκτελώντας την πιο βαριά επεξεργασία ασύγχρονα, όλα διαχειριζόμενα πολύ απλά, χάρη στο RabbitMQ.

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

Τι είναι το RabbitMQ

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

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

Πώς λειτουργεί το RabbitHQ

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

Όπως κάθε επικοινωνία, χρειαζόμαστε έναν παραγωγό, ένα μήνυμα και έναν δέκτη. Στη μέση της τούρτας βρίσκεται το RabbitMQ, το οποίο θα ήταν το μέρος όπου το μήνυμα περιμένει τον δέκτη.

Ας κατανοήσουμε καλύτερα πώς λειτουργεί γνωρίζοντας τους τύπους ανταλλαγών που αντιπροσωπεύουν την ανταλλαγή μηνυμάτων.

Τύποι ανταλλαγής

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

Πίστωση εικόνας: CloudAQMP

Οι τύποι ανταλλαγών είναι Direct, Fanout, Topic και Readers.

Άμεση ανταλλαγή

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

Καθώς το RabbitMQ στέλνει το μήνυμα ξεχωριστά σε κάθε ουρά, υπάρχει ώθηση ώστε αυτά τα άλλα συστήματα να λαμβάνουν απευθείας το μήνυμα.

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

  8 Καλύτεροι Κατασκευαστές Διαγραμμάτων ER για Οπτικοποίηση και Σχεδιασμό Βάσεων Δεδομένων

Έτσι, μπορείτε να στείλετε το μήνυμά σας σε έναν μόνο καταναλωτή. αντί να σταλούν σε όλους.

Binding Key: Για να συνδέσετε μια ουρά σε μια ανταλλαγή, πρέπει να δημιουργήσετε μια σύνδεση, μια σχέση μεταξύ μιας ουράς και μιας ανταλλαγής, όπως μια σύνδεση.

Κλειδί δρομολόγησης: Σε αυτό το bind, μπορούμε επίσης να δημιουργήσουμε ένα στοιχείο που ονομάζεται κλειδί δρομολόγησης, το οποίο με άλλα λόγια, είναι ένα κλειδί για την προώθηση των μηνυμάτων μας σε μια συγκεκριμένη ουρά.

Εάν έχετε ένα κλειδί δρομολόγησης X, ένα κλειδί δρομολόγησης Y και ένα κλειδί δρομολόγησης Z, το μήνυμα με το κλειδί δρομολόγησης Y, για παράδειγμα, θα περάσει από την ουρά Υ και θα παραδοθεί απευθείας στον καταναλωτή που ορίσατε για να λάβει το μήνυμα.

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

Ανταλλαγή Fanout

Όταν το μήνυμα αποστέλλεται στην ανταλλαγή, αποστέλλεται σε όλες τις ουρές που συνδέονται με αυτό. Έτσι, εάν έχετε 10 ουρές συνδεδεμένες σε μια ανταλλαγή fanout, όλες οι ουρές θα λάβουν το μήνυμα που στάλθηκε.

Ανταλλαγή θεμάτων

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

Για παράδειγμα: κλειδί δρομολόγησης (x.*); κλειδί δρομολόγησης (*.z); κλειδί δρομολόγησης (*.ε.*).

Τι είναι το AQMP στο RabbitMQ

Το AMQP (Advanced Message Queuing Protocol) είναι ένα ανοιχτό πρωτόκολλο ανταλλαγής μηνυμάτων που χρησιμοποιείται για τον καθορισμό της μεταφοράς μηνυμάτων μεταξύ πολλαπλών εφαρμογών. Είναι παρόμοιο με τα πρωτόκολλα HTTP και TCP καθώς είναι πρωτόκολλο ενσύρματου επιπέδου, εκτός από το ότι επιτρέπει την ασύγχρονη μεταφορά.

Το RabbitMQ επέλεξε να εφαρμόσει το AMQP για διάφορους λόγους. Το πρώτο είναι ότι αυτό το πρωτόκολλο περιγράφεται ως πρότυπο για ενδιάμεσο λογισμικό, σε αντίθεση με το JMS, το οποίο ορίζει ένα API.

Μια διεθνής κοινοπραξία, που περιλαμβάνει μεγάλες εταιρείες όπως η Red Hat, η Cisco Systems και η Microsoft, συνέταξε αυτήν την Προδιαγραφή AMQP. Το δεύτερο είναι η διαλειτουργικότητα αυτού του πρωτοκόλλου, το οποίο επιτρέπει σε οποιαδήποτε εφαρμογή που υλοποιεί το AMQP να επικοινωνεί με έναν μεσίτη AMQP.

Το AMQP δεν είναι το μόνο πρωτόκολλο που χρησιμοποιείται από το RabbitMQ. Η παρακάτω εικόνα αντιπροσωπεύει όλα τα πρωτόκολλα, τις γλώσσες και τα API που υλοποιούνται ή/και υποστηρίζονται από το RabbitMQ.

  Πώς να αποκτήσετε μια πιστοποίηση ServSafe Manager το 2022

Τα καλύτερα χαρακτηριστικά του RabbitMQ

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

Αξιόπιστη αποθήκευση

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

Εάν η επεξεργασία αποτύχει, το RabbitMQ επιτρέπει στο μήνυμα να μπει ξανά στην ουρά για να καταναλωθεί από διαφορετική παρουσία του καταναλωτή ή να υποβληθεί ξανά σε επεξεργασία από τον ίδιο καταναλωτή που αρχικά απέτυχε όταν ανακτήσει.

Το RabbitMQ εγγυάται επίσης την παραγγελία παράδοσης των μηνυμάτων. καταναλώνονται δηλαδή με την ίδια σειρά που έφτασαν στις ουρές RabbitMQ.

Δημιουργία συστάδων

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

Για αυτό, το RabbitMQ επιτρέπει τη δημιουργία συμπλεγμάτων για την οριζόντια κλιμάκωση της λύσης, η οποία είναι διαφανής τόσο για τους παραγωγούς όσο και για τους καταναλωτές.

Ουρές υψηλής διαθεσιμότητας

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

Ευέλικτη δρομολόγηση

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

Υποστήριξη πολλαπλών πρωτοκόλλων

Εκτός από την υποστήριξη του πρωτοκόλλου AMQP, το RabbitMQ υποστηρίζει STOMP, MQTT και HTTP μέσω προσθηκών. Επίσης, ενσωματώνει μηχανισμούς ελέγχου ταυτότητας και ελέγχου πρόσβασης για τα στοιχεία κάθε μεσίτη.

Πραγματικές περιπτώσεις χρήσης RabbitMQ

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

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

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

  Πώς να αποκρύψετε τηλεοπτικές εκπομπές και ταινίες στο Netflix

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

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

Εναλλακτικές λύσεις Rabbit MQ:

Το RabbitMQ είναι πολύ πιο απλό από ό,τι φαίνεται και υπάρχουν πολλές εναλλακτικές λύσεις που περιλαμβάνουν:

#1. IronMQ

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

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

Μπορείτε να εγκαταστήσετε στο cloud, σε κοινόχρηστο ή αποκλειστικό υλικό ή σε εγκαταστάσεις. Διαθέτει επίσης μια σειρά από βιβλιοθήκες πελατών με ευανάγνωστη τεκμηρίωση.

#2. Απάτσι Κάφκα

Το Kafka είναι μια πλατφόρμα με ισχυρή παρουσία στο κατανεμημένο streaming event. Στον πυρήνα του, το Kafka έχει σχεδιαστεί ως ένα αναπαραγόμενο, κατανεμημένο, επίμονο αρχείο καταγραφής δεσμεύσεων.

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

#3. Apache ActiveMQ

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

Υλοποιεί πολλά πρωτόκολλα για ενσωμάτωση, όπως το JMS (native Java) και το Stomp (το οποίο μπορεί να χρησιμοποιηθεί από εφαρμογές PHP), μεταξύ άλλων.

Επιπλέον, η Amazon διαθέτει την «διαχειριζόμενη» έκδοση που ονομάζεται Amazon MQ, η οποία καθιστά πολύ πιο εύκολη τη χρήση της υπηρεσίας.

Τελικές Λέξεις

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

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

Μπορείτε επίσης να εξερευνήσετε ορισμένες αξιόπιστες πλατφόρμες φιλοξενίας RabbitMQ για την εφαρμογή σας.