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.