Vista geral da fila de tarefas

Esta página descreve o que são filas de tarefas e quando e como as usar. As filas de tarefas permitem que as aplicações realizem trabalho, denominado tarefas, de forma assíncrona fora de um pedido do utilizador. Se uma app precisar de executar trabalho em segundo plano, adiciona tarefas a filas de tarefas. As tarefas são executadas mais tarde pelos serviços de worker.

O serviço Task Queue foi concebido para trabalho assíncrono. Não oferece garantias fortes relativamente ao momento da entrega de tarefas e, por isso, é inadequado para aplicações interativas em que um utilizador está à espera do resultado.

Filas de envios e filas de solicitações

As filas de tarefas estão disponíveis em dois formatos: push e pull. A forma como o serviço Task Queue envia pedidos de tarefas para os serviços de processamento é diferente para as diferentes filas.

As filas de envio executam tarefas através da entrega de pedidos HTTP a serviços de processamento do App Engine. Envia estes pedidos a uma taxa fiável e constante e garante a execução fiável de tarefas. Como pode controlar a taxa à qual as tarefas são enviadas da fila, pode controlar o comportamento de escalabilidade dos trabalhadores e, por conseguinte, os seus custos.

Uma vez que as tarefas são executadas como pedidos segmentados para serviços do App Engine, estão sujeitas a prazos rigorosos. As tarefas processadas pelos serviços de escalabilidade automática têm de terminar em dez minutos. As tarefas processadas por serviços de escalabilidade básica e manual podem ser executadas durante um máximo de 24 horas.

As filas de obtenção não enviam tarefas. Dependem de outros serviços de trabalho para "alugar" tarefas da fila por sua própria iniciativa. As filas de obtenção dão-lhe mais poder e flexibilidade sobre quando e onde as tarefas são processadas, mas também exigem que faça mais gestão de processos. Quando uma tarefa é alugada, o trabalhador de aluguer declara um prazo. Quando o prazo termina, o trabalhador tem de concluir a tarefa e eliminá-la. Caso contrário, o serviço Task Queue permite que outro trabalhador a alugue.

Todas as tarefas da fila de tarefas são realizadas de forma assíncrona. A aplicação que cria a tarefa transfere-a para a fila. A aplicação de origem não é notificada se a tarefa for concluída ou não, nem se foi bem-sucedida.

Se um trabalhador não processar uma tarefa, o serviço Task Queue fornece à fila um mecanismo de nova tentativa, para que a tarefa possa ser repetida um número finito de vezes.

Exemplos de utilização

Filas de envios

Um exemplo de utilização típico da fila de envio é uma operação "lenta". Considere um sistema de mensagens de uma rede social. Sempre que um utilizador envia uma mensagem, a rede tem de atualizar os seguidores do remetente. Esta pode ser uma operação muito demorada. Usando uma fila de envio, a aplicação pode colocar em fila uma tarefa para cada mensagem à medida que chega para ser enviada para um serviço de processamento para processamento. Quando o trabalhador recebe o pedido de tarefa, pode obter a lista de seguidores do remetente e atualizar a base de dados para cada um. O trabalhador pode tornar-se ainda mais eficiente ao colocar outra tarefa push em fila para cada atualização da base de dados.

Outra utilização das filas de envio é para tarefas agendadas. Imagine uma aplicação que implementa uma campanha publicitária. Um grupo de tarefas escritas para enviar emails pode ser adicionado a uma fila de envio com instruções para reter as tarefas até uma hora especificada no futuro. Quando chegar a data de vencimento, o serviço Task Queue começa a emitir pedidos para executar as tarefas.

Filas de solicitações

As filas de obtenção funcionam bem quando precisa de agrupar tarefas para uma execução eficiente. Uma solução tira partido da capacidade de anexar uma etiqueta a uma tarefa de obtenção. Os trabalhadores podem alugar um grupo de tarefas que tenham a mesma etiqueta. Um exemplo típico pode ser uma app que mantém tabelas de classificação para vários jogos diferentes, com muitos jogadores e grupos constantemente em jogo. Sempre que houver uma nova pontuação máxima, a app pode colocar em fila uma tarefa de obtenção com a pontuação e o jogador, e usar o ID do jogo como uma etiqueta de tarefa. Um trabalhador "acorda" periodicamente, aluga um grupo de tarefas com o mesmo ID do jogo e atualiza a tabela de classificação. Pode alugar tarefas explicitamente, usando um valor de etiqueta especificado, ou deixar que o serviço decida que grupo de tarefas com etiquetas semelhantes enviar.

O processamento em lote com etiquetas pode ser muito eficaz. Uma vez que as etiquetas podem ser geradas dinamicamente enquanto a sua app está em execução, um worker pode processar novos IDs de jogos sem esforço especial.

O que se segue?