Message Queue Server & JobManager
Gearman / RabbitMQ / Celery
Fiche Technique
Les serveurs MQ (Message Queue) sont des brokeurs de « messages » qui implémentent le protocole AMQP (Advanced Message Queuing Protocol). Ces services permettent d’empiler dans des files d’attente des messages qui seront dispatchés vers un ou plusieurs clients appelé(s) alors à traiter ce message.
Un serveur MQ est un middleware permettant le traitement de tâches en asynchrone ou en temps-réel via une interface unifiée. Ainsi, un processus PHP par exemple peut « pousser » un message dans une file d’attente du serveur MQ, message qui sera récupéré et traité par un ou plusieurs processus Python qui « écoutent » cette même file d’attente.
Ces services peuvent trouver plusieurs applications :
- L’envoi de messages à un ou plusieurs processus abonnés au fil de réception (Chat temps réel);
- Lancement de tâches distribuées asynchrones (Envoi d’un email transactionnel asynchrone et non bloquant pour votre applicatif);
- Le routage de messages vers divers processus de façon conditionnelle (Système d’alerting asynchrone et distribué).
RabbitMQ et Celery sont des serveurs MQ avec un maximum de fonctionnalités, tandis que Gearman est plus limitatif puisqu’il ne permet que l’appel de procédures distantes (RPC) dans son propre protocole.
Utilisation de Message Queue et Job Manager chez VINC
A chaque besoin de calcul distribué et parallélisé, de traitement de tâches lourdes asynchrones ou de lancement de processus, VINC utilise des messages queues. Ceci permet un contrôle et une répartition des tâches dans le cloud.
Un exemple d’utilisation
Consolidation de données de tracking pour Histoire d’Adresses
Dans le cadre de l’export de données consolidées quotidiennement, VINC utilise Gearman pour distribuer un calcul sur 150 processus simultanés et sur une base de données répliquées en temps réel afin de ne pas impacter la production. Ces processus effectuent des fonctions personnalisées de map-reduce afin de produire un fichier compressé qui sera alors transmis à Histoire d’Adresses.
Dans ce cas, le calcul distribué permet de passer d’un temps de traitement usuel de 10 heures en mode itératif à 1 heure, soit un temps divisé par 10.
Traitement de batchs/travaux asynchrones pour NetLEGIS
L’interface d’administration des sites de NetLEGIS développés par VINC permet d’éditer un certain nombre de contenus. Ce contenu est alors converti par un certain nombre de processus dans divers formats téléchargeables pour les besoins des clients. Chacune des étapes ajoute et/ou modifie les contenus ainsi générés en utilisant différents logiciels permettant d’obtenir un rendu final. Chacun de ses processus s’effectue en tâche de fond, gérée par Celery. Par exemple, la création automatique d’un fichier Word 97 à partir de contenus HTML, puis l’ajout automatique de diverses notes légales, enfin la création simultanée d’un fichier de démonstration de ce fichier Word 97 en PDF, avec page de garde et découpage automatique du contenu. Tout ceci s’effectue alors que l’éditeur sur l’administration du site continue de surfer et d’éditer ses contenus.