Αυτό το άρθρο οδηγεί πρώτα σε ποια προβλήματα χρειάζεται συνήθως να λύσει το ενδιάμεσο λογισμικό μηνυμάτων, ποιες δυσκολίες θα προκύψουν στην επίλυση αυτών των προβλημάτων, εάν το Apache RocketMQ μπορεί να λυθεί ως ενδιάμεσο λογισμικό κατανεμημένων μηνυμάτων υψηλής απόδοσης και υψηλής απόδοσης ανοιχτού κώδικα από την Alibaba και πώς αυτά τα προβλήματα ορίζονται στην προδιαγραφή. Αυτό το άρθρο θα εισαγάγει στη συνέχεια τον αρχιτεκτονικό σχεδιασμό του RocketMQ, προκειμένου να δώσει στους αναγνώστες μια γρήγορη κατανόηση του RocketMQ. 1. Ποια προβλήματα πρέπει να λύσει το ενδιάμεσο λογισμικό μηνυμάτων; Η Δημοσίευση/Εγγραφή είναι η πιο βασική λειτουργία του ενδιάμεσου λογισμικού μηνυμάτων και σχετίζεται επίσης με την παραδοσιακή επικοινωνία RPC. Δεν θα μπω σε λεπτομέρειες εδώ. Η προτεραιότητα που περιγράφεται στην προδιαγραφή προτεραιότητας μηνύματος αναφέρεται σε μια ουρά μηνυμάτων, κάθε μήνυμα έχει διαφορετική προτεραιότητα, που γενικά περιγράφεται με ακέραιους αριθμούς, το μήνυμα με υψηλή προτεραιότητα παραδίδεται πρώτα, εάν το μήνυμα βρίσκεται εντελώς σε ουρά μνήμης, τότε μπορεί να ταξινομηθεί σύμφωνα με την προτεραιότητα πριν από την παράδοση, έτσι ώστε η υψηλή προτεραιότητα να παραδοθεί πρώτα. Δεδομένου ότι όλα τα μηνύματα στο RocketMQ είναι επίμονα, εάν ταξινομηθούν σύμφωνα με την προτεραιότητα, η επιβάρυνση θα είναι πολύ μεγάλη, επομένως το RocketMQ δεν υποστηρίζει συγκεκριμένα την προτεραιότητα μηνυμάτων, αλλά μπορεί να εφαρμόσει παρόμοιες λειτουργίες σε μια λύση, δηλαδή να διαμορφώσει μια ουρά με υψηλή προτεραιότητα και μια ουρά με κανονική προτεραιότητα και να στείλει διαφορετικές προτεραιότητες σε διαφορετικές ουρές. Για θέματα προτεραιότητας, μπορούν να συνοψιστούν σε 2 κατηγορίες:
- Εφόσον επιτυγχάνεται η προτεραιότητα, δεν αποτελεί προτεραιότητα με τη στενή έννοια και η προτεραιότητα συνήθως χωρίζεται σε υψηλό, μεσαίο, χαμηλό ή πολλά ακόμη επίπεδα. Κάθε προτεραιότητα μπορεί να αντιπροσωπεύεται από διαφορετικό θέμα και κατά την αποστολή ενός μηνύματος, καθορίστε διαφορετικά θέματα για να αντιπροσωπεύσετε την προτεραιότητα, τα οποία μπορούν να λύσουν τα περισσότερα από τα προβλήματα προτεραιότητας, αλλά να θέσουν σε κίνδυνο την ακρίβεια των επιχειρηματικών προτεραιοτήτων.
- Αυστηρή προτεραιότητα, η προτεραιότητα εκφράζεται ως ακέραιος αριθμός, όπως 0 ~ 65535, αυτού του είδους το πρόβλημα προτεραιότητας γενικά δεν είναι κατάλληλο για επίλυση με διαφορετικά θέματα. Εάν θέλετε το MQ να λύσει αυτό το πρόβλημα, θα έχει πολύ μεγάλο αντίκτυπο στην απόδοση του MQ. Εδώ είναι ένα σημείο για να βεβαιωθείτε ότι η επιχείρηση χρειάζεται πραγματικά αυτήν την αυστηρή ιεράρχηση προτεραιοτήτων και εάν οι προτεραιότητες συμπιεστούν σε λίγες, πόσο αντίκτυπο θα έχει στην επιχείρηση;
Η σειρά μηνυμάτων αναφέρεται σε έναν τύπο μηνύματος που μπορεί να καταναλωθεί με τη σειρά με την οποία αποστέλλεται. Για παράδειγμα, μια παραγγελία δημιουργεί 3 μηνύματα, δηλαδή δημιουργία παραγγελίας, πληρωμή παραγγελίας και ολοκλήρωση παραγγελίας. Όταν καταναλώνετε, είναι σημαντικό να καταναλώνετε με αυτή τη σειρά. Αλλά ταυτόχρονα, οι παραγγελίες μπορούν να καταναλωθούν παράλληλα. Το RocketMQ μπορεί να διασφαλίσει αυστηρά ότι τα μηνύματα είναι τακτοποιημένα. Φιλτράρισμα μηνυμάτων FilterBroker Στο Broker, το φιλτράρισμα σύμφωνα με τις απαιτήσεις του καταναλωτή έχει το πλεονέκτημα ότι μειώνει τη μετάδοση περιττών μηνυμάτων στον καταναλωτή. Το μειονέκτημα είναι ότι αυξάνει την επιβάρυνση του μεσίτη και είναι σχετικά πολύπλοκο στην εφαρμογή του. 1. Το Taobao Notify υποστηρίζει μια ποικιλία μεθόδων φιλτραρίσματος, συμπεριλαμβανομένου του άμεσου φιλτραρίσματος ανά τύπο μηνύματος και του ευέλικτου φιλτραρίσματος συντακτικών εκφράσεων, που μπορεί να καλύψει σχεδόν τις πιο απαιτητικές ανάγκες φιλτραρίσματος. 2. Το Taobao RocketMQ υποστηρίζει φιλτράρισμα με απλή ετικέτα μηνύματος, καθώς και κεφαλίδα και σώμα μηνύματος. 3. Το ευέλικτο φιλτράρισμα συντακτικών εκφράσεων υποστηρίζεται επίσης στην προδιαγραφή ειδοποίησης CORBA. Φιλτράρισμα μηνυμάτων από την πλευρά του καταναλωτή Αυτό το φιλτράρισμα μπορεί να προσαρμοστεί πλήρως από την εφαρμογή, αλλά το μειονέκτημα είναι ότι αποστέλλονται πολλά άχρηστα μηνύματα στον καταναλωτή. Υπάρχουν πολλές κοινές μέθοδοι επιμονής που χρησιμοποιούνται από τη διατήρηση μηνυμάτων:
- Παραμείνετε σε μια βάση δεδομένων, όπως η Mysql.
- Επιμείνετε στον χώρο αποθήκευσης KV, όπως το levelDB, το Berkeley DB και άλλα συστήματα αποθήκευσης KV.
- Επιμονή με τη μορφή εγγραφών αρχείων, όπως Kafka, RocketMQ
- Δημιουργήστε μια μόνιμη εικόνα των δεδομένων μνήμης, όπως beanstalkd, VisiNotify
- (1), (2) και (3) και οι τρεις μέθοδοι επιμονής έχουν τη δυνατότητα να επεκτείνουν την προσωρινή μνήμη της ουράς μνήμης και (4) είναι απλώς μια εικόνα μνήμης, η οποία μπορεί ακόμα να επαναφέρει τα δεδομένα από την προηγούμενη μνήμη μετά το κλείσιμο και την επανεκκίνηση του μεσίτη.
Οι προδιαγραφές ειδοποίησης JMS και CORBA δεν καθορίζουν ρητά τον τρόπο διατήρησης, αλλά η απόδοση του τμήματος διατήρησης καθορίζει άμεσα την απόδοση ολόκληρου του ενδιάμεσου λογισμικού μηνυμάτων. Το RocketMQ χρησιμοποιεί πλήρως την προσωρινή μνήμη του συστήματος αρχείων Linux για να βελτιώσει την απόδοση. Υπάρχουν διάφορες περιπτώσεις στις οποίες η αξιοπιστία μηνυμάτων επηρεάζει την αξιοπιστία του μηνύματος:
- Ο μεσίτης κλείνει κανονικά
- Συντριβή μεσίτη
- Σφάλμα λειτουργικού συστήματος
- Το μηχάνημα χάνει ρεύμα, αλλά η παροχή ρεύματος μπορεί να αποκατασταθεί αμέσως.
- Το μηχάνημα δεν ενεργοποιείται (μπορεί να καταστραφεί σε βασικές συσκευές όπως CPU, μητρική πλακέτα, μνήμη κ.λπ.)
- Βλάβη στη συσκευή δίσκου.
Οι (1), (2), (3) και (4) είναι όλες οι περιπτώσεις όπου οι πόροι υλικού μπορούν να ανακτηθούν αμέσως και το RocketMQ μπορεί να διασφαλίσει ότι τα μηνύματα δεν θα χαθούν ή θα χαθεί μια μικρή ποσότητα δεδομένων (ανάλογα με το αν η μέθοδος που αναβοσβήνει είναι σύγχρονη ή ασύγχρονη). (5) (6) Είναι ένα μόνο σημείο αστοχίας και δεν μπορεί να ανακτηθεί, μόλις συμβεί, όλα τα μηνύματα σε αυτό το μοναδικό σημείο χάνονται. Και στις δύο περιπτώσεις, το RocketMQ διασφαλίζει ότι το 99% των μηνυμάτων δεν χάνονται μέσω ασύγχρονης αναπαραγωγής, αλλά εξακολουθούν να υπάρχουν πολύ λίγα μηνύματα που μπορεί να χαθούν. Η σύγχρονη τεχνολογία διπλής εγγραφής μπορεί να αποφύγει εντελώς μεμονωμένα σημεία, τα οποία αναπόφευκτα θα επηρεάσουν την απόδοση, καθιστώντας την κατάλληλη για καταστάσεις με εξαιρετικά υψηλές απαιτήσεις αξιοπιστίας μηνυμάτων, όπως εφαρμογές που σχετίζονται με χρήματα. Το RocketMQ υποστηρίζει σύγχρονη διπλή εγγραφή ξεκινώντας από την έκδοση 3.0. Τα μηνύματα χαμηλής καθυστέρησης μπορούν να φτάσουν στον καταναλωτή αμέσως μετά την άφιξη του μηνύματος στον μεσίτη χωρίς τη συσσώρευση μηνυμάτων. Το RocketMQ χρησιμοποιεί μια μέθοδο έλξης μεγάλης δημοσκόπησης για να διασφαλίσει ότι το μήνυμα είναι πολύ σε πραγματικό χρόνο και ότι το μήνυμα σε πραγματικό χρόνο δεν είναι χαμηλότερο από αυτό της ώθησης. Τουλάχιστον μία φορά σημαίνει ότι κάθε μήνυμα πρέπει να παραδοθεί μία φορά. Το RocketMQ Consumer τραβάει πρώτα το μήνυμα στην τοπική περιοχή και, στη συνέχεια, επιστρέφει το ack στον διακομιστή μετά την ολοκλήρωση της κατανάλωσης. Ακριβώς μόνο μία φορά- Το στάδιο αποστολής μηνύματος δεν επιτρέπει την αποστολή διπλότυπων μηνυμάτων.
- Στο στάδιο Κατανάλωση μηνύματος, δεν επιτρέπεται η κατανάλωση διπλότυπων μηνυμάτων.
Μόνο όταν πληρούνται οι δύο παραπάνω προϋποθέσεις μπορεί το μήνυμα να θεωρηθεί "Ακριβώς μόνο μία φορά" και για να επιτευχθούν τα παραπάνω δύο σημεία, αναπόφευκτα θα δημιουργηθούν τεράστια γενικά έξοδα στο περιβάλλον του κατανεμημένου συστήματος. Επομένως, προκειμένου να επιδιωχθεί υψηλή απόδοση, το RocketMQ δεν εγγυάται αυτό το χαρακτηριστικό και απαιτεί αφαίρεση διπλότυπων στην επιχείρηση, πράγμα που σημαίνει ότι τα μηνύματα των καταναλωτών πρέπει να είναι ανίσχυρα. Αν και το RocketMQ δεν μπορεί να εγγυηθεί αυστηρά τη μη αντιγραφή, υπό κανονικές συνθήκες, σπάνια υπάρχουν επαναλαμβανόμενες αποστολές και κατανάλωση, μόνο ανωμαλίες δικτύου, εκκίνηση και διακοπή καταναλωτή και άλλες μη φυσιολογικές καταστάσεις, όπως η αντιγραφή μηνυμάτων. Ο ουσιαστικός λόγος για αυτό το πρόβλημα είναι ότι υπάρχει αβεβαιότητα στις κλήσεις δικτύου, δηλαδή η τρίτη κατάσταση ούτε επιτυχίας ούτε αποτυχίας, οπότε προκύπτει το πρόβλημα της επανάληψης του μηνύματος. Τι πρέπει να κάνω εάν το buffer του μεσίτη είναι γεμάτο; Το buffer του μεσίτη αναφέρεται συνήθως στο μέγεθος του buffer μνήμης μιας ουράς στον μεσίτη, το οποίο είναι συνήθως περιορισμένο σε μέγεθος, τι γίνεται αν το buffer είναι γεμάτο; Δείτε πώς αντιμετωπίζεται στην προδιαγραφή ειδοποίησης CORBA:
- Το RejectNewEvents απορρίπτει το νέο μήνυμα και επιστρέφει τον κωδικό σφάλματος RejectNewEvents στην πύλη παροχής.
- Απορρίψτε υπάρχοντα μηνύματα σύμφωνα με μια συγκεκριμένη πολιτική
- AnyOrder - Οποιοδήποτε συμβάν μπορεί να απορριφθεί σε περίπτωση υπερχείλισης. Αυτή είναι η προεπιλεγμένη ρύθμιση για αυτήν την ιδιότητα.
- FifoOrder - Το πρώτο συμβάν που θα ληφθεί θα είναι το πρώτο που θα απορριφθεί.
- LifoOrder - Το τελευταίο συμβάν που θα ληφθεί θα είναι το πρώτο που θα απορριφθεί.
- PriorityOrder - Τα συμβάντα θα πρέπει να απορρίπτονται με σειρά προτεραιότητας, έτσι ώστε τα συμβάντα χαμηλότερης προτεραιότητας να απορρίπτονται πριν από συμβάντα υψηλότερης προτεραιότητας.
- DeadlineOrder - Τα γεγονότα θα πρέπει να απορρίπτονται πρώτα με τη σειρά της συντομότερης προθεσμίας λήξης.
Το RocketMQ δεν έχει την έννοια της προσωρινής μνήμης και οι ουρές του RocketMQ είναι μόνιμοι δίσκοι και τα δεδομένα διαγράφονται τακτικά. Για τη λύση αυτού του προβλήματος, το RocketMQ έχει μια πολύ σημαντική διαφορά από άλλα MQ, το Buffer μνήμης του RocketMQ αφαιρείται σε μια ουρά άπειρου μήκους, ανεξάρτητα από το πόσα δεδομένα εισέρχονται, μπορεί να εγκατασταθεί, αυτό το άπειρο προϋποτίθεται, ο μεσίτης θα διαγράφει τακτικά δεδομένα που έχουν λήξει, για παράδειγμα, ο μεσίτης αποθηκεύει μόνο 3 ημέρες μηνυμάτων, τότε αν και το μήκος αυτού του Buffer είναι άπειρο, αλλά τα δεδομένα πριν από 3 ημέρες θα διαγραφούν από το τέλος της ουράς. Η αναδρομική κατανάλωση αναφέρεται στο μήνυμα ότι ο καταναλωτής έχει καταναλώσει με επιτυχία και το μήνυμα πρέπει να καταναλωθεί ξανά λόγω της ζήτησης της επιχείρησης. Για παράδειγμα, λόγω της αποτυχίας του καταναλωτικού συστήματος, τα δεδομένα πριν από 1 ώρα πρέπει να καταναλωθούν ξανά μετά την ανάκτηση και, στη συνέχεια, ο μεσίτης θα πρέπει να παρέχει έναν μηχανισμό για την επαναφορά της προόδου κατανάλωσης σύμφωνα με τη χρονική διάσταση. Το RocketMQ υποστηρίζει αναδρομική κατανάλωση με βάση το χρόνο, με χρονική διάσταση ακριβή σε χιλιοστά του δευτερολέπτου, η οποία μπορεί να οπισθοδρομήσει προς τα εμπρός ή προς τα πίσω. Η κύρια λειτουργία του ενδιάμεσου λογισμικού μηνυμάτων στοίβαξης μηνυμάτων είναι η ασύγχρονη αποσύνδεση και μια άλλη σημαντική λειτουργία είναι να μπλοκάρει την κορυφή πλημμύρας δεδομένων του front-end και να διασφαλίζει τη σταθερότητα του συστήματος back-end, το οποίο απαιτεί το ενδιάμεσο λογισμικό μηνυμάτων να έχει μια συγκεκριμένη ικανότητα στοίβαξης μηνυμάτων και ο σωρός μηνυμάτων ενσωματώνει τις ακόλουθες δύο καταστάσεις:
- Τα μηνύματα συσσωρεύονται σε buffer μνήμης και μόλις υπερβούν το buffer μνήμης, τα μηνύματα μπορούν να απορριφθούν σύμφωνα με μια συγκεκριμένη πολιτική απόρριψης, όπως περιγράφεται στην προδιαγραφή ειδοποίησης CORBA. Είναι κατάλληλο για υπηρεσίες που μπορούν να ανεχθούν την απόρριψη μηνυμάτων, σε αυτήν την περίπτωση, η ικανότητα συσσώρευσης μηνυμάτων έγκειται κυρίως στο μέγεθος της προσωρινής μνήμης και η υποβάθμιση της απόδοσης δεν θα είναι πολύ μεγάλη μετά τη στοίβαξη του μηνύματος, επειδή η ποσότητα των δεδομένων στη μνήμη έχει περιορισμένο αντίκτυπο στην ικανότητα πρόσβασης που παρέχεται στον έξω κόσμο.
- Τα μηνύματα συσσωρεύονται σε μόνιμα συστήματα αποθήκευσης όπως αποθήκευση DB, KV, φόρμα εγγραφής αρχείων. Όταν τα μηνύματα δεν μπορούν να χτυπηθούν στην κρυφή μνήμη μνήμης, είναι αναπόφευκτη η πρόσβαση στο δίσκο, ο οποίος θα δημιουργήσει μεγάλη ποσότητα IO ανάγνωσης και η απόδοση του IO ανάγνωσης καθορίζει άμεσα την ικανότητα πρόσβασης των μηνυμάτων μετά τη στοίβαξή τους.
Υπάρχουν τέσσερα κύρια σημεία για την αξιολόγηση της ικανότητας συσσώρευσης μηνυμάτων:
- Πόσα μηνύματα μπορούν να συσσωρευτούν, πόσα byte; Δηλαδή, η χωρητικότητα σωρού του μηνύματος.
- Μετά τη συσσώρευση ενός μηνύματος, επηρεάζεται η ταχύτητα μετάδοσης του μηνύματος από τη στοίβαξη;
- Θα επηρεαστεί η κανονική κατανάλωση των καταναλωτών μετά τη συσσώρευση του μηνύματος;
- Αφού συσσωρευτούν τα μηνύματα, ποια είναι η απόδοση κατά την πρόσβαση σε μηνύματα που έχουν συσσωρευτεί στο δίσκο;
Κατανεμημένες Συναλλαγές Αρκετές γνωστές προδιαγραφές κατανεμημένων συναλλαγών, όπως XA, JTA κ.λπ. Μεταξύ αυτών, η προδιαγραφή XA υποστηρίζεται ευρέως από μεγάλους προμηθευτές βάσεων δεδομένων, όπως η Oracle, η Mysql κ.λπ. Μεταξύ αυτών, ο ηγέτης υλοποίησης TM της XA, όπως το Oracle Tuxedo, χρησιμοποιείται ευρέως στα χρηματοοικονομικά, τις τηλεπικοινωνίες και άλλους τομείς. Οι κατανεμημένες συναλλαγές περιλαμβάνουν προβλήματα δέσμευσης δύο σταδίων και όσον αφορά την αποθήκευση δεδομένων, η αποθήκευση KV πρέπει να υποστηρίζεται, επειδή το δεύτερο στάδιο της επαναφοράς δέσμευσης πρέπει να τροποποιήσει την κατάσταση του μηνύματος, η οποία πρέπει να περιλαμβάνει την ενέργεια εύρεσης του μηνύματος σύμφωνα με το κλειδί. Το RocketMQ παρακάμπτει το πρόβλημα της εύρεσης του μηνύματος σύμφωνα με το κλειδί στο δεύτερο στάδιο, χρησιμοποιώντας το πρώτο στάδιο για την αποστολή του προετοιμασμένου μηνύματος, τη λήψη της μετατόπισης του μηνύματος και το δεύτερο στάδιο για πρόσβαση στο μήνυμα μέσω της μετατόπισης και την τροποποίηση της κατάστασης, η μετατόπιση είναι η διεύθυνση των δεδομένων. Η μέθοδος υλοποίησης συναλλαγών του RocketMQ δεν γίνεται μέσω αποθήκευσης KV, αλλά μέσω της μεθόδου offset, η οποία έχει ένα σημαντικό ελάττωμα, δηλαδή η αλλαγή δεδομένων μέσω offset θα προκαλέσει πάρα πολλές βρώμικες σελίδες στο σύστημα, κάτι που απαιτεί ιδιαίτερη προσοχή. Προγραμματισμένα μηνύματα Τα προγραμματισμένα μηνύματα σημαίνουν ότι τα μηνύματα δεν μπορούν να καταναλωθούν από τους καταναλωτές αμέσως μετά την αποστολή τους στον μεσίτη και μπορούν να καταναλωθούν μόνο σε μια συγκεκριμένη χρονική στιγμή ή μετά από αναμονή για μια συγκεκριμένη ώρα. Εάν θέλετε να υποστηρίξετε την αυθαίρετη ακρίβεια χρόνου, σε επίπεδο μεσίτη, πρέπει να κάνετε ταξινόμηση μηνυμάτων και εάν εμπλέκεται επιμονή, τότε η ταξινόμηση μηνυμάτων θα επιφέρει αναπόφευκτα τεράστια επιβάρυνση απόδοσης. Το RocketMQ υποστηρίζει μηνύματα χρονισμού, αλλά δεν υποστηρίζει αυθαίρετη ακρίβεια χρόνου και υποστηρίζει συγκεκριμένα επίπεδα, όπως χρονισμό 5s, 10s, 1m κ.λπ. Επανάληψη μηνύματος Αφού ο καταναλωτής αποτύχει να καταναλώσει το μήνυμα, δώστε έναν μηχανισμό επανάληψης για να κάνετε το μήνυμα να καταναλωθεί ξανά. Οι αποτυχίες μηνυμάτων κατανάλωσης καταναλωτών μπορούν συνήθως να ληφθούν υπόψη στις ακόλουθες περιπτώσεις:
- Λόγω του λόγου του ίδιου του μηνύματος, όπως η αποτυχία αποσειριοποίησης, τα ίδια τα δεδομένα του μηνύματος δεν μπορούν να υποβληθούν σε επεξεργασία (όπως επαναφόρτιση λογαριασμού τηλεφώνου, ο αριθμός κινητού τηλεφώνου του τρέχοντος μηνύματος έχει αποσυνδεθεί, δεν μπορεί να επαναφορτιστεί) κ.λπ. Αυτό το σφάλμα συνήθως απαιτεί την παράλειψη αυτού του μηνύματος και την κατανάλωση άλλων μηνυμάτων και αυτό το αποτυχημένο μήνυμα είναι 99% ανεπιτυχές ακόμα και αν η κατανάλωση επαναληφθεί αμέσως, επομένως είναι καλύτερο να παρέχετε έναν χρονομετρημένο μηχανισμό επανάληψης, δηλαδή να προσπαθήσετε ξανά μετά από 10 δευτερόλεπτα.
- Επειδή οι εξαρτώμενες υπηρεσίες κατάντη εφαρμογών δεν είναι διαθέσιμες, όπως η σύνδεση DB δεν είναι διαθέσιμη, το εξωτερικό δίκτυο συστήματος δεν είναι προσβάσιμο κ.λπ. Όταν αντιμετωπίζετε αυτό το σφάλμα, ακόμα κι αν παραλειφθεί το τρέχον αποτυχημένο μήνυμα, θα καταναλωθούν και άλλα μηνύματα. Σε αυτήν την περίπτωση, συνιστάται να εφαρμόσετε το sleep 30s και να καταναλώσετε το επόμενο μήνυμα, το οποίο μπορεί να μειώσει την πίεση στον μεσίτη να δοκιμάσει ξανά το μήνυμα.
Επισκόπηση RocketMQΕπιλογούμε να μάθουμε αν το RocketMQ λύνει τα προβλήματα που αντιμετωπίζει το ενδιάμεσο λογισμικό μηνυμάτων που αναφέρθηκε παραπάνω.
Τι είναι το RocketMQ;
Το παραπάνω σχήμα είναι ένα τυπικό μοντέλο ενδιάμεσου λογισμικού μηνυμάτων που στέλνει και λαμβάνει μηνύματα, το RocketMQ έχει επίσης σχεδιαστεί με αυτόν τον τρόπο, εν ολίγοις, το RocketMQ έχει τα ακόλουθα χαρακτηριστικά:
- Είναι ένα ενδιάμεσο λογισμικό μηνυμάτων μοντέλου ουράς με υψηλή απόδοση, υψηλή αξιοπιστία, υψηλό πραγματικό χρόνο και κατανεμημένα χαρακτηριστικά.
- Ο παραγωγός, ο καταναλωτής και η ουρά μπορούν να διανεμηθούν.
- Ο Παραγωγός στέλνει μηνύματα σε ορισμένες ουρές με τη σειρά, η συλλογή ουράς ονομάζεται Θέμα, Καταναλωτής Εάν κατανάλωση μετάδοσης, μία παρουσία καταναλωτή καταναλώνει όλες τις ουρές που αντιστοιχούν σε αυτό το θέμα και εάν καταναλώνεται σε σύμπλεγμα, πολλές παρουσίες καταναλωτή καταναλώνουν ομοιόμορφα τη συλλογή ουράς που αντιστοιχεί σε αυτό το θέμα.
- Η αυστηρή σειρά μηνυμάτων μπορεί να είναι εγγυημένη
- Παρέχει πλούσιες λειτουργίες έλξης μηνυμάτων
- Αποτελεσματικές δυνατότητες οριζόντιας κλιμάκωσης συνδρομητών
- Μηχανισμός συνδρομής μηνυμάτων σε πραγματικό χρόνο
- Χωρητικότητα συσσώρευσης εκατοντάδων εκατομμυρίων μηνυμάτων
- Λιγότερη εξάρτηση
Δομή φυσικής ανάπτυξης RocketMQ
Όπως φαίνεται στο παραπάνω σχήμα, η δομή ανάπτυξης του RocketMQ έχει τα ακόλουθα χαρακτηριστικά:
- Ο διακομιστής ονομάτων είναι ένας κόμβος ουσιαστικά χωρίς κατάσταση που μπορεί να αναπτυχθεί σε συμπλέγματα χωρίς συγχρονισμό πληροφοριών μεταξύ κόμβων.
- Η ανάπτυξη του Broker είναι σχετικά περίπλοκη, ο Broker χωρίζεται σε Master και Slave, ένας Master μπορεί να αντιστοιχεί σε πολλούς Slaves, αλλά ένας Slave μπορεί να αντιστοιχεί μόνο σε έναν Master, η αντιστοιχία μεταξύ Master και Slave ορίζεται καθορίζοντας το ίδιο BrokerName, διαφορετικό BrokerId, το BrokerId είναι 0 για Master και το non-0 σημαίνει Slave. Τα Masters μπορούν επίσης να αναπτυχθούν σε πολλαπλάσια. Κάθε μεσίτης δημιουργεί μια μακρά σύνδεση με όλους τους κόμβους στο σύμπλεγμα διακομιστή ονομάτων και καταχωρεί πληροφορίες θέματος σε όλους τους διακομιστές ονομάτων σε τακτά χρονικά διαστήματα.
- Η πύλη παροχής δημιουργεί μια μεγάλη σύνδεση με έναν από τους κόμβους του συμπλέγματος Name Server (τυχαία επιλεγμένο), ανακτά περιοδικά πληροφορίες δρομολόγησης θεμάτων από το Name Server, δημιουργεί μια μεγάλη σύνδεση με τον κύριο που παρέχει την υπηρεσία θέματος και στέλνει παλμούς στον κύριο σε τακτά χρονικά διαστήματα. Ο παραγωγός είναι εντελώς ανιθαγενής και μπορεί να αναπτυχθεί σε συμπλέγματα.
- Ο καταναλωτής δημιουργεί μια μακρά σύνδεση με έναν από τους κόμβους στο σύμπλεγμα διακομιστή ονομάτων (τυχαία επιλεγμένο), ανακτά τακτικά πληροφορίες δρομολόγησης θέματος από τον διακομιστή ονομάτων και δημιουργεί μια μακρά σύνδεση με τον Master και τον Slave που παρέχουν την υπηρεσία θέματος και στέλνει παλμούς στον Master και τον Slave σε τακτά χρονικά διαστήματα. Οι καταναλωτές μπορούν να εγγραφούν σε μηνύματα τόσο από το Master όσο και από το Slave και οι κανόνες συνδρομής καθορίζονται από τη διαμόρφωση του μεσίτη.
Λογική δομή ανάπτυξης RocketMQ
Όπως φαίνεται στο παραπάνω σχήμα, η λογική δομή ανάπτυξης του RocketMQ έχει δύο χαρακτηριστικά: Παραγωγός και Καταναλωτής.
Μια ομάδα πόντων, που χρησιμοποιείται για την αναπαράσταση μιας εφαρμογής ανταλλαγής μηνυμάτων, περιέχει πολλές χρήσεις πύλης παροχής, οι οποίες μπορεί να είναι πολλαπλά μηχανήματα, πολλαπλές διεργασίες ενός μηχανήματος ή πολλαπλά αντικείμενα πύλης παροχής μιας διεργασίας. Μια ομάδα παραγωγών μπορεί να στείλει πολλά μηνύματα θέματος και η ομάδα παραγωγών λειτουργεί ως εξής:
- Προσδιορίστε έναν τύπο παραγωγού
- Μπορείτε να ρωτήσετε ότι υπάρχουν πολλές χρήσεις του Producer σε αυτήν την εφαρμογή ανταλλαγής μηνυμάτων μέσω του εργαλείου O&M
- Κατά την αποστολή ενός μηνύματος κατανεμημένης συναλλαγής, εάν ο παραγωγός πέσει απροσδόκητα, ο μεσίτης θα καλέσει ενεργά οποιοδήποτε μηχάνημα στην ομάδα παραγωγών για να επιβεβαιώσει την κατάσταση της συναλλαγής.
Χρησιμοποιείται για την αναπαράσταση μιας εφαρμογής ανταλλαγής μηνυμάτων καταναλωτών, μια ομάδα καταναλωτών περιέχει πολλές παρουσίες καταναλωτών, οι οποίες μπορεί να είναι πολλαπλές μηχανές, πολλαπλές διεργασίες ή πολλαπλά καταναλωτικά αντικείμενα μιας διαδικασίας. Πολλοί καταναλωτές σε μια ομάδα καταναλωτών καταναλώνουν μηνύματα με ομοιόμορφα κατανεμημένο τρόπο και, εάν έχουν ρυθμιστεί για μετάδοση, κάθε παρουσία σε αυτήν την ομάδα καταναλωτών καταναλώνει ολόκληρο τον όγκο δεδομένων.
Δομή αποθήκευσης δεδομένων RocketMQ
Όπως φαίνεται στο παραπάνω σχήμα, το RocketMQ υιοθετεί μια μέθοδο αποθήκευσης που διαχωρίζει τα δεδομένα από τα ευρετήρια. Μειώστε αποτελεσματικά την απώλεια πόρων αρχείων, πόρων IO και πόρων μνήμης. Ακόμη και με τεράστια δεδομένα όπως η Alibaba, τα σενάρια υψηλής ταυτόχρονης χρήσης μπορούν να μειώσουν αποτελεσματικά την καθυστέρηση από άκρο σε άκρο και να έχουν ισχυρές δυνατότητες οριζόντιας κλιμάκωσης.
|