In moderner, verteilter IT-Infrastruktur werden Message-orientierte Systeme immer wichtiger. Wo früher eine harte, synchrone Kopplung über API-Schnittstellen eingesetzt wurde, findet man heute asynchrone Schnittstellen zwischen verschiedenen Systemen. Dies fördert insbesondere durch die asynchrone Anbindung eine bessere Lastverteilung und somit die Ausnutzung der verfügbaren Ressourcen.
Ferner werden Message-Queuing-Systeme eingesetzt, um beispielsweise Grenzen zwischen einzelnen Sicherheitszonen zu überwinden.
Insbesondere leichtgewichtige und anwendungsunabhängige Protokolle wie MQTT oder AMQP kommen heute oft zum Einsatz. Während MQTT überwiegend im Bereich von Embedded Systems und IoT-Systemen anzutreffen ist, findet man AMQP-basierte Message oriented Middleware in vielen Bereichen, vor allem im Enterprise-Umfeld.
Organisatorisch unterstützen Message Broker das Publish-Subscribe-Pattern, indem sie dieses auf FIFO-Speichern abbilden.
RabbitMQ
RabbitMQ ist ein Open Source Message Broker, der kommerziell von dem Unternehmen Pivotal Software weiterentwickelt wird. Obwohl RabbitMQ vollständig in der Sprache „Erlang“ geschrieben ist, integriert er sich auch hervorragend in Java-basierte Umgebungen. Auch andere Open Source Projekte wie z. B. OpenStack nutzen intern RabbitMQ als Kommunikationszentrale.
Die technologische Herkunft aus dem Erlang-Umfeld sorgt für eine extrem hohe Betriebsstabilität und Verfügbarkeit bei unproblematischem Aufbau eines Clusters. RabbitMQ kann sehr hohe Durchsatzraten auch bei komplexen Verteilungsregeln abliefern. Der Message Broker ist sehr flexibel, da er neben dem AMQP in Version 0.9.1 auch diverse andere Protokolle wie MQTT, AMQP 1.0, Stomp, WebStomp etc. vermitteln kann. Dies kann übersetzend genutzt werden, d.h., es lassen sich Clients, die verschiedene Protokolle sprechen, dennoch in einer Queue bzw. Exchange kombinieren. Durch verschiedene zum Teil vom Hersteller mitgelieferte Plug-ins lässt sich RabbitMQ erweitern und an Bedürfnisse anpassen.
Benutzerberechtigungen, TLS-Verbindungen und virtuelle Hosts lassen einen RabbitMQ-Server oder RabbitMQ-Cluster als zentrales Element einer Infrastruktur nutzen. Durch diverse Einstellmöglichkeiten lassen sich von einer Gewichtung auf Schnelligkeit bis hin zu einer Gewichtung auf hohe Zustellsicherheit RabbitMQ-Systeme an die jeweiligen Anforderungen anpassen. Ferner bietet RabbitMQ hervorragende Fähigkeiten zum Aufbau diverser Clusterstrukturen.
Apache ActiveMQ „Classic“
Der in Java geschriebene Apache ActiveMQ implementiert vollständig die Java-Message-Service-(JMS-)1.1-Spezifikation. Zusätzlich unterstützt ActiveMQ das Protokoll AMQP in den Versionen 0.9.1 und 1.0, MQTT und Stomp.
Aufgrund der Herkunft aus dem Java-Umfeld und der Positionierung innerhalb des Apache-Projektes wird er oft in diesem Bereich eingesetzt. Im Clusterbereich setzt ActiveMQ auf die Unterstützung durch Apache ZooKeeper. Um die gewünschte Persistenz gewährleisten zu können, setzt ActiveMQ auf KahaDB und Datenbanken, die per JDBC erreichbar sind.
Apache ActiveMQ Artemis
Apache ActiveMQ Artemis ist eine Neuentwicklung, die eine Konvergenz zum ursprünglichen Apache ActiveMQ Projekt aufweist. Der Code basiert auf HornetQ aus JBoss. Der Schwerpunkt dieser Neuimplementierung liegt auf hoher Performance bei gleichzeitiger Anpassung an neue Paradigmen, wie beispielsweise die Fähigkeit zur Nutzung in Containern. Artemis unterstützt JMS 1.1 und 2.0, Hochverfügbarkeit durch Shared Storage und Netzwerkreplikation sowie dynamisches Clustering.
Datenströme
Im Bereich der Stream-Verteilung wird typischerweise nicht auf ein FIFO-Konzept gesetzt. Typischerweise implementieren diese Dienste vielmehr Logs, in die Publisher schreiben und in denen Consumer lesen und die Streaming-Software die Einträge nach Erfüllen eines Kriteriums, wie Alter oder Größe des Logs, verwirft. Ob alles bereits gelesen wurde, muss die Consumer-Software selbst sicher stellen.
Apache Kafka
Apache Kafka als typischer Vertreter der Streaming-Fraktion ist auf hohen Datendurchsatz optimiert. Insbesondere die konsequente Verteilung von Teilaufgaben auf einzelne Knoten im Cluster bietet viele Optionen zur Optimierung und Performancesteigerung. Die Clusterkoordination in einem Kafka-Cluster übernimmt Apache ZooKeeper.
Durch die Einfachheit der Struktur bzw. den bewussten Verzicht auf Zustell-Logik bzgl. einzelner Nachrichten kann dieses System extrem große Datenmengen in kurzer Zeit bewegen und skalieren. Dazu kommen Möglichkeiten wie beispielsweise Stream-Processing, die es erlauben, im laufenden Datenstrom bereits Filter, Verdichtungen oder Faltungen etc. durchzuführen. Diese Fähigkeiten sowie die Option, beispielsweise an ein Hadoop anzudocken, sind besonders im Big-Data-Umfeld von hoher Bedeutung.
Im Bereich des klassischen Messagings ist Apache Kafka mit Systemen wie RabbitMQ vergleichbar, verlagert aber große Teile der Logik in Clientsysteme, ohne dabei Protokolle wie AMQP zu implementieren. Daher bietet es sich nicht an, in diesem Umfeld Apache Kafka anstelle eines RabbitMQ oder ActiveMQ einzusetzen.
Sie haben Fragen zum Thema Message Broker? Dann sind wir der richtige Partner für Sie!
Haben wir Ihr Interesse geweckt?
Unsere Experten beantworten gerne Ihre individuellen Fragen und unterstützen Sie bei der Wahl der passenden Open Source Lösung für Ihr Vorhaben.
Das credativ®
Open Source Support Center
Unsere Antworten auf die häufigsten Fragen: