Ferramentas para gerenciar uma fila de processamento de tarefas - Casa de la madre
Ferramentas para gerenciar uma fila de processamento de tarefas
Você é um desenvolvedor back-end? O sistema em que você está trabalhando exige que você lide com uma infinidade de tarefas. Claro, processá-los todos de uma vez seria uma carga enorme no servidor. A solução: gerenciar uma fila ou fila de processamento!
Quando seu site começa a exigir processamento regular (por exemplo, quando precisa buscar seu conteúdo de outro de seus aplicativos), vale a pena não gerenciar todo o processamento a ser realizado em segundo plano de uma só vez. O conceito de fila de processamento permite limitar a carga de trabalho no servidor e reduzir os riscos de erro no processamento .
Uma fila de processamento permite gerar uma lista de tarefas a serem executadas , o menor possível, e processá-las pelo servidor em segundo plano, sem intervenção humana .
Existem diferentes ferramentas dependendo do ambiente do seu site para gerenciar um sistema de filas com eficiência. Listaremos alguns exemplos.
Usando uma tabela de filas em um banco de dados
Criar uma tabela de cauda para seus elementos é a solução mais fácil. O único pré-requisito para criar uma tabela de filas é um elemento que geralmente já existe nos sites: um banco de dados na tecnologia de sua escolha.
Crie uma tabela para armazenar cada entrada com seus dados. Faça um trabalho CRON que chame uma linha, processe-a e depois a exclua, antes de passar para a próxima e você terá um sistema funcionando!
Adicione um campo de data efetiva à tabela. Quando seu processo deseja processar um item. Ele atualiza este campo com a data atual. Assim, vários processos podem coexistir sem lidar com o mesmo elemento. Determine uma duração após a qual o elemento é considerado "liberado", a tarefa certamente falhará se não for concluída muito tempo depois.
Adicione a noção de repetição ao script de processamento. Se sua tarefa falhar devido a uma chamada externa perdida, por exemplo, repetir a tarefa 2 ou 3 vezes permite que você tenha menos perdas.
Faça uma única chamada para o seu script PHP consumir tantos itens quanto ele puder caber dentro do seu limite de tempo de execução, para minimizar o número de chamadas HTTP feitas antes que a lista seja completada.
Use as ferramentas fornecidas pelo seu CMS / Framework
Se você estiver trabalhando em um CMS ou Framework, ele pode fornecer nativamente um sistema de gerenciamento de filas. Aqui estão alguns exemplos.
Assim, no Drupal, você tem a possibilidade nativa de criar uma fila (todas as filas de processamento sendo gerenciadas por uma tabela CMS), bem como a possibilidade de dar ao Drupal os meios para consumi-la a cada chamada de suas tarefas CRON.
O Drupal também é um dos poucos CMS que permite gerenciar nativamente esse sistema de filas. Para outros CMS ou frameworks, é necessário o uso de aplicativos ou plugins dedicados…
Aplicativos dedicados ao gerenciamento de filas
Alguns aplicativos são criados com o único propósito de gerenciar filas de processamento da maneira mais eficiente e simples possível.
Este é o caso, por exemplo, do RabbitMQ que, no entanto, precisará ser instalado em um servidor para funcionar. Isso irá, por exemplo, gerenciar a prioridade dos elementos com regras definidas no servidor (processar primeiro tal elemento ou tal fila), possibilitar paralelizar o processamento da fila sobre um grande número de processos, sem dar a mesmo elemento para vários processos, etc.
Aplicativos que podem ser usados ​​para gerenciar uma fila de processamento
Alguns aplicativos, embora criados para necessidades diferentes, podem ser usados ​​como gerenciadores de filas.
Este é, por exemplo, o caso do Apache Kafka que irá alterar a forma como iremos gerir a fila: os elementos a processar são colocados numa fila permanente. O processo que consumir os elementos terá um ponteiro nesta fila e lerá os elementos um a um, sem excluí-los.
Essa variante é interessante no caso de vários processos precisarem dos mesmos dados para processar.
Outro caso de tecnologia Redis sequestrada . Inicialmente um sistema de banco de dados muito rápido (porque utiliza diretamente a RAM do seu servidor), evoluiu para fornecer um Message Broker (aplicativo que permite gerenciar uma fila de processamento, sendo cada elemento uma mensagem). Isso permite, portanto, ter desempenhos interessantes na recuperação dos elementos a serem processados ​​se estes forem de pequeno porte.
As filas de tarefas lidam com o trabalho que precisa ser feito fora do ciclo usual de solicitação/resposta HHTP em segundo plano, de forma assíncrona. O fato de delegar processos relativamente longos a uma tarefa assíncrona permite, em particular, reduzir o tempo de exibição do site. Também é possível definir quando o processamento dessas tarefas pesadas deve ser realizado para evitar que o processamento da fila seja realizado durante as horas de carga do servidor.