82 votes

Comparaison des performances entre ZeroMQ, RabbitMQ et Apache Qpid

J'ai besoin d'une haute performance bus de message pour mon application je suis donc d'évaluer la performance de l' ZeroMQ, RabbiMQ et Apache Qpid. Pour mesurer la performance, je suis en cours d'exécution d'un programme de test qui publie dire 10 000 messages à l'aide de l'un des messages de la file d'attente de mise en œuvre et l'exécution d'un autre processus dans la même machine à consommer ces 10 000 messages. Puis-je enregistrer de la différence de temps entre le premier message publié et le dernier message reçu.

Suivants sont les paramètres que j'ai utilisé pour la comparaison.

  1. RabbitMQ: J'ai utilisé une "distribution" type d'échange et une file d'attente avec la configuration par défaut. J'ai utilisé le RabbitMQ C de la bibliothèque du client.
  2. ZeroMQ: Mon éditeur publises d' tcp://localhost:port1 avec ZMQ_PUSH socket, Mon courtier en écoute sur tcp://localhost:port1 et renvoie le message: tcp://localhost:usb2 et ma consommation est à l'écoute sur tcp://localhost:port2 l'aide ZMQ_PULL socket. Je suis à l'aide d'un courtier au lieu de pairs à pairs de la communication en ZeroMQ de la comparaison de performance juste de l'autre message de la file d'attente de mise en œuvre qui utilise des courtiers.
  3. Qpid C++ message broker: j'ai utilisé une "distribution" type d'échange et une file d'attente avec la configuration par défaut. J'ai utilisé le Qpid C++ de la bibliothèque du client.

Voici le résultat:

  1. RabbitMQ: il faut environ 1 seconde pour recevoir 10 000 messages.
  2. ZeroMQ: Il faut environ 15 milli secondes pour recevoir 10 000 messages.
  3. Qpid: Il faut environ 4 secondes pour recevoir 10 000 messages.

Questions:

  1. Quelqu'un similaire comparaison des performances entre les files d'attente de messages? Alors je tiens à comparer mes résultats avec les vôtres.
  2. Est-il possible que je pourrait accorder RabbitMQ ou Qpid à faire mieux?

Note:

Les tests ont été effectués sur une machine virtuelle avec deux alloués processeur. Le résultat peut varier pour différents matériels, cependant, je m'intéresse principalement à la performance relative de la MQ produits.

108voto

Pieter Hintjens Points 3677

RabbitMQ est sans doute la persistance sur ces messages. Je pense que vous devez définir la priorité du message ou une autre option dans les messages pour ne pas faire de persistance. Les performances seront meilleures 10x ensuite. Vous devez attendre au moins 100 messages/seconde par l'intermédiaire d'un courtier AMQP. Dans OpenAMQ nous avons obtenu des performances jusqu'à 300K messages/seconde.

AMQP a été conçu pour la vitesse (par exemple, il n'est pas décompresser les messages dans le but de les router) mais ZeroMQ est tout simplement mieux conçu de manière déterminante. E. g. il enlève hop par la connexion de nœuds sans courtier; il fait mieux asynchronous I/O que tout le AMQP client de cheminées; il n'est plus agressif message de traitement par lots. Peut-être que 60% du temps consacré à la construction des ZeroMQ est allé dans l'optimisation des performances. Ça a été très dur. Ce n'est pas plus rapide par accident.

Une chose que j'aimerais faire, mais je suis trop occupé, est de recréer une AMQP-comme courtier sur le dessus de ZeroMQ. Il y a une première couche ici: http://rfc.zeromq.org/spec:15. L'ensemble de la pile fonctionnerait un peu comme RestMS, du transport et de la sémantique séparés en deux couches. Il fournirait les mêmes fonctionnalités que AMQP/0.9.1 (et sémantiquement interopérables), mais nettement plus rapide.

33voto

Steve Points 1319

Hmm, bien sûr, ZeroMQ sera plus rapide, il est conçu pour être et ne pas avoir beaucoup de la courtier en fonction des fonctionnalités que les deux autres offrent. Le ZeroMQ site a un merveilleux comparaison de courtier vs brokerless de messagerie et les inconvénients et les avantages des deux.

RabbitMQ Blog:

RabbitMQ et 0MQ se concentrent sur différents aspects de la messagerie. 0MQ met beaucoup plus l'accent sur la façon dont les messages sont transférés sur le fil. RabbitMQ, d'autre part, se concentre sur la façon dont les messages sont stockés, filtré et contrôlé.

(J'aime aussi le au-dessus de RabbitMQ post ci-dessus comme il parle également de l'aide de ZeroMQ avec RabbitMQ)

Donc, ce que j'essaie de dire, c'est que vous devez décider sur la technologie qui correspond le mieux à vos exigences. Si la seule exigence est la vitesse, ZeroMQ. Mais si vous avez besoin d'autres aspects tels que la persistance des messages, de filtrage, de contrôle, de basculement, etc eh bien, alors que c'est quand u besoin pour commencer à envisager RabbitMQ & Qpid.

3voto

joseluis Points 31

J'ai testé c++/qpid

J'ai envoyé 50000 messages par seconde entre deux différentes machines pour une longue période de temps sans faire la queue.

Je n'ai pas utilisé une sortance, juste un simple échange (non persistant messages)

Êtes-vous à l'aide de messages persistants? Êtes-vous l'analyse des messages?

Je suppose que non, car 0MQ n'a pas de message de structures.

Si le courtier est essentiellement inactif, vous n'avez probablement pas configuré le prefetch sur l'expéditeur et le récepteur. C'est très important d'envoyer de nombreux messages.

1voto

Yuancai Ye Points 1

Nous avons comparé RabbitMQ avec notre SocketPro (http://www.udaparts.com/) persistante file d'attente de messages sur le site http://www.udaparts.com/document/articles/fastsocketpro.htm avec tous les codes source. Voici les résultats que nous avons obtenu pour RabbitMQ:

Même la machine à la file et file d'attente:

"Bonjour tout le monde," mettre en File d'attente: 30000 messages par seconde; la file d'attente: 7 000 messages par seconde. Texte avec 1024 octets -- mettre en File d'attente: 11000 messages par seconde; la file d'attente: 7 000 messages par seconde. Texte avec 10 * 1024 octets -- mettre en File d'attente: 4000 messages par seconde; Résorption de l': 4000 messages par seconde.

La croix-machine de mise en file et file d'attente avec la bande passante du réseau 100 mbits / s:

"Bonjour tout le monde," mettre en File d'attente: 28000 messages par seconde; Résorption de l': 1900 messages par seconde. Texte avec 1024 octets -- mettre en File d'attente: 8000 messages par seconde; la file d'attente: 1 000 messages par seconde. Texte avec 10 * 1024 octets -- mettre en File d'attente: 800 messages par seconde; Résorption de l': 700 messages par seconde.

0voto

jale Points 31

Essayez de configurer prefetch sur l'expéditeur et le récepteur avec une valeur de 100. Le pré-chargement juste de l'expéditeur n'est pas assez

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X