Performance-Vergleich zwischen ZeroMQ, RabbitMQ und Apache Qpid
Brauche ich ein high-performance-message-bus für meine Anwendung also ich bin die Evaluation der performance von ZeroMQ
RabbitMQ
und Apache Qpid
. Zur Messung der performance, bei mir läuft ein Testprogramm veröffentlicht, die sagen, 10.000 Nachrichten mit Hilfe einer der Nachrichten-queue-Implementierungen und mit einem anderen Prozess auf der gleichen Maschine zu konsumieren, diese 10.000 Nachrichten. Dann nehme ich mal den Unterschied zwischen der ersten Meldung veröffentlicht und die zuletzt empfangene Nachricht.
Folgenden sind die Einstellungen, die ich für den Vergleich herangezogen.
RabbitMQ
: Ich habe mit einem "fanout" geben Sie exchange, und eine Warteschlange mit Standard-Konfiguration. Ich verwendet, die RabbitMQ-C-client-Bibliothek.ZeroMQ
: Mein Verleger publises zutcp://localhost:port1
mitZMQ_PUSH
socket, Mein broker hört auftcp://localhost:port1
und sendet die Nachricht an tcp://localhost:port2 und meine Verbraucher hört auftcp://localhost:port2
mitZMQ_PULL
- Buchse. Ich bin mit einem Makler anstelle von peer-to-peer-Kommunikation inZeroMQ
zu machen den performance-Vergleich fair zu anderen message-queue-Implementierung, die verwendet Broker.Qpid
C++, message broker: ich habe mit einem "fanout" geben Sie exchange, und eine Warteschlange mit Standard-Konfiguration. Ich benutzte die Qpid C++ client-Bibliothek.
Folgenden ist das Ergebnis:
RabbitMQ
: es dauert etwa 1 Sekunde erhalten 10.000 Nachrichten.ZeroMQ
: Es dauert etwa 15 milli Sekunden erhalten 10.000 Nachrichten.Qpid
: Es dauert etwa 4 Sekunden zu erhalten 10.000 Nachrichten.
Fragen:
- Jemand ähnliche performance-Vergleich zwischen den message-queues? Dann mag ich Vergleiche meine Ergebnisse mit Ihnen.
- Gibt es eine Möglichkeit, ich könnte tune
RabbitMQ
oderQpid
um die Leistung der it besser?
Hinweis:
Wurden die tests auf einer virtuellen Maschine mit zwei zugeordneten Prozessor. Das Ergebnis variieren für verschiedene hardware, aber ich bin vor allem daran interessiert, die relative Leistung des MQ-Produkte.
InformationsquelleAutor der Frage ahsankhan | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
RabbitMQ ist wahrscheinlich tun Persistenz auf diese Nachrichten. Ich glaube, Sie müssen legen Sie die Priorität der Nachricht oder eine weitere option in Nachrichten an nicht-Persistenz. Die Leistung verbessert sich dann 10x. Sie sollten erwarten, dass mindestens 100 Nachrichten/Sekunde über einen AMQP-broker. In OpenAMQ wir haben die Leistung um bis zu 300K Nachrichten/Sekunde.
AMQP war konzipiert für Geschwindigkeit (z.B. ist es nicht entpacken-Nachrichten, um auf route), aber ZeroMQ ist einfach besser konzipiert, die in grundlegende Methoden. E. g. es entfernt einen hop durch die Verbindung von Knoten ohne Makler; es ist besser asynchrone I/O-als eine der AMQP-client-stacks; es tut mehr aggressive Nachricht Batchverarbeitung. Vielleicht 60% der Zeit damit verbracht Gebäude ZeroMQ ging in performance tuning. Es war sehr harte Arbeit. Es ist nicht schneller durch Zufall.
Eine Sache, die ich gerne tun würde, aber bin zu beschäftigt, ist wieder eine AMQP-wie broker die oben auf der ZeroMQ. Es ist eine erste Schicht hier: http://rfc.zeromq.org/spec:15. Der ganze Stapel würde die Arbeit etwas wie RestMS, mit dem transport und der Semantik getrennt in zwei Schichten. Es würde sehr viel die gleiche Funktionalität wie AMQP/0.9.1 (und semantisch interoperabel), aber deutlich schneller.
InformationsquelleAutor der Antwort Pieter Hintjens
Hmm, natürlich ZeroMQ wird schneller sein, es soll und hat nicht viel der broker basierte Funktionen, die die anderen beiden bieten. Die ZeroMQ Website hat einen wunderbaren Vergleich der broker vs brokerless messaging-und Nachteile & Vorteile der beiden.
RabbitMQ Blog:
(Ich auch, wie das oben RabbitMQ post oben, wie es auch Gespräche über die Verwendung ZeroMQ mit RabbitMQ)
So, was ich versuche zu sagen ist, dass Sie sollten entscheiden, auf die tech, die am besten zu Ihren Anforderungen passt. Wenn die einzige Voraussetzung ist die Geschwindigkeit, ZeroMQ. Aber wenn Sie müssen andere Aspekte wie die Persistenz von Nachrichten, Filter -, überwachungs -, failover, etc. gut, das ist dann, wenn u brauchen, um zu überlegen, RabbitMQ & Qpid.
InformationsquelleAutor der Antwort Steve Casey
Nicht sicher, warum Sie wollen, das zu tun-wenn das einzige, was Sie interessiert, ist die Leistung, gibt es keine Notwendigkeit, um das Spielfeld Ebene. Wenn Sie nicht kümmern, über Beharrlichkeit, Filter, etc. warum dann den Preis zahlen?
Ich bin auch sehr misstrauisch gegenüber benchmarks laufen auf VM ' s -- es gibt eine Menge von zusätzlichen Schichten können die Ergebnisse beeinflussen in einer Weise, die nicht offensichtlich sind. (Es sei denn, Sie planen zu laufen, die im realen system auf VM ' s, natürlich, in dem Fall, dass ist eine sehr Valide Methode).
InformationsquelleAutor der Antwort WallStProg
Getestet hab ich c++/qpid
Schickte ich 50000 Nachrichten pro Sekunde zwischen zwei verschiedenen Maschinen für eine lange Zeit mit keine Wartezeiten.
Habe ich ein fanout, nur eine einfache exchange (non-persistente Nachrichten)
Verwenden Sie persistente Nachrichten?
Sie sind auf der Analyse der Nachrichten?
Nehme ich nicht, da 0MQ nicht-message-Strukturen.
Wenn der broker ist vor allem im Leerlauf, die Sie wahrscheinlich noch nicht konfiguriert die prefetch auf sender und rezeptor. Dies ist sehr wichtig, viele Nachrichten zu senden.
InformationsquelleAutor der Antwort joseluis
Haben wir im Vergleich RabbitMQ mit unseren SocketPro (http://www.udaparts.com/) persistent message queue am Standort http://www.udaparts.com/document/articles/fastsocketpro.htm mit allen source-codes. Hier sind die Ergebnisse, die wir erhalten für RabbitMQ:
Gleichen Maschine enqueue und dequeue:
Cross-Maschine enqueue-und dequeue-mit Netzwerk-Bandbreite, 100 Mbit /s:
InformationsquelleAutor der Antwort Yuancai Ye
Versuchen zu konfigurieren prefetch auf sender und rezeptor mit einem Wert wie 100. Prefetching nur Absender ist nicht genug
InformationsquelleAutor der Antwort jale
Wir haben entwickelt eine open-source-message-bus basiert auf ZeroMQ - wir anfänglich hat dieser zu ersetzen Qpid. Es ist brokerless es ist also ein ganz fairer Vergleich, aber es bietet die gleiche Funktionalität wie die vermittelten Lösungen.
Unserer überschrift Leistung Abbildung ist 140K Nachrichten pro Sekunde zwischen zwei Maschinen, aber Sie können sehen, mehr Details hier: https://github.com/Abc-Arbitrage/Zebus/wiki/Performance
InformationsquelleAutor der Antwort Slugart
ich denke, wenn Sie verwenden, Sellerie, Rabbitmq ist die Leistung verbessern
InformationsquelleAutor der Antwort user2387567