Problemas e limitações

O Cloud Tasks permite criar sistemas assíncronos resilientes ao projetar comportamentos de execução de fila e limites de serviço específicos. É possível evitar gargalos de processamento e atrasos inesperados considerando a entrega pelo menos uma vez, a limitação do sistema e a capacidade do recurso de destino.

Ordem de execução

Com exceção das tarefas programadas para serem executadas no futuro, as filas de tarefas são totalmente independentes da plataforma em relação à ordem de execução. Não há garantias ou melhores tentativas da execução das tarefas em qualquer ordem específica. Especificamente, não há garantias de que tarefas antigas serão executadas se a fila não estiver completamente vazia. Há vários casos comuns em que as tarefas mais recentes são executadas mais cedo do que as mais antigas, e os padrões relacionados a isso podem mudar sem aviso prévio.

Atraso na execução

As execuções do Cloud Tasks podem ocasionalmente sofrer pequenos atrasos, geralmente com duração de alguns minutos, devido a reinicializações internas do sistema. As tarefas são atrasadas, mas nenhuma é perdida. Esses são eventos no nível do sistema sem solução alternativa. Esses eventos não são registrados, e a ocorrência deles não tem um cronograma definido.

Execução duplicada

O Cloud Tasks visa uma semântica estrita de "executar exatamente uma vez". No entanto, em situações em que há um conflito entre a garantia de execução e a execução duplicada, o serviço favorece a primeira. Assim, o número de execuções duplicadas não é zero. É necessário garantir que as execuções duplicadas sejam processadas normalmente e não causem falhas inesperadas. Na produção, mais de 99,999% das tarefas são executadas apenas uma vez.

Limitações de recursos

A causa mais comum de atrasos em filas de processamento imediato é o esgotamento de recursos nas instâncias de destino. Se você estiver tentando executar 100 tarefas por segundo em instâncias de front-end que só podem processar 10 solicitações por segundo, um backlog será gerado. Isso geralmente se manifesta em dois problemas, que normalmente podem ser resolvidos com o aumento do número de instâncias processando solicitações.

Erros de retirada e taxas impostas

Os servidores sobrecarregados podem começar a retornar erros de retirada: HTTP 503 (para destinos do App Engine) ou HTTP 429 ou 5xx (para destinos externos). O Cloud Tasks reage a esses erros diminuindo a velocidade de execução até que os erros parem. Essa limitação do sistema impede a sobrecarga do worker. As configurações não são alteradas.

A limitação do sistema ocorre nas seguintes circunstâncias:

  • O Cloud Tasks faz o back-off em todos os erros. Normalmente, o back-off especificado em rate_limits é usado. No entanto, se o worker retornar HTTP 429 Too Many Requests, 503 Service Unavailable ou a taxa de erros for alta, o Cloud Tasks usará uma taxa de back-off maior. A nova tentativa especificada no cabeçalho de resposta HTTP Retry-After é considerada.

  • Para evitar picos de tráfego e suavizar aumentos repentinos no tráfego, os envios aumentam lentamente quando a fila é criada ou fica inativa e se um grande número de tarefas fica disponível para envio de repente (devido a picos nas taxas de criação de tarefas, a fila sendo despausada ou muitas tarefas programadas ao mesmo tempo).

Picos de latência e número máximo de tarefas concorrentes

Servidores sobrecarregados também podem responder com grandes aumentos de latência. Nessa situação, as solicitações permanecem abertas por mais tempo. As tarefas podem não ser executadas na taxa esperada porque as filas têm um número máximo de tarefas simultâneas. Aumentar o max_concurrent_dispatches para as filas afetadas pode ajudar nas situações em que o valor foi definido como muito baixo, introduzindo um limite de taxa artificial. No entanto, aumentar max_concurrent_dispatches provavelmente não diminuirá a pressão de recurso subjacente.

Problemas de aumento com tarefas de longa duração

As filas do Cloud Tasks aumentam a saída em parte com base no número de tarefas enviadas anteriormente. Se o gerenciador de tarefas demorar um período considerável (em minutos) para concluir uma tarefa e retornar uma resposta de sucesso, poderá haver um atraso na taxa de ampliação da fila.

Como visualizar mais de 5.000 tarefas

Se você tiver mais de 5.000 tarefas, algumas delas não vão aparecer no Google Cloud console. Use a CLI gcloud para visualizar todas as tarefas.

Métrica de profundidade máxima da fila informada

A métrica de profundidade máxima da fila informada pelo Cloud Tasks é limitada a 1.000.000 de tarefas. Isso tem como objetivo melhorar a performance dos workers de tarefas subjacentes e não afeta o número de tarefas que podem ser enviadas ou processadas pela fila. As tarefas enviadas para a fila acima do limite de profundidade da fila continuarão sendo executadas conforme o esperado.

Para buscar a profundidade atual da fila além de 1.000.000 de tarefas, use o queues.tasks.list método. Esse método retorna todas as tarefas com paginação, permitindo agregar os dados e realizar uma operação de contagem. No entanto, dependendo do tamanho da profundidade da fila, o método poderá encontrar restrições de cota.

Como recriar uma fila com o mesmo nome

Se você excluir uma fila no Google Cloud console, será preciso aguardar três dias para recriar outra com o mesmo nome. Esse período de espera evita comportamentos inesperados em tarefas que estão em execução no momento da exclusão ou aguardando para serem executadas. Ele também evita falhas de processo interno no ciclo de exclusão ou recriação.

Destino não compatível ao usar um perímetro seguro

Se você configurou um perímetro seguro usando o VPC Service Controls, as solicitações HTTP de uma execução do Cloud Tasks serão bloqueadas para destinos não compatíveis e falharão com um código de erro TARGET_TYPE_NOT_PERMITTED_FOR_VPC. Para mais informações, consulte Configurar um perímetro de serviço usando o VPC Service Controls.

Restrições de locais de recursos

O Cloud Tasks oferece suporte à restrição de locais de recursos; no entanto, as limitações se aplicam às seguintes regiões:

  • us-central1
  • us-central2 (região privada Google Cloud )

Se você especificar qualquer uma das regiões na política da organização, inclua us-central1 e us-central2, mesmo que não esteja criando recursos do Cloud Tasks nas duas regiões. É possível incluir a região us-central2 na política da organização, mesmo que ela não use regiões particulares.