Comment nous avons réalisé un traitement vidéo 10x plus rapidement avec Symfony Messenger

DEV - 19/09
Aujourd'hui, les utilisateurs s'attendent à ce que les applications soient rapides et réactives, ce qui peut être un défi lorsqu'il s'agit de ...

Aujourd'hui, les utilisateurs s'attendent à ce que les applications soient rapides et réactives, ce qui peut être un défi lorsqu'il s'agit de tâches à forte intensité de ressources. Au lieu de faire en sorte qu'un utilisateur attende un rapport pour générer, une vidéo à traiter ou un grand fichier à télécharger, vous pouvez décharger ces tâches sur l'arrière-plan. C'est là que le traitement asynchrone entre en jeu et le composant Symfony Messenger est l'outil parfait pour le travail.

Le problème avec les tâches synchrones

Dans une application Web synchrone traditionnelle, la demande d'un utilisateur déclenche une série d'actions qui doivent être terminées avant qu'une réponse ne soit renvoyée au navigateur. Si l'une de ces actions, comme l'envoi d'un e-mail ou la génération d'un PDF, prend plusieurs secondes pour terminer, l'expérience utilisateur en souffre. L'onglet du navigateur est laissé dans un état «en attente» et l'utilisateur peut supposer que l'application a figé.

Ce modèle synchrone limite également l'évolutivité. Un seul serveur Web ne peut gérer que de nombreuses demandes simultanées, et si quelques-unes sont liées à des tâches de longue durée, elle peut rapidement épuiser les ressources disponibles.

La solution: Symfony Messenger

Symfony Messenger fournit un moyen puissant et élégant de découpler la logique de votre application. Il s'agit d'un bus de messages qui vous permet d'envoyer des «messages» (objets de données simples) à gérer plus tard par un processus séparé, instance, charge de travail. Cette approche est basée sur le modèle producteur-consommateur, où votre application Web agit en tant que producteur, et un travailleur de fond agit en tant que consommateur.

Concepts clés

Message: une classe PHP simple qui contient les données nécessaires pour effectuer une tâche. Il ne doit contenir aucune logique. Par exemple, SendReportMessage peut contenir un utilisateur et un rapport de rapport.

Handleur de messages: un service qui contient la logique métier réelle pour un message spécifique. Lorsqu'un message est reçu par le consommateur, le gestionnaire correspondant est invoqué pour effectuer la tâche.

Bus de message: le répartiteur central qui achemine les messages vers leur destination prévue. Symfony Messenger fournit un bus par défaut, mais vous pouvez configurer plusieurs bus à différentes fins (par exemple, un bus de commande et un bus d'événements).

Transport: le mécanisme qui stocke et livre des messages. C'est le cœur du traitement asynchrone. Symfony Messenger prend en charge divers transports hors de la boîte, notamment la doctrine, le lapin (AMQP), Redis, SQS

Consommateur / travailleur: un process...
[Courte citation de 8% de l'article original]

Loading...