Como criar filas push

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, configurada e pronta para ser usada com configurações padrão. Se você 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é 10 filas para aplicativos gratuitos e até 100 filas para aplicativos ativados para faturamento. Não é possível criar filas dinamicamente.

Esse arquivo de configuração de fila define duas filas:

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
  <queue-entries>
    <queue>
      <name>queue-blue</name>
      <target>v2.task-module</target>
    </queue>
    <queue>
      <name>queue-red</name>
      <rate>1/s</rate>
    </queue>
  </queue-entries>
  ```

gcloud/yaml

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

 - name: queue-red
   rate: 1/s

Para fazer upload do arquivo:

appcfg/xml

Mac/Linux:

    [PATH_TO_APP_ENGINE_SDK]\bin\appcfg.sh update [YOUR_APP_DIR]

Windows:

    [PATH_TO_APP_ENGINE_SDK]\bin\appcfg.cmd update [YOUR_APP_DIR]

gcloud/yaml

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.

Como 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 intervalos de token para controlar a taxa de execução. Cada fila nomeada tem um intervalo de token que contém tokens até o máximo especificado por bucket_size, ou no máximo cinco tokens, caso você não especifique o tamanho do intervalo.

Cada vez que o aplicativo executa uma tarefa, um token é removido do intervalo. O app continua processando tarefas na fila até acabarem os tokens do intervalo da fila. O App Engine recarrega o intervalo com novos tokens continuamente com base na rate especificada para a fila.

Caso a fila contenha tarefas a serem processadas e o intervalo da fila contenha tokens, o App Engine processa simultaneamente o mesmo número de tarefas e tokens. Isso pode causar bursts de processamento, o que consome recursos do sistema e concorre com solicitações de atendimento ao usuário.

Para evitar que muitas tarefas sejam executadas de uma só vez ou impedir a contenção do armazenamento de dados, use max_concurrent_requests.

A seguinte amostra ilustra como definir max_concurrent_requests para limitar tarefas e também como ajustar o tamanho e a taxa do intervalo com base nas necessidades e nos recursos disponíveis do aplicativo:

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <queue>
    <name>queue-blue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

gcloud/yaml

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 denominado total_storage_limit no nível superior:

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <total-storage-limit>120M</total-storage-limit>
  <queue>
    <name>queue-blue</name>
    <rate>35/s</rate>
  </queue>
</queue-entries>

gcloud/yaml

# 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. É possível usar esse limite para proteger o aplicativo de um erro de programação de fork bomb, em que cada tarefa adiciona várias outras durante a execução.

Se o app estiver recebendo erros para uma cota insuficiente ao adicionar tarefas, aumentar o 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

Você pode controlar a taxa de processamento ao configurar max_concurrent_requests, limitando 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 intervalo 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, você pode 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. Evitar essa possibilidade configurando max_concurrent_requests com um valor menor.

Por exemplo, se você definir max_concurrent_requests como 10, a fila do nosso exemplo manterá cerca de 20 tarefas por segundo com uma latência for 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.

appcfg/xml

<?xml version="1.0" encoding="utf-8"?>
<queue-entries>
  <queue>
    <name>optimize-queue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

gcloud/yaml

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

Como monitorar filas no Console do GCP

Na página "Filas de tarefas", no Console do GCP, são exibidas informações sobre todas as filas de tarefas no aplicativo.

  1. Visite a página "Filas de tarefas" no Console do GCP e selecione a guia "Filas push" na barra de menus na parte superior da página.

    Acessar a guia Filas push

  2. A guia Filas push lista todas as filas no aplicativo. Quando você clica no nome de uma fila, a página Detalhes da fila de tarefas é aberta, onde é possível ver todas as tarefas na fila selecionada.

A seguir

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

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8