Wir werden heute sehen, wie Sie die Ladezeit Ihrer Seiten beschleunigen können, indem Sie die schwersten Verarbeitungen asynchron ausführen, und zwar ganz einfach dank RabbitMQ.
Die Stabilität und Geschwindigkeit einer Anwendung oder Website gehören sicherlich zu den wichtigsten Faktoren für die Benutzer. Wer hat noch nie eine Website verlassen, bevor er überhaupt die erste Seite gesehen hat, weil sie zu lange dauerte?
Was ist RabbitMQ?
RabbitMQ ist ein quelloffener, verteilter und skalierbarer Messaging Broker, der als Vermittler für eine effiziente Kommunikation zwischen Produzenten und Konsumenten dient.
RabbitMQ implementiert das Application Layer Messaging-Protokoll AMQP, das auf die Kommunikation asynchroner Nachrichten mit Zustellungsgarantie durch Empfangsbestätigungen der Nachrichten vom Broker an den Produzenten und von den Konsumenten an den Produzenten ausgerichtet ist.
Wie funktioniert RabbitHQ?
Vereinfacht ausgedrückt, definiert RabbitMQ Warteschlangen, in denen die von den Produzenten gesendeten Nachrichten gespeichert werden, bis die konsumierenden Anwendungen die Nachricht erhalten und verarbeiten. Es ermöglicht uns, verteilte Systeme zu entwerfen und zu implementieren, bei denen ein System in unabhängige Module unterteilt ist, die über Nachrichten miteinander kommunizieren.
Wie bei jeder Kommunikation benötigen wir einen Produzenten, eine Nachricht und einen Empfänger. In der Mitte des Kuchens befindet sich RabbitMQ, das der Ort ist, an dem die Nachricht auf den Empfänger wartet.
Um besser zu verstehen, wie das funktioniert, sollten Sie die Arten von Exchange kennen, die den Austausch von Nachrichten darstellen.
Exchange-Typen
Wenn wir eine Nachricht über RabbitMQ senden, schicken wir sie nicht direkt an eine Warteschlange. Damit andere Systeme sie lesen können, senden wir sie an einen Exchange, der für die Weiterleitung von Nachrichten an verschiedene Warteschlangen zuständig ist.
Die Arten des Austauschs sind Direct, Fanout, Topic und Readers.
Direkter Austausch
Angenommen, ein Produzent muss eine Kaufbestätigung an drei Verbraucher senden. Das heißt, das System muss mit drei anderen Systemen kommunizieren, um den Kauf zu tätigen.
Da RabbitMQ die Nachricht separat an jede Warteschlange sendet, gibt es einen Impuls, damit diese anderen Systeme die Nachricht direkt erhalten.
Normalerweise leitet die Börse die Nachricht an die Warteschlangen weiter, aber wir wollen oft nicht, dass unsere Nachrichten an alle Warteschlangen gesendet werden. Daher gibt es mehrere Bedingungen, die wir anwenden können, damit ein Austausch funktioniert.
So können Sie erreichen, dass Ihre Nachricht nur an einen einzigen Abnehmer gesendet wird und nicht an alle.
Bindungsschlüssel: Um eine Warteschlange mit einer Börse zu verbinden, müssen Sie eine Bindung erstellen, eine Beziehung zwischen einer Warteschlange und einer Börse, wie ein Connector.
Routing-Schlüssel: In dieser Verbindung können wir auch ein Element erstellen, das als Routing-Schlüssel bezeichnet wird, d.h. ein Schlüssel zur Weiterleitung unserer Nachrichten an eine bestimmte Warteschlange.
Wenn Sie einen Routing-Schlüssel X, einen Routing-Schlüssel Y und einen Routing-Schlüssel Z haben, wird die Nachricht mit dem Routing-Schlüssel Y zum Beispiel über die Warteschlange Y geleitet und direkt an den Verbraucher zugestellt, den Sie für den Empfang der Nachricht definiert haben.
Auf diese Weise können wir mehrere Warteschlangen mit einer Vermittlungsstelle verbinden, aber gleichzeitig können sie auch unterschiedliche Beziehungen zu den Vermittlungsstellen haben, die die Routing-Schlüssel verwenden.
Fanout-Austausch
Wenn die Nachricht an die Vermittlungsstelle gesendet wird, wird sie an alle Warteschlangen gesendet, die mit ihr verbunden sind. Wenn Sie also 10 Warteschlangen mit einem Fanout-Austausch verbunden haben, erhalten alle Warteschlangen die gesendete Nachricht.
Themen-Austausch
Dies ist eine der flexibelsten Vermittlungsstellen, die es uns ermöglicht, Nachrichten je nach Thema zu versenden. Und je nachdem, wie Sie die Routing-Schlüssel benennen, können Sie Muster von Regeln und Beziehungen zwischen Systemen erstellen.
Zum Beispiel: Routing-Schlüssel (x.*); Routing-Schlüssel (*.z); Routing-Schlüssel (*.y.*).
Was ist AQMP in RabbitMQ
AMQP (Advanced Message Queuing Protocol) ist ein offenes Messaging-Protokoll, das den Transport von Nachrichten zwischen mehreren Anwendungen definiert. Es ähnelt den HTTP- und TCP-Protokollen insofern, als es ein Protokoll auf Leitungsebene ist, mit dem Unterschied, dass es einen asynchronen Transport ermöglicht.
RabbitMQ hat sich aus mehreren Gründen für die Implementierung von AMQP entschieden. Der erste ist, dass dieses Protokoll als Standard für Middleware beschrieben wird, im Gegensatz zu JMS, das eine API definiert.
Ein internationales Konsortium, dem große Unternehmen wie Red Hat, Cisco Systems und Microsoft angehören, hat diese AMQP-Spezifikation verfasst. Der zweite Aspekt ist die Interoperabilität dieses Protokolls, die es jeder Anwendung, die AMQP implementiert, ermöglicht, mit einem AMQP-Broker zu kommunizieren.
AMQP ist nicht das einzige von RabbitMQ verwendete Protokoll. Die folgende Abbildung zeigt alle Protokolle, Sprachen und APIs, die von RabbitMQ implementiert und/oder unterstützt werden.
Die besten Eigenschaften von RabbitMQ
RabbitMQ ermöglicht nicht nur die Integration verschiedener Anwendungen über asynchrone Nachrichten und von verschiedenen Standorten aus, sondern bietet uns auch andere Funktionen, die es in der Welt der Messaging-Broker sehr beliebt gemacht haben:
Zuverlässige Speicherung
RabbitMQ verfügt über mehrere Funktionen, mit denen die Zustellung von Nachrichten garantiert werden kann. Unter anderem bietet es Speicherplatz, wenn keine Verbraucher die Nachricht empfangen können. Es ermöglicht Verbrauchern, die Zustellung der Nachricht zu akzeptieren, um sicherzustellen, dass sie erfolgreich verarbeitet wurde.
Wenn die Verarbeitung fehlschlägt, ermöglicht RabbitMQ, dass die Nachricht erneut in die Warteschlange gestellt wird, um von einer anderen Instanz des Verbrauchers konsumiert zu werden, oder dass sie von demselben Verbraucher, bei dem die Verarbeitung fehlgeschlagen ist, erneut verarbeitet wird, wenn er sich erholt.
RabbitMQ garantiert auch die Zustellungsreihenfolge der Nachrichten, d.h. sie werden in der gleichen Reihenfolge konsumiert, in der sie in den RabbitMQ-Warteschlangen angekommen sind.
Erstellung von Clustern
Obwohl RabbitMQ durch die Verarbeitung von Tausenden von Nachrichten pro Sekunde eine hervorragende Leistung bietet, muss es manchmal in der Lage sein, eine größere Anzahl von Nachrichten zu verarbeiten, ohne die Anwendungsleistung zu beeinträchtigen.
Zu diesem Zweck ermöglicht RabbitMQ die Erstellung von Clustern, um die Lösung horizontal zu skalieren, was sowohl für Produzenten als auch für Konsumenten transparent ist.
Hochverfügbare Warteschlangen
In RabbitMQ können Warteschlangen über mehrere Knoten in einem Cluster repliziert werden. So wird sichergestellt, dass der Broker auch bei einem Knotenausfall oder einer Ausfallzeit weiterhin Nachrichten von Produzenten empfangen und an die entsprechenden Konsumenten zustellen kann.
Flexibles Routing
In RabbitMQ können flexible Routing-Regeln definiert werden, die sogar einem bestimmten Muster folgen, um Nachrichten zwischen Exchanges und Warteschlangen über Bindungen weiterzuleiten.
Unterstützung mehrerer Protokolle
RabbitMQ unterstützt nicht nur das AMQP-Protokoll, sondern über Plugins auch STOMP, MQTT und HTTP. Es enthält außerdem Mechanismen zur Authentifizierung und Zugriffskontrolle für die einzelnen Komponenten des Brokers.
Anwendungsfälle von RabbitMQ im wirklichen Leben
Die wichtigsten Anwendungsfälle von RabbitMQ sind die Gewährleistung der Asynchronität zwischen Anwendungen, die Verringerung der Kopplung zwischen Anwendungen, die Verteilung von Warnmeldungen und die Kontrolle der Warteschlange von Aufträgen im Hintergrund.
Die praktischen Anwendungsfälle von RabbitMQ liegen jedoch im eCommerce, wo t zur Bearbeitung, Verarbeitung und Weiterleitung Ihrer Verkaufsaufträge an Systeme in anderen Bereichen, wie z.B. dem Vertrieb und der Rechnungsstellung, verwendet wird.
Bei der Bearbeitung von Bestellungen können Sie Ihre Verkaufsnachricht an das Vertriebszentrum und einen Rechnungsbereich weiterleiten. In diesem Schema arbeitet alles horizontal und folgt dem asynchronen Muster für das Senden von Nachrichten, aber es ist oft möglich, eine Aktion an mehrere Warteschlangen zu senden.
In Anlehnung an das vorherige Beispiel kann diese Funktion sehr nützlich sein, wenn der Kunde einen Kauf tätigt und das Produkt für den Vertrieb, den Transport und die Rechnungen vorbereitet werden muss.
Und da jeder dieser Bereiche ein anderes System ist, besteht das Ziel von RabbitMQ darin, alle diese Nachrichten an die entsprechenden Systeme weiterzuleiten.
Rabbit MQ Alternativen:
RabbitMQ ist viel einfacher, als es aussieht, und es gibt mehrere Alternativen dazu, darunter:
#1. IronMQ
IronMQ ist eine superschnelle Software für das Message Queuing. Sie ist hochverfügbar, langlebig im Design und vorzugsweise für eine einmalige Zustellung geeignet. IronMQ ist die leistungsfähigste Cloud-native Lösung für moderne Anwendungsarchitekturen.
Es unterstützt Push-Warteschlangen, Pull-Warteschlangen und Long Polls, bei denen Poll-Anfragen länger offen gehalten werden. Außerdem kann es mehrere hochverfügbare Rechenzentren nutzen, was die Skalierbarkeit erleichtert.
Sie können es in der Cloud, auf gemeinsam genutzter oder dedizierter Hardware oder vor Ort einsetzen. Außerdem verfügt es über eine Reihe von Client-Bibliotheken mit leicht verständlicher Dokumentation.
#2. Apache Kafka
Kafka ist eine Plattform mit einer starken Präsenz im verteilten Ereignis-Streaming. In seinem Kern ist Kafka als repliziertes, verteiltes, persistentes Commit-Log konzipiert.
Am besten eignet es sich für ereignisgesteuerte Power-Microservices oder groß angelegte Stream-Processing-Anwendungen, bei denen Ereignisse automatisch asynchron innerhalb des Clusters repliziert werden, um Fehlertoleranz und hohe Verfügbarkeit zu gewährleisten.
#3. Apache ActiveMQ
ActiveMQ ist ein Java-basierter Multiprotokoll Message Broker. Mit ihm können wir Anwendungen unter Verwendung des AMQP Message Queuing-Protokolls in die Anwendungsschicht integrieren.
Es implementiert mehrere Protokolle für die Integration, wie z.B. JMS (natives Java) und Stomp (das von PHP-Anwendungen verwendet werden kann).
Darüber hinaus bietet Amazon eine “verwaltete” Version namens Amazon MQ an, die die Nutzung des Dienstes erheblich erleichtert.
Letzte Worte
Messaging-Broker sind seit jeher ein wichtiger Bestandteil der Architekturen von Unternehmen. Angesichts der zunehmenden Zahl von Benutzern, die über verschiedene Kanäle auf die Systeme des Unternehmens zugreifen, werden jedoch Produkte benötigt, die eine horizontale Skalierung zu geringen Kosten ermöglichen. Sie ermöglichen die Verarbeitung einer großen Anzahl von Nachrichten pro Sekunde.
An dieser Stelle wird eine neue Generation von Brokern wie RabbitMQ für moderne Anwendungen immer wichtiger, die unseren Kunden ein hohes Maß an Verfügbarkeit, Zuverlässigkeit, Interoperabilität und Leistung bieten sollen.
Sie können auch einige zuverlässige RabbitMQ-Hosting-Plattformen für Ihre Anwendung erkunden.