Découvrez nos offres pour faire du digital le levier de votre croissance !
Téléchargez le Guide Ultime de gestion de projet digitale pour vous aider à piloter vos transformations et faire les bons choix !
Lorsque votre site web commence à nécessiter des traitements réguliers (par exemple, lorsqu’il doit récupérer ses contenus depuis une autre de vos applications), il est intéressant de ne pas gérer en une seule fois tous les traitements à effectuer en arrière-plan. Le concept de queue de traitement permet alors de limiter la charge de travail sur le serveur et de réduire les risques d’erreur dans un traitement.
Une queue de traitement permet de générer une liste de tâches à effectuer, les plus petites possibles, et de les faire traiter par le serveur en tâche de fond, sans intervention humaine.
Différents outils existent selon l’environnement de votre site pour gérer un système de queue de manière efficace. Nous allons lister quelques exemples.
Lisez aussi notre article au sujet des erreurs à éviter lors de la création de tâches CRON.
La création d’une table de queue pour vos éléments est la solution la plus simple. La création d'une table de queue n'a pour pré-requis qu’un élément généralement déjà en place sur les sites : une base de données sur la technologie de votre choix.
Créez une table pour stocker chaque entrée avec ses données. Faites une tâche CRON qui appelle une ligne, la traite puis la supprime, avant de passer à la suivante et vous avez un système fonctionnel !
Si vous travaillez sur un CMS ou un Framework, celui-ci fournit peut-être nativement un système de gestion de queue. En voici quelques exemples.
C’est le cas pour Drupal avec les méthodes de création d’éléments de queue et les QueueWorkers pour les consommer.
Ainsi, sur Drupal, vous avez nativement la possibilité de créer une queue (toutes les queues de traitement étant gérées par une table du CMS), ainsi que la possibilité de donner à Drupal les moyens de la consommer à chaque appel de ses tâches CRON.
Drupal est d'ailleurs l'un des rares CMS qui permet de gérer nativement ce système de file d'attente. Pour les autres CMS ou frameworks, l'utilisation d'applications dédiées ou de plugins est nécessaire, etc.
Certaines applications sont créent dans le seul but de gérer de la manière la plus performante et la plus simple possible des queues de traitement.
C’est le cas par exemple de RabbitMQ qui nécessitera toutefois d’être installé sur un serveur pour fonctionner. Celui-ci va par exemple gérer la priorité des éléments avec des règles définies sur le serveur (traiter tel élément ou telle queue en premier), permettre de paralléliser sur un grand nombre de processus le traitement de la queue, sans donner un même élément à plusieurs processus, etc.
Certaines applications, bien que créées pour des besoins différents, peuvent tout à fait servir de gestionnaire de queue de traitement.
C’est par exemple le cas d’Apache Kafka qui va changer la façon dont on va gérer la queue : les éléments à traiter sont placés dans une queue permanente. Le processus qui consomme les éléments va avoir un pointeur sur cette queue et lire les éléments un à un, sans les supprimer.
Cette variante est intéressante dans le cas où plusieurs processus auront besoin de la même donnée à traiter.
Un autre cas de technologie détournée Redis. Initialement un système de base de données très rapide (car utilisant directement la mémoire vive de son serveur), il a évolué pour fournir un Message Broker (application permettant de gérer une queue de traitement, chaque élément étant un message). Celui-ci permet donc d’avoir des performances intéressantes sur la récupération des éléments à traiter si ceux-ci sont de petite taille.
Les files d'attente de tâches gèrent le travail qui doit être effectué en dehors du cycle habituel de requête/réponse HHTP en arrière-plan, de manière asynchrone. Le fait de déléguer des processus relativement longs à une tâche asynchrone permet notamment de réduire le temps d'affichage du site web. Il est également possible de définir le moment où le traitement de ces tâches lourdes doit être effectué pour éviter que le traitement de la queue soit réalisé lors des heures de charge du serveur.