Communiquer via une file d’attente de message [2/3]
Après vous avoir présenté brièvement les avantages de la communication par message dans ce premier post. Je vous propose de continuer cette série mais en s’intéressant cette fois aux tâches longues, complexes et souvent gourmandes en ressource.
Dans ce deuxième exemple nous sommes toujours sur une application web, mais dans cette partie l’utilisateur souhaite obtenir un objet dynamique relativement long à générer. Cela peut-être un rapport à consolider, une analyse sur une grosse base de données, ou une sauvegarde à lancer et à télécharger.
En général dans les développements fait un peu trop rapidement, c’est la première demande qui va se charger de lancer le traitement, de suivre l’avancement, d’en informer le client jusqu’à la fin pour lui proposer finalement de télécharger son résultat. Le problème avec cette méthode c’est que pendant tout ce temps nous allons garder une connexion ouverte, et donc monopoliser un thread coté serveur. Cette monopolisation va naturellement réduire la disponibilité du serveur car le nombre de thread parallèles est physiquement limitée par la mémoire de la machine.
La technique consiste donc à séparer cette demande de traitement en deux partie associées par un identifiant stockée en base de données :
- La première partie hébergée par le client (via un composant ajax par exemple) sera en charge d’interroger régulièrement la base pour savoir si le traitement est terminé.
- La seconde partie, envoyée par message à un processus spécialisé dans ce genre de traitement sera lancée en tâche de fond et aura pour mission de générer le dit résultat.
A la fin de l’opération, la tache de calcul mettra à jour la base de données en indiquant un chemin de téléchargement et le client (coté navigateur) n’aura plus qu’à lancer la récupération dès qu’il aura connaissance du résultat.
Au final, pendant ce traitement nous aurons économisé un grand nombre de secondes coté serveur, multipliant ainsi la capacité de notre serveur. Cette petite astuce, généralisée sur l’ensemble de vos process vous permettra de construire une architecture fiable, robuste mais aussi très optimisée dans ses tâches.
Je vous donne rendez vous rapidement pour la dernier message de cette série qui concerne le partage de charge entre serveurs.
Abonnement RSS
Excellent !
Merci pour cette série, je suis en plein dedant et cela m’est d’une grande aide !
Vivement la suite !