Nesta página, aprenda a criar e personalizar uma fila push e a examinar o conteúdo de uma fila.
Como usar um arquivo de configuração de fila para criar filas
Para processar uma tarefa, você precisa adicioná-la a uma fila push. O App Engine fornece uma
fila push padrão, chamada default
, que está configurada e
pronta para uso com as configurações padrão. Se quiser, basta adicionar todas as tarefas
à fila padrão, sem precisar criar e configurar outras filas.
Para adicionar filas ou alterar a configuração padrão, edite o arquivo de configuração da fila do aplicativo enviado para o App Engine. É possível criar até 100 filas. Não é possível criar filas dinamicamente.
Este arquivo de configuração define duas filas:
queue:
- name: queue-blue
target: v2.task-module
rate: 5/s
- name: queue-red
rate: 1/s
Para fazer upload do arquivo:
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
é alterada de 5/s para 1/s. As tarefas serão
removidas da fila e enviadas para os destinos à taxa de uma tarefa por segundo.
Se excluir uma fila, você precisará esperar aproximadamente sete dias para criar uma nova fila com o mesmo nome.
Existem muitos outros parâmetros que podem ser adicionados ao arquivo de configuração para personalizar o comportamento de uma fila push. Para mais informações, consulte a referência do arquivo de configuração de fila.
Definir a taxa de processamento da fila push
É possível controlar a taxa em que as tarefas são processadas em cada uma das filas definindo outras diretivas, como rate
, bucket_size
e max_concurrent_requests
.
A fila de tarefas usa buckets de token para
controlar a taxa de execução. Cada fila nomeada tem um bucket de token que
retém os tokens, até o máximo especificado por bucket_size
ou com um máximo de
5 tokens se você não especificar o tamanho do bucket.
Cada vez que o aplicativo executa uma tarefa, um token é removido do bucket.
O app continua processando tarefas na fila até acabarem os tokens
do bucket da fila. O App Engine preenche o bucket outra vez com novos tokens continuamente, com base
no rate
que você especificou para a fila.
Caso a fila contenha tarefas a serem processadas e o bucket da fila contenha tokens, o App Engine processa simultaneamente o mesmo número de tarefas e tokens. Isso pode causar bursts de processamento, consumindo recursos do sistema e competindo com solicitações de veiculação do usuário.
Se quiser impedir a execução de muitas tarefas ao mesmo tempo, ou o
conflito de armazenamento de dados, use max_concurrent_requests
.
O exemplo a seguir mostra como definir max_concurrent_requests
para limitar tarefas e também como ajustar o tamanho e a taxa do bucket com base nas necessidades do aplicativo e nos recursos disponíveis:
queue:
- name: queue-blue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
Como definir limites de armazenamento para todas as filas
Use o arquivo de configuração de filas para definir o volume total de armazenamento que os dados da tarefa podem consumir em todas as filas. Para definir o limite de armazenamento total, inclua um elemento chamado 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, 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 apresentará uma falha. O limite padrão
é 500M
(500 megabytes) para aplicativos gratuitos. Para aplicativos faturados, não haverá limite até
você definir um. Use esse limite para proteger o aplicativo de um erro de programação de fork bomb em que as tarefas adicionam várias outras durante a execução.
Se o aplicativo receber erros de cota insuficiente quando forem adicionadas tarefas, o aumento do limite de armazenamento total poderá ajudar. Se estiver usando esse recurso, recomendamos definir um limite que corresponda ao armazenamento necessário para vários dias de tarefas. Isso permite o backup temporário das filas e a aceitação contínua de novas tarefas durante o trabalho no backlog, além da proteção contra um erro de programação de fork bomb.
Como configurar o número máximo de solicitações simultâneas
É possível controlar a taxa de processamento definindo
max_concurrent_requests
, o que limita o número de tarefas que podem ser executadas
simultaneamente.
Se a fila do aplicativo tem uma taxa de 20/s e um tamanho do bucket de 40, as tarefas na fila são executadas a uma taxa de 20/s e podem ter breves bursts de até 40/s. Essas configurações funcionam bem se a latência de tarefa for relativamente baixa. Porém, se a latência aumentar significativamente, você acabará processando mais tarefas simultâneas. Esse processamento adicional pode consumir instâncias adicionais e deixar o aplicativo mais lento.
Por exemplo, vamos presumir que a latência de tarefa normal seja de 0,3 segundo. Com essa
latência, você processa no máximo 40 tarefas ao mesmo tempo. Porém, se a latência
de tarefa aumentar para cinco segundos, é possível facilmente ter mais de 100 tarefas em processamento
ao mesmo tempo. Esse aumento força seu aplicativo a consumir mais instâncias para
processar as tarefas adicionais, podendo deixar o aplicativo mais lento e
interferir nas solicitações de usuários. É possível evitar essa possibilidade se configurar
max_concurrent_requests
com um valor mais baixo.
Por exemplo, se você configurar max_concurrent_requests
como 10, nossa
fila de exemplo mantém cerca de 20 tarefas/segundo quando a latência é de 0,3 segundo.
Entretanto, quando a latência aumenta para mais de 0,5 segundo, essa configuração ajusta a taxa de
processamento para garantir que não se executem mais de 10 tarefas ao mesmo tempo.
queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
Como monitorar filas no console do Google Cloud
No console do Google Cloud, acesse a página do Cloud Tasks.
Se você acessar a página Fila de tarefas do App Engine, verá instruções que guiam você para a página "Cloud Tasks". Essa atualização no console do Google Cloud não altera como as filas de tarefas funcionam.
Ative a API Cloud Tasks.
Quando estiver na página "Cloud Tasks", você verá uma lista de todas as filas no aplicativo. Clicar no nome de uma fila exibirá a página Detalhes da fila, que mostra todas as tarefas na fila selecionada.
A seguir
Saiba mais sobre como criar tarefas.