Nesta página, você verá o que são filas de tarefas, quando e como usá-las. Filas de tarefas permitem que aplicativos executem operações, chamadas de tasks, de maneira assíncrona, fora de uma solicitação do usuário. Se um aplicativo precisa executar algum trabalho de segundo plano, ele adiciona as tarefas a filas de tarefas. As tarefas serão executadas mais tarde pelos service workers.
O serviço de Fila de tarefas foi desenvolvido para trabalho assíncrono. Ele não oferece garantias fortes em relação ao tempo de entrega da tarefa e, portanto, não é adequado para aplicativos interativos em que um usuário aguarda o resultado.
Filas push e pull
As filas de tarefas se dividem em dois tipos: push e pull. A maneira como o serviço da fila de tarefas expede solicitações de tarefas para os serviços de worker é diferente para as diversas filas.
As filas push executam tarefas entregando solicitações HTTP aos serviços de worker do App Engine. Elas emitem essas solicitações a uma taxa confiável e estável e garantem a execução confiável de tarefas. Como você pode controlar a taxa em que as tarefas são enviadas pela fila, também pode controlar o comportamento de dimensionamento dos workers e, portanto, os custos.
As tarefas são executadas como solicitações direcionadas para serviços do App Engine e, por isso, estão sujeitas a prazos rigorosos. As tarefas processadas por serviços de dimensionamento automático precisam terminar em dez minutos. As tarefas processadas por serviços de escalonamento básico e manual podem ser executadas em até 24 horas.
Filas pull não expedem tarefas. Elas dependem de outros serviços de trabalhador para alocar tarefas da fila por iniciativa própria. As filas pull proporcionam mais eficiência e flexibilidade em relação a quando e onde as tarefas são processadas, mas também exigem mais gerenciamento de processos. Quando uma tarefa é alocada, o trabalhador locatário declara um prazo. No momento em que o prazo se esgotar, o worker deverá completar a tarefa e excluí-la. Caso contrário, o serviço da fila de tarefas permitirá que outro worker a aloque.
Todas as tarefas da fila de tarefas são realizadas de maneira assíncrona. O aplicativo que cria a tarefa a transfere para a fila. O aplicativo de origem não é notificado se a tarefa foi concluída ou se foi bem-sucedida.
Se um worker não conseguir processar uma tarefa, o serviço Fila de tarefas oferecerá à fila um mecanismo de repetição, para que a tarefa possa ser repetida um número finito de vezes.
Casos de uso
Filas push
Um caso de uso típico de fila push é uma operação "lenta". Pense em um sistema de mensagens de rede social. Toda vez que um usuário envia uma mensagem, a rede precisa atualizar os seguidores do remetente. Isso pode ser uma operação muito demorada. Com uma fila push, o aplicativo pode enfileirar uma tarefa para cada mensagem conforme ela chega a fim de ser enviada a um serviço de worker para processamento. Ao receber a solicitação de tarefa, o worker pode recuperar a lista de seguidores do remetente e atualizar o banco de dados de cada um. O worker pode ser ainda mais eficiente enfileirando outra tarefa push para cada atualização de banco de dados.
Outro uso das filas push são as tarefas programadas. Imagine um aplicativo que implemente uma campanha publicitária. Um grupo de tarefas escritas para enviar e-mails pode ser adicionado a uma fila push com instruções para reter as tarefas até um determinado horário no futuro. Quando a data de entrega chegar, o serviço da fila de tarefas começará a emitir solicitações para executar as tarefas.
Filas pull
As filas pull funcionam muito bem quando é preciso agrupar tarefas em lote para uma execução eficiente. Uma solução tira proveito do recurso de anexar uma tag a uma tarefa pull. Os workers podem alocar um grupo de tarefas que tenham a mesma tag. Um exemplo típico pode ser um aplicativo que mantém placares de vários jogos diferentes, com muitos jogadores e grupos jogando constantemente. Sempre que há um novo recorde de pontuação, o aplicativo pode enfileirar uma tarefa pull com a pontuação e o jogador, além de usar o código do jogo como uma tag de tarefa. Um worker "desperta" periodicamente, aloca um grupo de tarefas com o mesmo código do jogo e atualiza o placar. É possível alocar tarefas de maneira explícita, usando um valor de tag especificado, ou permitir que o serviço decida qual grupo de tarefas marcadas de maneira semelhante ele deve enviar.
Pode ser muito eficiente usar processamento em lote com tags. Como as tags podem ser geradas dinamicamente durante a execução do aplicativo, o worker pode processar novos códigos de jogo sem grandes esforços.
Próximas etapas
- Leia sobre filas push
- Leia sobre filas pull