Was ist RabbitMQ?

RabbitMQ ist ein Message Broker. Er sitzt zwischen den Teilen eines Systems, die Arbeit erzeugen, und denen, die sie erledigen, hält Nachrichten, bis jemand bereit ist, und sorgt dafür, dass jede bearbeitet wird.

Er setzt AMQP 0-9-1 samt Erweiterungen um, unterstützt Publish/Subscribe, Arbeitsqueues und Request/Reply und steht unter MPL-2.0. Begonnen hat er bei Rabbit Technologies, gepflegt wird er heute unter Broadcom.

Das Problem, das er löst

Ohne Broker ruft ein Dienst einen anderen direkt auf und wartet. Das funktioniert, bis es das nicht mehr tut:

Ein Broker macht aus dem Aufruf eine Übergabe. Der Erzeuger schreibt eine Nachricht und macht weiter. Der Verbraucher nimmt sie, wenn er kann. Ist der Verbraucher ausgefallen, hält die Queue. Kommt Arbeit stossweise, fängt die Queue sie ab. Reicht ein Verbraucher nicht, kommt ein zweiter dazu und beide teilen sich die Queue.

Die übliche erste Anwendung ist genau das: eine Operation, die Sekunden dauert und nicht passieren muss, während jemand wartet. Die Bestätigungsmail versenden, das PDF erzeugen, den Datensatz neu indizieren. Auf eine Queue legen und die Seite sofort ausliefern.

Beratung anfragen

Er gibt dir ausserdem etwas, worauf du skalieren kannst

Dieser Teil fällt später auf und ist oft mehr wert als die Entkopplung.

Sobald Arbeit über eine Queue läuft, sind Erzeuger und Verbraucher getrennte Installationen und skalieren unabhängig voneinander. Eine Lastspitze bringt zusätzliche Erzeuger, ohne die Worker anzufassen, ein Rückstau zusätzliche Worker, ohne die Webschicht anzufassen.

Nützlicher noch: die Queue liefert ein ehrliches Signal zum Skalieren. Autoscaling nach CPU ist ein Ersatzmass für Auslastung, und ein schlechtes: ein Worker, der auf eine langsame externe API wartet, sieht untätig aus und ist vollständig beschäftigt. Die Queue-Tiefe ist das tatsächliche Mass unerledigter Arbeit. Wächst sie, kommen die aktuellen Worker nicht nach, was auch immer ihre CPU sagt. Leert sie sich, hast du mehr Kapazität als nötig und kannst sie zurückgeben.

Damit wird die Skalierungsregel einfach genug, um sie aufzuschreiben und ihr zu trauen: Verbraucher hinzufügen, solange der Rückstau wächst, und wegnehmen, sobald er abgebaut ist.

Queues und Streams sind verschiedene Dinge

Diese Unterscheidung entscheidet, ob RabbitMQ deine Antwort ist, und hier liegt die meiste Verwirrung.

Eine Queue verteilt Arbeit. Jede Nachricht geht an einen Verbraucher, der sie bestätigt, danach ist sie weg. Mehr Verbraucher heisst geteilte Arbeit. Die Queue ist ein Puffer und kein Archiv.

Ein Stream führt ein Log. Nachrichten bleiben nach dem Lesen bestehen, mehrere unabhängige Verbraucher lesen jeweils das Ganze an ihrer eigenen Position, und ein neuer Verbraucher kann von vorn beginnen. Das Log ist das Archiv.

RabbitMQ ist um das Erste herum gebaut und hat Funktionen fürs Zweite dazubekommen. Kafka ist um das Zweite herum gebaut. Wenn deine Anforderung lautet, dass viele Systeme jedes Ereignis verarbeiten und ein nächstes Jahr hinzugefügter Verbraucher das letzte Jahr nachspielen kann, beschreibst du ein Log und solltest dir eines ansehen. Wenn deine Anforderung lautet, Arbeit vom Anfrageweg zu nehmen und über Worker zu verteilen, ist ein Broker die kleinere und einfachere Antwort.

Wann du einen brauchst

Wann nicht

Eine einzelne Anwendung mit schnellen Operationen braucht keinen. Ein Broker ist eine weitere Komponente zum Betreiben, Überwachen und Durchdenken, und ihn einzuführen, bevor ein Warteschlangenproblem existiert, kauft Komplexität ohne Nutzen.

Wenn "nimm doch die Datenbank" ehrlich ist. Eine kleine Arbeitsqueue in einer Tabelle in PostgreSQL ist bei geringem Volumen ein legitimer Entwurf. Bei hohem Volumen hört sie auf, es zu sein, und viele Systeme kommen nie dorthin.

Wenn du das Log brauchst. Siehe oben. Einen Broker für eine Streaming-Anforderung zu wählen heisst, ein Log schlecht nachzubauen.

Was der Betrieb eines Clusters verlangt

Der Fehlerfall ist selten der abstürzende Broker. Es ist eine Queue, die niemand begrenzt hat und die über ein Wochenende volläuft, weil ein Verbraucher am Freitag still gestorben ist.

Wo VSHN ins Bild kommt

VSHN betreibt RabbitMQ auf Schweizer Cloud-Infrastruktur, mit Betrieb rund um die Uhr, auf Cloudscale und auf Enterprise Private Cloud, mit AMQP, MQTT und STOMP und mit täglichen Backups. Servala nimmt Bestellungen in Selbstbedienung entgegen.

Wenn bei dir noch offen ist, ob es ein Broker oder ein Log werden soll, klär das zuerst: es ist später schwerer zu ändern als die Frage, wer es betreibt. Unser Hosting-Vergleich behandelt die Anbieterfrage, sobald du dort ankommst.

Kostenschätzung anfragen

Melde dich

Brauchst du verwaltetes RabbitMQ? Bestelle in Selbstbedienung auf Servala unter servala.com/service/rabbitmq/, oder melde dich für ein kostenloses Gespräch. Brauchst du Hilfe bei der Messaging-Architektur? Wir vermitteln dir den passenden Beratungspartner.

Kostenloses Gespräch buchen

Oder stelle deine Frage