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.
- Você precisa se desassociar dos pais corretamente, caso contrário, o webhandler aguarda a conclusão do filho.
- Quando você bifurca um filho no unix, ele herda identificadores abertos do pai. Eles serão fechados automaticamente, a menos que sejam substituídos. Isso inclui coisas como conexões com bancos de dados, identificadores de arquivos e outras conexões de rede abertas. Todos os quais são fechados quando o processo filho é concluído.
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.