Το ενδιάμεσο λογισμικό μηνυμάτων είναι μια τεχνολογία ενδιάμεσου λογισμικού που αποτελείται από έναν μηχανισμό μετάδοσης μηνυμάτων ή μια λειτουργία ουράς μηνυμάτων, η οποία χρησιμοποιεί έναν αποτελεσματικό και αξιόπιστο μηχανισμό ανταλλαγής μηνυμάτων για ανταλλαγή δεδομένων ανεξάρτητη από την πλατφόρμα και ενσωματώνει κατανεμημένα συστήματα που βασίζονται στην επικοινωνία δεδομένων. Προς το παρόν, υπάρχουν πολλά προϊόντα MQ στον κλάδο, όπως RabbitMQ, ActiveMQ, ZeroMQ κ.λπ., τα οποία είναι εξαιρετικό ενδιάμεσο λογισμικό μηνυμάτων, αλλά ποιο να επιλέξουμε στο έργο; Αυτό το έγγραφο αξιολογεί και συγκρίνει τα ακόλουθα προϊόντα ουράς μηνυμάτων: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis και memcacheQ
Παρέκβαση: Εδώ μπορούμε πρώτα να σκεφτούμε μια μικρή ερώτηση: "Γιατί χρειαζόμαστε υπηρεσίες ουράς μηνυμάτων σε εφαρμογές web;" ” Για παράδειγμα, ένας μεγάλος αριθμός αιτημάτων εισαγωγής, ενημέρωσης και άλλων αιτημάτων φτάνει ταυτόχρονα στη MySQL, οδηγώντας άμεσα σε αμέτρητα κλειδώματα σειρών και τραπεζιών, ακόμη και σε πάρα πολλά αιτήματα στο τέλος, προκαλώντας έτσι πάρα πολλά σφάλματα σύνδεσης. Χρησιμοποιώντας ουρές μηνυμάτων, μπορούμε να επεξεργαστούμε αιτήματα ασύγχρονα, ανακουφίζοντας την πίεση στο σύστημα.
ΚουνέλιMQ Είναι μια ουρά μηνυμάτων ανοιχτού κώδικα γραμμένη σε Erlang, η οποία υποστηρίζει πολλά πρωτόκολλα: AMQP, XMPP, SMTP, STOMP, γεγονός που το καθιστά πολύ βαρύ και πιο κατάλληλο για ανάπτυξη σε επίπεδο επιχείρησης. Είναι μια κορυφαία υλοποίηση του πρωτοκόλλου AMQP, το οποίο υλοποιεί μια αρχιτεκτονική μεσίτη, που σημαίνει ότι τα μηνύματα μπορούν να τοποθετηθούν στην ουρά σε έναν κεντρικό κόμβο πριν σταλούν στον πελάτη. Υπάρχει καλή υποστήριξη για δρομολόγηση, εξισορρόπηση φορτίου ή διατήρηση δεδομένων. Αυτή η δυνατότητα καθιστά το RabbitMQ εύκολο στη χρήση και την ανάπτυξη, κατάλληλο για πολλά σενάρια όπως δρομολόγηση, εξισορρόπηση φορτίου ή επιμονή μηνυμάτων και μπορεί να γίνει με λίγες μόνο γραμμές κώδικα με ουρές μηνυμάτων. Ωστόσο, αυτό το καθιστά λιγότερο επεκτάσιμο και πιο αργό επειδή ο κεντρικός κόμβος αυξάνει τον λανθάνοντα χρόνο και είναι μεγαλύτερος μετά την ενθυλάκωση του μηνύματος. Για να διαμορφώσετε το RabbitMQ, πρέπει να εγκαταστήσετε το περιβάλλον Erlang στο μηχάνημα προορισμού. Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο
? MQ (Μηδενικό MQ) Είναι γνωστό ως το ταχύτερο σύστημα ουράς μηνυμάτων, ειδικά για σενάρια ζήτησης υψηλής απόδοσης. Είναι ένα πολύ ελαφρύ σύστημα ανταλλαγής μηνυμάτων που αναπτύχθηκε ειδικά για σενάρια υψηλής απόδοσης/χαμηλής καθυστέρησης και μπορεί συχνά να βρεθεί σε εφαρμογές στον χρηματοοικονομικό κόσμο. Σε σύγκριση με το RabbitMQ, το ZeroMQ υποστηρίζει πολλά προηγμένα σενάρια μηνυμάτων, αλλά πρέπει να εφαρμόσετε μεμονωμένα μπλοκ στο πλαίσιο ZeroMQ (όπως υποδοχές ή συσκευές κ.λπ.).
? Το MQ (ZeroMQ) μπορεί να εφαρμόσει προηγμένες/σύνθετες ουρές στις οποίες το RabbitMQ δεν είναι καλό, αλλά οι προγραμματιστές πρέπει να συνδυάσουν μόνοι τους πολλαπλά τεχνικά πλαίσια και η τεχνική πολυπλοκότητα αποτελεί πρόκληση για την επιτυχή εφαρμογή αυτού του MQ. Το ZeroMQ έχει ένα μοναδικό μοντέλο μη ενδιάμεσου λογισμικού όπου δεν χρειάζεται να εγκαταστήσετε και να εκτελέσετε διακομιστή μηνυμάτων ή ενδιάμεσο λογισμικό, επειδή η εφαρμογή σας θα παίξει αυτόν τον ρόλο υπηρεσίας. Το μόνο που χρειάζεται να κάνετε είναι απλώς να αναφέρετε τη βιβλιοθήκη ZeroMQ, η οποία μπορεί να εγκατασταθεί χρησιμοποιώντας το NuGet και μπορείτε να στέλνετε μηνύματα μεταξύ των εφαρμογών. Ωστόσο, το ZeroMQ παρέχει μόνο μη μόνιμες ουρές, πράγμα που σημαίνει ότι εάν το μηχάνημα πέσει, τα δεδομένα θα χαθούν. Μεταξύ αυτών, το Storm του Twitter χρησιμοποιεί το ZeroMQ ως μετάδοση ροών δεδομένων. Το ZeroMQ είναι πολύ ευέλικτο, αλλά πρέπει να μάθετε το εγχειρίδιο 80 σελίδων του (αν γράφετε για ένα κατανεμημένο σύστημα, φροντίστε να το διαβάσετε).
Το ZeroMQ δεν έχει αρχιτεκτονική ενδιάμεσου λογισμικού και δεν απαιτεί διαδικασίες και εκτελέσεις υπηρεσιών. Στην πραγματικότητα, το τελικό σημείο της εφαρμογής σας παίζει αυτόν τον ρόλο υπηρεσίας. Αυτό το καθιστά πολύ απλό στην ανάπτυξη, αλλά η ανησυχία είναι ότι δεν έχετε πού να παρακολουθήσετε εάν κάτι πάει στραβά με αυτό. Από όσο γνωρίζουμε, το ZeroMQ προσφέρει μόνο μη μόνιμες ουρές. Μπορείτε να εφαρμόσετε τις δικές σας δυνατότητες ελέγχου και ανάκτησης δεδομένων όπου τις χρειάζεστε. Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο
Το MSMQ Αυτό είναι το μόνο πράγμα στο προϊόν της Microsoft που θεωρείται πολύτιμο. Εάν το MSMQ μπορεί να αποδείξει ότι μπορεί να χειριστεί αυτού του είδους την εργασία, θα επιλέξει να το χρησιμοποιήσει. Το θέμα είναι ότι αυτό το πράγμα δεν είναι περίπλοκο, τίποτα άλλο από το να λαμβάνεις και να στέλνεις. Έχει ορισμένους σκληρούς περιορισμούς, όπως το μέγιστο μέγεθος μηνύματος των 4 MB. Ωστόσο, μπορεί να λύσει αυτά τα προβλήματα συνδέοντας κάποιο λογισμικό όπως το MassTransit ή το NServiceBus. Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο
Τζάφκα/Κάφκα Το Kafka (το οποίο διανέμει μηνύματα σε διαφορετικούς κόμβους) είναι ένα κατανεμημένο σύστημα MQ που αναπτύχθηκε και ανοιχτού κώδικα από το LinkedIn τον Δεκέμβριο του 2010 και τώρα είναι ένα έργο επώασης του Apache, ενός διαγλωσσικού κατανεμημένου συστήματος ουράς μηνυμάτων δημοσίευσης/εγγραφής υψηλής απόδοσης, και το Jafka επωάζεται πάνω από το Kafka, το οποίο είναι μια αναβαθμισμένη έκδοση του Kafka. Έχει τα ακόλουθα χαρακτηριστικά: γρήγορη επιμονή, η οποία μπορεί να διατηρήσει μηνύματα κάτω από την επιβάρυνση του συστήματος του O(1). Υψηλή απόδοση, η οποία μπορεί να φτάσει σε ρυθμό απόδοσης 10 W/s σε έναν συνηθισμένο διακομιστή. Το πλήρως κατανεμημένο σύστημα, ο μεσίτης, ο παραγωγός και ο καταναλωτής υποστηρίζουν εγγενώς κατανεμημένα και επιτυγχάνουν αυτόματα πολύπλοκη ισορροπία. Υποστηρίζει παράλληλη φόρτωση δεδομένων Hadoop, η οποία είναι μια βιώσιμη λύση για δεδομένα καταγραφής και συστήματα ανάλυσης εκτός σύνδεσης όπως το Hadoop, αλλά με τους περιορισμούς της επεξεργασίας σε πραγματικό χρόνο. Ο Kafka ενοποιεί την επεξεργασία μηνυμάτων online και offline μέσω του μηχανισμού παράλληλης φόρτωσης του Hadoop, ο οποίος είναι επίσης σημαντικός για το σύστημα που μελετάται σε αυτό το θέμα. Το Apache Kafka είναι ένα πολύ ελαφρύ σύστημα ανταλλαγής μηνυμάτων σε σχέση με το ActiveMQ και εκτός από πολύ καλή απόδοση, είναι επίσης ένα κατανεμημένο σύστημα που λειτουργεί καλά. Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο
Apache ActiveMQ Το ActiveMQ βρίσκεται κάπου ανάμεσα στα δύο (RabbitMQ & ZeroMQ), παρόμοιο με το ZemoMQ, και μπορεί να αναπτυχθεί τόσο σε λειτουργίες διακομιστή μεσολάβησης όσο και σε λειτουργίες P2P. Παρόμοια με το RabbitMQ, είναι εύκολο να εφαρμοστούν προηγμένα σενάρια και απαιτεί χαμηλή κατανάλωση. Το ActiveMQ είναι γνωστό ως η ραχοκοκαλιά του κόσμου της Java. Έχει μακρά ιστορία και χρησιμοποιείται ευρέως. Είναι επίσης cross-platform, παρέχοντας ένα φυσικό σημείο πρόσβασης ενσωμάτωσης για προϊόντα που δεν βρίσκονται στην πλατφόρμα της Microsoft. Ωστόσο, είναι δυνατό να ληφθεί υπόψη μόνο εάν έχει ξεπεράσει το MSMQ. Για να διαμορφώσετε το ActiveMQ, πρέπει να εγκαταστήσετε το περιβάλλον Java στο μηχάνημα προορισμού. Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο Είναι σημαντικό να σημειωθεί ότι το προϊόν επόμενης γενιάς του ActiveMQ είναι το Apollo, το οποίο βασίζεται στο πρωτότυπο ActiveMQ και είναι ένα ταχύτερο, πιο αξιόπιστο και ευκολότερο στη συντήρηση εργαλείο μεσίτη μηνυμάτων. Ο Apache αποκαλεί τον Apollo τον ταχύτερο και πιο ισχυρό διακομιστή STOMP (Streaming Text Orientated Message Protocol). Τα χαρακτηριστικά του Apollo είναι τα εξής: Υποστηρίζονται πρωτόκολλα Stomp 1.0 και Stomp 1.1 Θέματα και ουρές Πρόγραμμα περιήγησης ουράς Μόνιμες συνδρομές θέματος Ουρά κατοπτρισμού Αξιόπιστα μηνύματα Λήξη και ανταλλαγή μηνυμάτων Επιλογέας μηνυμάτων Επαληθεύτηκε το JAAS Εξουσιοδότηση που βασίζεται σε ACL Υποστήριξη SSL/TLS και επικύρωση πιστοποιητικού API διαχείρισης REST Κάντε κλικ για να δείτε αυτή την εικόνα σε νέο παράθυρο
Ρέντις Είναι μια βάση δεδομένων NoSQL Key-Value, η οποία αναπτύσσεται και συντηρείται ενεργά, αν και είναι ένα σύστημα αποθήκευσης βάσης δεδομένων Key-Value, αλλά υποστηρίζει λειτουργίες MQ, ώστε να μπορεί να χρησιμοποιηθεί ως μια ελαφριά υπηρεσία ουράς. Για τις λειτουργίες onboarding και out-queue των RabbitMQ και Redis, 1 εκατομμύριο φορές η καθεμία, και ο χρόνος εκτέλεσης καταγράφεται κάθε 100.000 φορές. Τα δεδομένα δοκιμής χωρίζονται σε τέσσερα διαφορετικά μεγέθη: 128 Byte, 512 Byte, 1K και 10K. Τα πειράματα δείχνουν ότι κατά την ένταξη στην ομάδα, η απόδοση του Redis είναι υψηλότερη από αυτή του RabbitMQ όταν η σύγκριση δεδομένων είναι μικρή και εάν το μέγεθος των δεδομένων υπερβαίνει τα 10K, το Redis είναι αφόρητα αργό. Βγαίνοντας εκτός ομάδας, ο Ρέντης έδειξε πολύ καλή απόδοση ανεξάρτητα από το μέγεθος των δεδομένων, ενώ η απόδοση του RabbitMQ ήταν πολύ χαμηλότερη από αυτή του Ρέντις.
MemcacheQ Μόνιμη ουρά μηνυμάτων Το Memcacheq (MCQ για συντομία) είναι μια ελαφριά ουρά μηνυμάτων, χαρακτηριστικά MemcacheQ: 1 Απλό και εύκολο στη χρήση 2 Γρήγορη επεξεργασία 3 Πολλαπλές ουρές 4 Καλή απόδοση συγχρονισμού 5 Συμβατό με το πρωτόκολλο Memcache. Αυτό σημαίνει ότι απλώς εγκαταστήστε την επέκταση memcache, δεν απαιτούνται πρόσθετα πρόσθετα. 6 Είναι επίσης βολικό για χρήση στο πλαίσιο zend.
Τελικά, αυτά τα προϊόντα: 1. Και οι δύο έχουν τα δικά τους API πελατών ή υποστηρίζουν πολλές γλώσσες προγραμματισμού. 2. Υπάρχει πολλή τεκμηρίωση. 3. Παρασχέθηκε θετική υποστήριξη. 4. Τα ActiveMQ, RabbitMQ, MSMQ, Redis πρέπει να ξεκινήσουν διαδικασίες εξυπηρέτησης, οι οποίες μπορούν να παρακολουθούνται και να ρυθμίζονται, και οι άλλες είναι προβληματικές 5. Όλα παρέχουν σχετικά καλή αξιοπιστία (συνέπεια), επεκτασιμότητα και εξισορρόπηση φορτίου και φυσικά απόδοση
Δεν θα πω βλακείες εδώ, επισυνάπτεται παρακάτω ένα σύνολο αποτελεσμάτων δοκιμών που υποκλάπηκαν από το Διαδίκτυο. Εμφανίζεται ο αριθμός των μηνυμάτων που αποστέλλονται και λαμβάνονται ανά δευτερόλεπτο. Η όλη διαδικασία δημιούργησε συνολικά 1 εκατομμύριο μηνύματα 1K. Η δοκιμή πραγματοποιήθηκε σε αυτόνομο μηχάνημα των Windows Vista.
Όπως μπορείτε να δείτε, το ZeroMQ δεν είναι ένα επίπεδο όπως τίποτα άλλο. Η απόδοσή του είναι εκπληκτικά υψηλή. Παρόλα αυτά, αυτό το προϊόν δεν παρέχει επιμονή μηνυμάτων, δεν μπορεί εύκολα να αποθηκεύσει και να παρακολουθήσει ενδιάμεσες διαδικασίες και απαιτεί αυτοέλεγχο και ανάκτηση δεδομένων, επομένως δεν είναι ικανοποιητικό όσον αφορά την ευκολία χρήσης και το HA. Το συμπέρασμα είναι σαφές: εάν θέλετε μια εφαρμογή να στέλνει μηνύματα όσο το δυνατόν γρηγορότερα, επιλέγετε το ZeroMQ. Είναι πιο πολύτιμο όταν δεν σας ενδιαφέρει πολύ να χάσετε ορισμένα μηνύματα τυχαία.
Ο blogger σε αυτό το άρθρο ελπίζει (και δεν ελπίζει πολύ) να χρησιμοποιήσει το Rabbit, το Rabbitmq έχει ενσωματωμένο ha, εάν σχηματίσετε ένα σύμπλεγμα, δεν χρειάζεται να ανησυχείτε για ζητήματα όπως η εξισορρόπηση φορτίου και μπορείτε να ρυθμίσετε έναν καθρέφτη ουράς. Αλλά αυτό το είδος είναι ότι θα έπρεπε να υπάρχουν περισσότερες δοκιμές, και καταλήγεις με ένα αγαπημένο, και όλα τα πράγματα που έχω ακούσει και διαβάσει για το Rabbit με κάνουν να νιώθω ότι θα έπρεπε να είναι η καλύτερη επιλογή.
|