RabbitMQ - Solution Message-Oriented Middleware


Usages

Load balancing

Un cas d'utilisation typique de la solution RabbitMQ est le load balancing. Une simple architecture permet de gérer la distribution de charges entre plusieurs consommateurs, appelés aussi workers. Voici, un schéma qui illustre la mise en place d'un répartiteur de charge.

Dans cette architecture, c'est donc le broker RabbitMQ qui joue le rôle du répartiteur de charge (ou load balancer) et plus précisément la seule et unique queue qu'il contient. Les consommateurs c1, c2 à cn représentent les n duplications d'un worker (exemple : serveur applicatif).
En effet, la queue du broker reçoit tous les messages provenant d'un ou plusieurs producteurs et envoient les messages un à un aux consommateurs qui sont disponibles. Le premier consommateur disponible est celui qui va recevoir le message, car pour rappel, un message ne peut être consommé qu'une seule fois, et par conséquent par un seul consommateur.
Au final, nous avons un simple load balancer gratuit, fonctionnant sur un routage de type direct (ou default).



Polling

Un deuxième intérêt pour RabbitMQ, et pas le moindre, est la possibilité de supprimer le polling de base de données au sein d'une architecture réseau. La problématique de polling est un sujet actuel concernant bien de nombreux sites, et particulièrement les sites de réseaux sociaux.
En effet, ces sites ont besoin de stocker de nombreuses données (des térabits) dans le cloud. Mais ces données changent très régulièrement et le but de ces sites comme Facebook est d'être prévenu lors de la modification de ces données. C'est ce que l'on appelle les notifications ou push. Pour mettre en place un système de notification, il faut faire du polling de base données, c'est-à-dire qu'on scrute les modifications de données par le biais de requêtes à un intervalle de temps rapproché.
La solution de RabbitMQ se nomme RabbitHub, une implémentation du PubSubHubhub. Voici, un lien Youtube qui permet d'expliquer le terme PubSubHubhub :



Cette solution consiste à installer un hub dans le cloud qui fait l'intermédiaire entre un publisher (ou producteur) et un subscriber (ou consommateur). De cette façon, on supprime tout polling et toute surcharge apportée dans un réseau. Le projet RabbitHub est disponible sur github : RabbitHub.