Nous serions intéressés par toute expérience concernant les avantages et les inconvénients d'ActiveMQ, RabbitMQ ou ZeroMQ. Toute information sur d'autres files d'attente de messages intéressantes est également la bienvenue.
Réponses
Trop de publicités?Edit : Ma réponse initiale était fortement axée sur AMQP. J'ai décidé de la réécrire pour offrir une vision plus large du sujet.
Ces trois technologies de messagerie ont des approches différentes de la construction de systèmes distribués :
RabbitMQ est l'une des principales implémentations du protocole AMQP (avec Apache Qpid). Il met donc en œuvre une architecture de courtier, ce qui signifie que les messages sont mis en file d'attente sur un nœud central avant d'être envoyés aux clients. Cette approche rend RabbitMQ très facile à utiliser et à déployer, car des scénarios avancés tels que le routage, l'équilibrage de charge ou la mise en file d'attente persistante des messages sont pris en charge en quelques lignes de code seulement. Cependant, elle le rend également moins évolutif et plus "lent", car le nœud central ajoute de la latence et les enveloppes de messages sont assez grandes.
ZeroMq est un système de messagerie très léger, spécialement conçu pour les scénarios à haut débit et faible latence comme ceux que l'on trouve dans le monde financier. Zmq prend en charge de nombreux scénarios de messagerie avancés, mais contrairement à RabbitMQ, vous devrez mettre en œuvre la plupart d'entre eux vous-même en combinant divers éléments du framework (par exemple : sockets et périphériques). Zmq est très flexible, mais vous devrez étudier les fonctionnalités de l'application. 80 pages environ du guide (dont je recommande la lecture à tous ceux qui écrivent des systèmes distribués, même si vous n'utilisez pas Zmq) avant de pouvoir faire quelque chose de plus compliqué que d'envoyer des messages entre 2 pairs.
ActiveMQ se situe dans une position intermédiaire. Comme Zmq, il peut être déployé avec les topologies broker et P2P. Comme RabbitMQ, il est plus facile de mettre en œuvre des scénarios avancés, mais généralement au détriment des performances brutes. C'est le couteau suisse de la messagerie :-).
Enfin, les 3 produits :
- avoir des apis clients pour les langages les plus courants (C++, Java, .Net, Python, Php, Ruby, )
- disposer d'une documentation solide
- sont activement soutenus
Pourquoi avez-vous manqué Moineau , Starling , Kestrel , Amazon SQS , Beanstalkd , Kafka , IronMQ ?
Serveurs de file d'attente de messages
Les serveurs de file d'attente de messages sont disponibles dans différents langages, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling ou Sparrow), Scala (Kestrel, Kafka) ou Java (ActiveMQ). Un bref aperçu peut être trouvé aquí
Moineau
- écrit par Alex MacCaw
- Sparrow est une file d'attente légère écrite en Ruby qui "parle memcache".
Starling
- écrit par Blaine Cook sur Twitter
- Starling est un serveur de file d'attente de messages basé sur MemCached.
- écrit en Ruby
- stocke les travaux en mémoire (file d'attente de messages)
- documentation : quelques bons tutoriels, par exemple le Railscast sur Starling et Workling o cet article de blog sur l'étourneau
Kestrel
- écrit par Robey Pointer
- Clone de Starling écrit en Scala (un portage de Starling de Ruby à Scala)
- Les files d'attente sont stockées en mémoire, mais enregistrées sur le disque.
RabbitMQ
- RabbitMQ est un serveur de file d'attente de messages en Erlang.
- stocke les travaux en mémoire (file d'attente de messages)
Apache ActiveMQ
- ActiveMQ est un courtier de messages open source en Java.
Beanstalkd
- rédigé par Philotic, Inc. pour améliorer le temps de réponse d'une application Facebook
- service de file d'attente en mémoire, principalement écrit en C
- Docu : http://nubyonrails.com/articles/about-this-blog-beanstalk-messaging-queue
Amazon SQS
Kafka
- Écrit à LinkedIn en Scala
- Utilisé par LinkedIn pour décharger le traitement de toutes les pages et autres vues.
- Par défaut, la persistance est utilisée, le cache disque du système d'exploitation est utilisé pour les données chaudes (le débit est supérieur à celui de toutes les solutions ci-dessus dont la persistance est activée).
- Prise en charge du traitement en ligne et hors ligne
ZMQ
- La bibliothèque de socket qui agit comme un cadre de concurrence.
- Plus rapide que TCP, pour les produits en grappe et les superordinateurs.
- Transporte les messages à travers inproc, IPC, TCP et multicast.
- Connecter N-to-N via fanout, pubsub, pipeline, request-reply
- Entrées/sorties asynchrones pour les applications multicœurs évolutives de passage de messages
EagleMQ
- EagleMQ est un gestionnaire de file d'attente open source, performant et léger.
- Écrit en C
- Stocke toutes les données en mémoire et prend en charge la persistance.
- Il dispose de son propre protocole. Il permet de travailler avec des files d'attente, des routes et des canaux.
IronMQ
- IronMQ
- Écrit en Go
- Service de file d'attente entièrement géré
- Disponible en version "cloud" et "on-premise".
J'espère que cela nous sera utile. source
Plus d'informations que vous ne voudriez en savoir :
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
UPDATE
Je ne fais que développer ce que Paul a ajouté en commentaire. Le site page mentionnée ci-dessus est mort après 2010, donc à lire avec une pincée de sel. Beaucoup de choses ont été changées en 3 ans.
Cela dépend vraiment de votre cas d'utilisation.
Comparer 0MQ avec ActiveMQ ou RabbitMQ n'est pas juste. ActiveMQ et RabbitMQ sont des systèmes de messagerie qui nécessitent une installation et une administration. Ils offrent beaucoup plus de fonctionnalités que ZeroMQ. Ils ont de vraies files d'attente persistantes, un support pour les transactions, etc.
ZeroMQ est une implémentation légère de socket orientée message. Il est également adapté à la programmation asynchrone en cours de processus. Il est possible d'exécuter un "système de messagerie d'entreprise" sur ZeroMQ, mais vous devrez mettre en œuvre beaucoup de choses par vous-même.
Donc :
ActiveMQ, RabbitMQ, Websphere MQ et MSMQ sont des "Enterprise Message Queues".
ZeroMQ est une bibliothèque IPC orientée message.
Il y a une comparaison entre RabbitMQ et ActiveMQ. aquí . Par défaut, ActiveMQ est configuré pour garantir la livraison des messages - ce qui peut donner l'impression qu'il est lent comparé à des systèmes de messagerie moins fiables. Vous pouvez toujours modifier la configuration pour les performances si vous le souhaitez et obtenir des performances au moins aussi bonnes que celles de tout autre système de messagerie. Au moins, vous avez cette possibilité. Il y a beaucoup d'informations sur les forums et la FAQ ActiveMQ concernant la configuration pour la mise à l'échelle, les performances et la haute disponibilité. De plus, ActiveMQ supportera AMQP 1.0 lorsque la spécification sera finalisée, ainsi que d'autres formats de fils, comme STOMP.
Un autre avantage pour ActiveMQ est qu'il s'agit d'un projet Apache, donc il y a une diversité dans la communauté des développeurs - et il n'est pas lié à une entreprise.