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, 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.

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 7 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 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:

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 chamado 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

É 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.

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 Cloud

A página "Filas de tarefas" no Console do Cloud exibe informações sobre todas as filas de tarefas no aplicativo.

  1. Acesse a página "Filas de tarefas" no Console do Cloud 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. Ao clicar 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