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
Na Google Cloud consola, aceda à página 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.
Ative a API Cloud Tasks.
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.