Estou na fase de design de um projeto em que o usuário final enviará uma solicitação de uma página da web que gerará um trabalho processado assíncrono e de longa execução. Existe uma "melhor prática" para esse problema? Os serviços da Web e os corretores de serviços são um bom caminho a percorrer? A fila de mensagens da Microsoft é aplicável aqui?
web-development
async
John Ruf
fonte
fonte
Respostas:
Eu não sei sobre "melhores práticas". Eu sei os erros mais comuns.
Primeiro erro: DOS você mesmo
Você usa o manipulador da web para processar o trabalho de longa duração. Isso pode ser ruim ou extremamente ruim, dependendo da porcentagem de ocorrências que se tornam trabalhos demorados, por quanto tempo eles são executados e quanto tráfego você recebe.
Você quer ter certeza de que não está recebendo mais de um trabalho de execução demorada dentro do período que leva para concluir esse trabalho. Se você faz o DOS você mesmo. Também piorará quanto mais tráfego você assumir, enquanto a porcentagem e o tempo permanecerem consistentes. É um desses problemas que impõe um limite ao crescimento do tráfego.
Segundo erro: surgindo do webhandler
Gerar um processo do manipulador da Web para lidar com um processo de longa execução pode ser complicado e, como resultado, também propenso a erros.
Opções
Eu costumo usar
at(1)
para me dissociar do manipulador da Web sem bifurcar.Você também pode usar uma implementação de pesquisa com
cron
.Você pode se comunicar com outro processo do servidor que lida com o processamento. Essa comunicação pode ser feita com
sockets
,pipes
ou mais elevadas abstrações nível como uma chamada http RESTO ou encaminhamento de uma mensagem fila.fonte
Suponho que você esteja falando mais do que alguns minutos.
Em alguns minutos, você poderá iniciar um thread de trabalho em segundo plano e exibir algum progresso na interface do usuário. Muitos aplicativos da web usam esse método.
Se for mais do que, digamos, 5 minutos, convém delegar a tarefa a um serviço dedicado. Um exemplo são os relatórios gerados pelo Google Analytics.
A fila do Microsoft Messaging pode ser usada para transmitir informações de um sistema para outro ou de um componente para outro.
fonte