Pergunta

Jeff já blogou sobre usando o cache para realizar processamento "fora de banda" em seus sites, mas gostaria de saber quais outras técnicas as pessoas estão usando para processar esse tipo de tarefa?

Foi útil?

Solução

Anos atrás, vi Rob Howard descrever uma maneira de usar um HttpModule para processar tarefas em segundo plano.Não parece tão fácil quanto usar o Cache, mas pode ser melhor em determinadas circunstâncias.

Esta postagem do blog tem os detalhes, e há muitos outros que capturam as mesmas informações se você olhar ao redor.

Outras dicas

Serviço do Windows

Você pode querer ver como DotNetNuke faz isso.Eu sei que está escrito em VB.NET, mas adaptei o código para C#.Eu estava lendo a fonte e percebi que eles tinham um recurso na área de administração para configurar tarefas agendadas.Essas tarefas são configuradas por meio da interface administrativa e armazenadas no banco de dados.Quando o site é iniciado, por meio do arquivo Global.asax, eles criam outro thread para executar este serviço que então executa as tarefas agendadas no horário agendado.Não consigo lembrar a lógica exata, já faz um tempo, mas é definitivamente um bom recurso sobre como outras pessoas fizeram processos fora de banda para aplicativos Asp.Net.Essa técnica ainda mantém a lógica dentro da aplicação Asp.Net, mas na minha opinião fica fora de banda.

se forem principalmente tarefas de processamento de dados e você estiver usando MSSQL, que tal tarefas agendadas do SSIS?

Tarefas agendadas ou cron jobs.

O problema com tarefas agendadas ou cron jobs é que eles não compartilham espaço de memória com o servidor web.Você poderia configurar uma tarefa agendada que solicitasse páginas do servidor web, mas isso poderia criar problemas com tarefas de longa execução.Seria bom ter alguns threads de baixa prioridade em execução na pilha real de aplicativos ASP.Net para executar tarefas utilitárias simples, como limpar caches, monitorar recursos e apenas lidar com tarefas domésticas gerais.

Arquivos de fila simples junto com um agente separado.Para cada tipo de processo fora de banda, escreva um agente .exe separado que monitore um diretório em busca de arquivos de fila que incluam quaisquer dados necessários para executar o processo especificado.

Isso pode parecer sujo, mas no mundo real acho que oferece muita flexibilidade, você não está processando muito no espaço de processo do ASP.net e pode facilmente adaptar esse estilo para farmar o processamento em servidores Linux baratos executando o processo do agente no Mono para quando você começar a precisar de mais RAM/CPU/disco.

Se você se sentir mais confortável com as páginas asp.net, poderá escrever um pequeno aplicativo para realizar seu trabalho e, em seguida, "fazer ping" no aplicativo com um serviço externo que monitore seu site.Isso manterá o aplicativo ativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top