Esta página descreve alguns dos problemas e limitações que pode encontrar ao usar o Cloud Tasks.
Ordem de execução
Com exceção das tarefas agendadas para execução no futuro, as filas de tarefas são totalmente independentes da plataforma no que diz respeito à ordem de execução. Não existem garantias nem tentativas com base no melhor esforço para executar tarefas numa ordem específica. Especificamente: não existem garantias de que as tarefas antigas sejam executadas, a menos que uma fila esteja completamente vazia. Existem vários casos comuns em que as tarefas mais recentes são executadas mais cedo do que as tarefas mais antigas, e os padrões relacionados com isto podem mudar sem aviso prévio.
Execução duplicada
O Cloud Tasks tem como objetivo uma semântica de "executar exatamente uma vez" rigorosa. No entanto, em situações em que tem de ser feita uma compensação de design entre a execução garantida e a execução duplicada, o serviço opta pela execução garantida. Como tal, ocorre um número diferente de zero de execuções duplicadas. Os programadores devem tomar medidas para garantir que a execução duplicada não é um evento catastrófico. Em produção, mais de 99,999% das tarefas são executadas apenas uma vez.
Limitações de recursos
A origem mais comum de atrasos nas filas de processamento imediato é o esgotamento dos recursos nas instâncias de destino. Se um utilizador estiver a tentar executar 100 tarefas por segundo em instâncias de front-end que só podem processar 10 pedidos por segundo, vai acumular-se um atraso. Normalmente, isto manifesta-se de uma de duas formas, sendo que, geralmente, ambas podem ser resolvidas aumentando o número de instâncias que processam pedidos.
Erros de recuo e taxas aplicadas
Os servidores sobrecarregados podem começar a devolver erros de recuo: HTTP 503
(para destinos do App Engine) ou HTTP 429
ou 5xx
(para destinos externos).
O Cloud Tasks reage a estes erros diminuindo a velocidade de execução até que os erros parem. Esta limitação do sistema impede a sobrecarga do trabalhador. Tenha em atenção que as definições especificadas pelo utilizador não são alteradas.
A limitação do sistema ocorre nas seguintes circunstâncias:
O Cloud Tasks recua em todos os erros. Normalmente, é usado o recuo especificado em
rate limits
. No entanto, se o trabalhador devolver HTTP429 Too Many Requests
,503 Service Unavailable
ou a taxa de erros for elevada, o Cloud Tasks usa uma taxa de recuo mais elevada. A nova tentativa especificada no cabeçalho de resposta HTTPRetry-After
é considerada.Para evitar picos de tráfego e suavizar aumentos súbitos no tráfego, os envios aumentam gradualmente quando a fila é criada recentemente ou está inativa, e se um grande número de tarefas ficar subitamente disponível para envio (devido a picos nas taxas de criação de tarefas, a fila ser retomada ou muitas tarefas agendadas ao mesmo tempo).
Picos de latência e máximo de pedidos simultâneos
Os servidores sobrecarregados também podem responder com grandes aumentos na latência.
Nesta situação, os pedidos permanecem abertos durante mais tempo. Uma vez que as filas são executadas com um número máximo de tarefas em simultâneo, isto pode resultar na incapacidade das filas de executar tarefas à taxa esperada. Aumentar o
max_concurrent_dispatches
para as filas afetadas pode ajudar em situações em que o valor foi definido como demasiado baixo, introduzindo um limite de taxa artificial. No entanto, aumentar o valor de max_concurrent_dispatches
provavelmente não vai aliviar qualquer pressão subjacente sobre os recursos.
Problemas de implementação gradual com tarefas de longa duração
As filas do Cloud Tasks aumentam a respetiva saída, em parte, com base no número de tarefas enviadas anteriormente com êxito. Se o processador de tarefas demorar um período considerável, da ordem dos minutos, a concluir uma tarefa e devolver uma resposta de êxito, pode haver um atraso na taxa de aumento da fila.
Ver mais de 5000 tarefas
Se tiver mais de 5000 tarefas, algumas tarefas não são visíveis na Google Cloud consola. Use a CLI gcloud para ver todas as tarefas.
Recriar uma fila com o mesmo nome
Se eliminar uma fila da Google Cloud consola, tem de aguardar 3 dias antes de a recriar com o mesmo nome. Este período de espera impede um comportamento inesperado em tarefas que estão a ser executadas no momento da eliminação ou que estão a aguardar execução. Também evita falhas de processo internas no ciclo de eliminação ou recriação.