Criar filas de envio

Esta página descreve como criar e personalizar uma fila de envio e como examinar o conteúdo de uma fila.

Usar um ficheiro de configuração de filas para criar filas

Para processar uma tarefa, tem de a adicionar a uma fila de envio. O App Engine fornece uma fila de envio predefinida, denominada default, que está configurada e pronta a usar com as predefinições. Se quiser, pode adicionar todas as suas tarefas à fila predefinida, sem ter de criar e configurar outras filas.

Para adicionar filas ou alterar a configuração predefinida, edite o ficheiro de configuração da fila para a sua aplicação, que carrega para o App Engine. Pode criar até 100 filas. Não é possível criar filas dinamicamente.

Este ficheiro de configuração de filas define duas filas:

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s

Para carregar o ficheiro:

gcloud app deploy queue.yaml

Todas as tarefas adicionadas a queue-blue são enviadas para o módulo de destino v2.task-module. A taxa de atualização de queue-red foi alterada de 5/s para 1/s. As tarefas são retiradas da fila e enviadas para os respetivos destinos à taxa de 1 tarefa por segundo.

Se eliminar uma fila, tem de aguardar aproximadamente 7 dias antes de criar uma nova fila com o mesmo nome.

Existem muitos outros parâmetros que podem ser adicionados ao ficheiro de configuração para personalizar o comportamento de uma fila de envio. Para mais informações, consulte a referência do ficheiro de configuração da fila.

Definir a taxa de processamento da fila de envio

Pode controlar a taxa à qual as tarefas são processadas em cada uma das suas filas definindo outras diretivas, como rate, bucket_size e max_concurrent_requests.

A fila de tarefas usa segmentos de tokens para controlar a taxa de execução de tarefas. Cada fila com nome tem um segmento de tokens que contém tokens, até ao máximo especificado por bucket_size, ou um máximo de 5 tokens se não especificar o tamanho do segmento.

Sempre que a sua aplicação executa uma tarefa, é removido um token do conjunto. A sua app continua a processar tarefas na fila até que o bucket da fila fique sem tokens. O App Engine volta a encher o contentor com novos tokens continuamente com base no rate que especificou para a fila.

Se a fila contiver tarefas a processar e o contentor da fila contiver tokens, o App Engine processa simultaneamente tantas tarefas quantos tokens existirem. Isto pode levar a picos de processamento, consumindo recursos do sistema e competindo com pedidos de serviço de utilizadores.

Se quiser impedir a execução de demasiadas tarefas em simultâneo ou evitar a contenção do armazeno de dados, use max_concurrent_requests.

O exemplo seguinte mostra como definir max_concurrent_requests para limitar as tarefas e também mostra como ajustar o tamanho e a taxa do depósito com base nas necessidades da sua aplicação e nos recursos disponíveis:

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Definir limites de armazenamento para todas as filas

Pode usar o ficheiro de configuração da fila para definir a quantidade total de armazenamento que os dados das tarefas podem consumir em todas as filas. Para definir o limite de armazenamento total, inclua um elemento denominado total_storage_limit no nível superior:

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

O valor é um número seguido de uma unidade: B para bytes, K para kilobytes, M para megabytes, G para gigabytes e T para terabytes. Por exemplo, 100K especifica um limite de 100 kilobytes. Se adicionar uma tarefa fizer com que a fila exceda o limite de armazenamento, a chamada para adicionar a tarefa falha. O limite predefinido é 500M (500 megabytes) para apps gratuitas. Para apps faturadas, não existe um limite até que defina explicitamente um. Pode usar este limite para proteger a sua app de um erro de programação de fork bomb em que cada tarefa adiciona várias outras tarefas durante a respetiva execução.

Se a sua app estiver a receber erros por quota insuficiente ao adicionar tarefas, aumentar o limite de armazenamento total pode ajudar. Se estiver a usar esta funcionalidade, recomendamos vivamente que defina um limite que corresponda ao armazenamento necessário para várias tarefas. Isto permite que as filas sejam temporariamente copiadas e continuem a aceitar novas tarefas enquanto processam o backlog, ao mesmo tempo que estão protegidas contra um erro de programação de bomba de bifurcação.

Configurar o número máximo de pedidos simultâneos

Pode controlar a taxa de processamento definindo max_concurrent_requests, que limita o número de tarefas que podem ser executadas em simultâneo.

Se a fila de aplicações tiver uma taxa de 20/s e um tamanho do contentor de 40, as tarefas nessa fila são executadas a uma taxa de 20/s e podem aumentar brevemente até 40/s. Estas definições funcionam bem se a latência das tarefas for relativamente baixa. No entanto, se a latência aumentar significativamente, acaba por processar significativamente mais tarefas simultâneas. Esta carga de processamento adicional pode consumir instâncias adicionais e tornar a sua aplicação mais lenta.

Por exemplo, suponhamos que a latência normal das tarefas é de 0,3 segundos. Com esta latência, processa, no máximo, cerca de 40 tarefas em simultâneo. No entanto, se a latência da tarefa aumentar para 5 segundos, pode ter facilmente mais de 100 tarefas a serem processadas em simultâneo. Este aumento força a sua aplicação a consumir mais instâncias para processar as tarefas adicionais, o que pode tornar a aplicação mais lenta e interferir com os pedidos dos utilizadores. Pode evitar esta possibilidade definindo max_concurrent_requests para um valor inferior.

Por exemplo, se definir max_concurrent_requests como 10, a nossa fila de exemplo mantém cerca de 20 tarefas/segundo quando a latência é de 0,3 segundos. Quando a latência aumenta mais de 0,5 segundos, esta definição limita a taxa de processamento para garantir que não são executadas mais de 10 tarefas em simultâneo.

queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Monitorizar filas na Google Cloud consola

  1. Na Google Cloud consola, aceda à página Cloud Tasks.

    Aceda ao Cloud Tasks

    Tenha em atenção que, se aceder à página Fila de tarefas do App Engine, são apresentadas instruções que lhe indicam como aceder à página do Cloud Tasks. Esta atualização na Google Cloud consola não altera o funcionamento das filas de tarefas.

  2. Ative a API Cloud Tasks.

  3. Quando estiver na página do Cloud Tasks, é apresentada uma lista de todas as filas na aplicação. Clicar no nome de uma fila apresenta a página Detalhes da fila, que mostra todas as tarefas na fila selecionada.

O que se segue?

Saiba como criar tarefas.