Je suis dans la phase de conception d'un projet où l'utilisateur final soumettra une demande à partir d'une page Web qui engendrera un travail traité asynchrone de longue durée. Existe-t-il une "meilleure pratique" pour ce problème? Les services Web et les courtiers de services sont-ils une bonne solution? La file d'attente de messagerie Microsoft est-elle applicable ici?
web-development
async
John Ruf
la source
la source
Réponses:
Je ne connais pas les "meilleures pratiques". Je connais les erreurs les plus courantes.
Première erreur: DOS vous-même
Vous utilisez le gestionnaire Web pour traiter le travail de longue durée. Cela peut être mauvais ou extrêmement mauvais en fonction de votre pourcentage de hits qui deviennent des travaux de longue durée, de leur durée et du trafic soutenu que vous obtenez.
Vous voulez vous assurer que vous n'obtiendrez pas plus d'un travail de longue durée dans la période de temps nécessaire pour terminer ce travail de longue durée. Si vous le faites vous-même DOS. Il s'aggravera également si vous augmentez le trafic en supposant que le pourcentage et le temps restent cohérents. C'est l'un de ces problèmes qui s'impose lui-même une limite à la croissance du trafic.
Deuxième erreur: le frai du webhandler
La création d'un processus à partir du gestionnaire Web pour gérer un processus de longue durée peut être délicate et, par conséquent, également sujette aux erreurs.
Les options
J'utilise habituellement
at(1)
pour me dissocier proprement du gestionnaire Web sans bifurquer.Vous pouvez également utiliser une implémentation d'interrogation avec
cron
.Vous pouvez communiquer avec un autre processus serveur qui gère le traitement. Cette communication peut être effectuée avec
sockets
,pipes
ou des abstractions de niveau supérieur comme un appel REST http ou le routage d'un message de file d'attente.la source
Je suppose que vous parlez de plus de quelques minutes.
Si c'est quelques minutes, vous pouvez lancer un thread de travail en arrière-plan et afficher une certaine progression sur l'interface utilisateur. De nombreuses applications Web utilisent cette méthode.
Si c'est plus que, disons 5 minutes, vous pouvez vouloir déléguer la tâche à un service dédié. Un exemple est les rapports générés par Google Analytics.
La file d'attente Microsoft Messaging peut être utilisée pour transmettre des informations d'un système à un autre ou d'un composant à un autre.
la source