A configuração de uma fila do Cloud Tasks pode ser feita durante a criação dela ou posteriormente. A configuração é aplicada a todas as tarefas nessa fila.
Veja três aspectos básicos para configurar as filas:
Configurar o roteamento no nível da fila
A configuração do roteamento no nível da fila substitui a configuração no nível da tarefa. Isso é útil se você quiser usar o Cloud Tasks como um buffer na frente do serviço de destino ou se precisar mudar o roteamento de todas as tarefas em uma fila.
O roteamento no nível da fila se aplica a:
- Tarefas na fila
- Tarefas adicionadas à fila depois que o roteamento no nível da fila é definido
Limitações
O roteamento no nível da fila não é compatível com as chaves de criptografia gerenciadas pelo cliente (CMEK) do Cloud Key Management Service (Cloud KMS). Se a CMEK estiver ativada, não será possível fazer o seguinte:
- Criar tarefas em uma fila com roteamento no nível da fila
- Aplicar o roteamento no nível da fila
Configurar o roteamento no nível da fila para tarefas HTTP
É possível configurar uma fila para substituir o roteamento no nível da tarefa ao criar ou atualizar a fila. Para configurar o roteamento no nível da fila, defina o parâmetro
uriOverride
da fila como a rota preferida.
Se você estiver aplicando o roteamento no nível da fila como uma atualização de uma fila existente, pause a fila antes de aplicar as mudanças e aguarde um minuto após a aplicação para retomar a fila.
Pause a fila executando o seguinte comando:
gcloud tasks queues pause QUEUE_ID
Substitua
QUEUE_ID
pelo ID da sua fila.Atualize ou remova o encaminhamento no nível da fila.
Para atualizar o roteamento em nível de fila, defina o parâmetro
uriOverride
como sua rota atualizada.Para remover o roteamento no nível da fila usando a API REST ou RPC:
API REST:envie uma solicitação
patch
para a fila com um payload vazio e o parâmetroupdateMask
definido comohttpTarget
.API RPC:envie um
updateQueueRequest
para a fila com um payload vazio e o parâmetroupdate_mask
definido comohttp_target
.
O exemplo a seguir usa a API REST para atualizar o host para onde as tarefas são encaminhadas:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOF
Substitua:
ACCESS_TOKEN
: seu token de acesso. Para isso, execute o seguinte no terminal:gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID
: o ID do seu Google Cloud projeto. Para isso, execute o seguinte no terminal:gcloud config get-value project
LOCATION
: o local da fila.NEW_HOST
: o novo host para onde você quer que a fila direcione as solicitações.
Aguarde um minuto.
Pode levar até um minuto para que a nova configuração entre em vigor. Aguardar para retomar a fila ajuda a evitar que as tarefas sejam enviadas com a configuração antiga.
Retome a fila executando o seguinte comando:
gcloud tasks queues resume QUEUE_ID
Configurar o roteamento no nível da fila para tarefas do App Engine
Para configurar o roteamento no nível da fila para tarefas do App Engine, defina o parâmetro
appEngineRoutingOverride
da fila para o serviço e a versão do App Engine de sua preferência.
Configure o roteamento no nível da fila e substitua qualquer roteamento no nível da tarefa:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Substitua:
QUEUE_ID
: o ID da fila (nome abreviado).SERVICE
: o serviço de trabalhador do App Engine responsável pelo gerenciamento de tarefas.VERSION
: a versão do app.
Por exemplo, se você configurar um serviço de worker para gerenciar todas as tarefas em uma fila, poderá rotear para esse serviço e a versão padrão:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Verifique se a fila foi configurada com sucesso executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATION
pelo local da fila.A saída será semelhante a esta:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Para remover o roteamento no nível da fila, execute o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Quando o roteamento no nível da fila é removido, o roteamento no nível da tarefa é aplicado às tarefas na fila e às tarefas adicionadas à fila no futuro.
Definir limites de taxa
O limite de taxa determina a taxa máxima em que as tarefas podem ser enviadas por uma fila, independente de ser uma primeira tentativa ou uma nova tentativa.
Defina a taxa máxima e o número de tarefas simultâneas que podem ser despachadas por uma fila executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Substitua:
QUEUE_ID
: o ID da fila (nome abreviado).DISPATCH_RATE
: a taxa de envio. Essa é a taxa na qual os tokens no bucket são atualizados. Em condições em que há um fluxo de tarefas relativamente constante, isso equivale à taxa em que as tarefas são despachadas.MAX_CONCURRENT_DISPATCHES
: o número máximo de tarefas na fila que podem ser executadas de uma só vez.
Por exemplo, se você criou uma fila sem definir nenhum parâmetro, pode atualizar o número máximo de tarefas simultâneas executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Verifique se a fila foi configurada com sucesso executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATION
pelo local da fila.A saída será semelhante a esta:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Métodos para definir taxas de processamento de filas
É possível definir taxas de processamento de fila usando a API Cloud Tasks ou fazendo upload de um arquivo queue.yaml
. Ambos os métodos resultam em filas que usam o mesmo mecanismo subjacente.
Em ambos os casos, a fila usa o algoritmo de bucket de token para controlar a taxa de execução da tarefa. Cada fila nomeada tem um bucket que contém seus tokens.
Cada vez que o aplicativo executa uma tarefa, um token é removido do bucket.
A fila continua processando tarefas até o esgotamento de tokens do bucket. O sistema recarrega o bucket com novos tokens continuamente com base na taxa max_dispatches_per_second
especificada para a fila. Se a fila
contiver tarefas a serem processadas e o bucket da fila contiver tokens, o sistema
processará simultaneamente todas as tarefas em que houver tokens, até o
valor max_concurrent_dispatches
definido.
Uma carga desigual pode permitir que o número de tokens no bucket aumente significativamente, o que pode levar a explosões de processamento quando uma sequência de solicitações é recebida. Nesse caso, sua fila pode apresentar uma taxa de despacho real que excede a taxa max_dispatches_per_second
, consumindo recursos do sistema e competindo com solicitações de veiculação do usuário. Nos casos em que você usa filas para
gerenciar taxas de despacho com base em SLAs relativamente lentos para serviços de downstream,
isso pode gerar erros, como HTTP 429
(excesso de solicitações) ou HTTP 503
(serviço indisponível).
Ao usar qualquer método da API Cloud Tasks, você tem dois campos para definir a taxa de despacho da fila:
max_dispatches_per_second
max_concurrent_dispatches
Um terceiro campo,
max_burst_size
, é calculado pelo sistema com base no valor definido paramax_dispatches_per_second
. Para mais informações, consulte mensagensRateLimits
.Ao usar o método
queue.yaml
, é possível definir todos os três elementos:max_concurrent_requests
, que é equivalente amax_concurrent_dispatches
rate
, que é equivalente amax_dispatches_per_second
bucket_size
, que é equivalente amax_burst_size
Na maioria dos casos, usar o método de API Cloud Tasks e permitir que o sistema defina max_burst_size
produz uma taxa muito eficiente para o gerenciamento de bursts de solicitação. Em alguns casos, no entanto, especialmente quando a taxa necessária é relativamente lenta, usar o método queue.yaml
para definir manualmente bucket_size
com um valor baixo ou definir max_concurrent_dispatches
com um valor baixo usando a API Cloud Tasks pode dar mais controle.
Definir parâmetros de tentativa
Se uma tarefa não for concluída com sucesso, o Cloud Tasks fará uma nova tentativa com a tarefa com espera exponencial de acordo com os parâmetros que você configurou.
Especifique o número máximo de vezes para repetir as tarefas com falha na fila, defina um limite de tempo para tentar novamente e controle o intervalo entre as tentativas executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --max-retry-duration=MAX_RETRY_DURATION \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS
Substitua:
QUEUE_ID
: o ID da fila (nome abreviado).MAX_ATTEMPTS
: o número máximo de tentativas para uma tarefa, incluindo a primeira. Você pode permitir tentativas ilimitadas definindo essa flag como-1
. SeMAX_ATTEMPTS
for definido como-1
,MAX_RETRY_DURATION
ainda será aplicado.MAX_RETRY_DURATION
: o tempo máximo para repetir uma tarefa com falha, medido a partir da primeira tentativa. O valor precisa ser uma string que termine em "s", como5s
. Se definido como0
, a idade da tarefa será ilimitada. SeMAX_RETRY_DURATION
estiver definido como0
,MAX_ATTEMPTS
ainda será aplicado.
MIN_INTERVAL
: o tempo mínimo de espera entre as tentativas. O valor precisa ser uma string que termine em "s", como5s
.MAX_INTERVAL
: o tempo máximo de espera entre as tentativas de nova execução. O valor precisa ser uma string que termine em "s", como5s
.MAX_DOUBLINGS
: o número máximo de vezes que o intervalo entre novas tentativas de tarefas com falhas será dobrado antes que o aumento se torne constante. O intervalo de repetição de uma tarefa começa emMIN_INTERVAL
, depois duplicaMAX_DOUBLINGS
vezes, aumenta linearmente e, finalmente, tenta novamente em intervalos deMAX_INTERVAL
atéMAX_ATTEMPTS
vezes.Por exemplo, se
MIN_INTERVAL
for10s
,MAX_INTERVAL
for300s
eMAX_DOUBLINGS
for3
, o intervalo de repetição vai dobrar3
vezes, aumentar linearmente em 2^3 * 10s e tentar novamente em intervalos deMAX_INTERVAL
até que a tarefa seja tentadaMAX_ATTEMPTS
vezes: 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s e assim por diante.
Para mais detalhes sobre parâmetros, consulte as configurações de
RetryConfig
para o recursoQueue
.Verifique se a fila foi configurada com sucesso executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATION
pelo local da fila.A saída precisa conter os parâmetros de nova tentativa definidos.
A seguir
- Saiba como criar tarefas de destino HTTP.
- Saiba mais sobre a criação de tarefas do App Engine.
- Saiba mais sobre o gerenciamento de filas na referência da API RPC.
- Saiba mais sobre o gerenciamento de filas na referência da API REST.