Visão geral da fila de tarefas

Nesta página, descrevemos o que são filas de tarefas e quando e como usá-las. As filas de tarefas permitem que os aplicativos realizem trabalhos (denominados tarefas) de maneira assíncrona, fora de uma solicitação do usuário. Caso precise executar o trabalho em segundo plano, o aplicativo adicionará tarefas a filas de tarefas. As tarefas serão executadas mais tarde pelos service workers.

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 service workers é diferente para as diversas filas.

As filas push executam tarefas entregando solicitações HTTP aos serviços de trabalhador do App Engine. Eles enviam essas solicitações de maneira confiável e contínua e garantem a execução confiável das tarefas. Como você pode controlar a taxa em que as tarefas são enviadas pela fila, também pode controlar o comportamento de escalonamento dos workers e, portanto, os custos.

As tarefas são executadas como solicitações direcionadas para serviços do App Engine , por isso estão sujeitas a prazos rigorosos. As tarefas processadas por serviços de escalonamento 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 service workers 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 worker 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.

Dica: em alguns casos, o Google Cloud Pub/Sub é uma boa alternativa às filas pull.

Todas as tarefas da fila de tarefas são realizadas de maneira assíncrona. O aplicativo que cria a tarefa transfere-a 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 da fila de tarefas oferece à 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 para ser enviada para um serviço do worker para processamento. Quando receber a solicitação de tarefa, o worker poderá 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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python