Este tutorial mostra como criar uma fila do Cloud Tasks que pode regular a taxa de execuções do fluxo de trabalho.
Existe um número máximo de execuções de fluxo de trabalho ativas que podem ocorrer em simultâneo. Quando esta quota se esgota e se a opção Execução em atraso estiver desativada ou se a quota de execuções em atraso for atingida, todas as novas execuções falham com um código de estado HTTP 429 Too many requests
. Ao ativar uma fila do Cloud Tasks para executar fluxos de trabalho secundários a uma taxa que define, pode evitar problemas relacionados com a quota dos Workflows e alcançar uma melhor taxa de execução.
Tenha em atenção que o Cloud Tasks foi concebido para fornecer uma entrega "pelo menos uma vez"; no entanto, os Workflows não garantem o processamento exatamente uma vez de pedidos duplicados do Cloud Tasks.
No diagrama seguinte, um fluxo de trabalho principal invoca fluxos de trabalho secundários que são regulados por uma fila do Cloud Tasks à qual foi aplicada uma taxa de envio.
Objetivos
Neste tutorial, vai:
- Crie uma fila do Cloud Tasks que atue como intermediário entre os fluxos de trabalho principal e secundário.
- Crie e implemente um fluxo de trabalho secundário que receba dados do fluxo de trabalho principal.
- Crie e implemente o fluxo de trabalho principal que executa o fluxo de trabalho secundário através da fila do Cloud Tasks.
- Execute o fluxo de trabalho principal sem um limite de taxa de envio, que invoca as execuções do fluxo de trabalho secundário.
- Aplique um limite de envio à fila do Cloud Tasks e execute o fluxo de trabalho principal.
- Tenha em atenção que os fluxos de trabalho secundários são executados à taxa definida através da fila do Cloud Tasks.
Pode executar os seguintes comandos na Google Cloud consola ou através da CLI Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
Consola
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
- Na Google Cloud consola, aceda à página IAM para definir
autorizações para a conta de serviço
predefinida do Compute Engine.
Tome nota da conta de serviço predefinida do Compute Engine, uma vez que a vai associar aos fluxos de trabalho neste tutorial para fins de teste. Esta conta de serviço é criada automaticamente após ativar ou usar um serviço que usa o Compute Engine e tem o seguinte formato de email: Google Cloud
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola.Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.
- Selecione a conta de serviço predefinida do Compute Engine e, nessa linha, clique em Editar principal.
- Na caixa de diálogo apresentada, clique em
- Na lista Selecionar uma função, selecione Fluxos de trabalho > Invocador de fluxos de trabalho para que a conta tenha autorização para acionar a execução do fluxo de trabalho.
- Na lista Selecionar uma função, selecione Cloud Tasks > Cloud Tasks Enqueuer para que a conta tenha autorização para criar tarefas.
Adicionar outra função e adicione as
seguintes funções:
- Clique em Guardar.
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
Tome nota da conta de serviço predefinida do Compute Engine, uma vez que a vai associar aos fluxos de trabalho neste tutorial para fins de teste. Esta conta de serviço é criada automaticamente após ativar ou usar um serviço que usa o Compute Engine e tem o seguinte formato de email: Google Cloud
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto executando o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.
- Conceda a
função Workflows Invoker
(
roles/workflows.invoker
) no projeto à conta de serviço predefinida do Compute Engine para que a conta tenha autorização para acionar a execução do fluxo de trabalho.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Substitua o seguinte:
PROJECT_ID
: o Google Cloud ID do projetoPROJECT_NUMBER
: o Google Cloud número do projeto
- Conceda a
função de enfileirador do Cloud Tasks
(
roles/cloudtasks.enqueuer
) no projeto à conta de serviço predefinida do Compute Engine para que a conta tenha autorização para criar tarefas.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Crie uma fila do Cloud Tasks
Crie uma fila do Cloud Tasks que pode usar no fluxo de trabalho principal e que lhe permite regular a taxa de execuções do fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Cloud Tasks:
Clique em
Criar fila de envio.Introduza o Nome da fila,
queue-workflow-child
.Na lista Região, selecione us-central1 (Iowa).
Clique em Criar.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Crie e implemente um fluxo de trabalho secundário
Um fluxo de trabalho secundário pode receber e processar dados de um fluxo de trabalho principal. Crie e implemente um fluxo de trabalho secundário que faça o seguinte:
- Recebe um
iteration
como argumento - Dorme durante 10 segundos para simular algum processamento
Devolve uma string após a execução com êxito
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Clique em
Criar.Introduza o nome,
workflow-child
, do novo fluxo de trabalho.Na lista Região, selecione us-central1 (Iowa).
Na lista Conta de serviço, selecione a conta de serviço predefinida do Compute Engine.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-child.yaml
Abra o ficheiro de código-fonte num editor de texto e copie o seguinte fluxo de trabalho para o ficheiro.
Implemente o fluxo de trabalho:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Crie e implemente o fluxo de trabalho principal
O fluxo de trabalho principal executa vários ramos do fluxo de trabalho secundário através de um ciclo for
.
Copie o código fonte que define o fluxo de trabalho principal:
O fluxo de trabalho é composto pelas seguintes partes:
Um mapa usado para atribuir constantes referentes ao fluxo de trabalho secundário e ao nome da fila do Cloud Tasks. Para mais informações, consulte o artigo Mapas.
Um ciclo
for
que é executado para invocar o fluxo de trabalho secundário, de forma iterativa. Para mais informações, consulte a secção Iteração.Um passo do fluxo de trabalho que cria e adiciona um grande número de tarefas à fila do Cloud Tasks para executar o fluxo de trabalho secundário. Para mais informações, consulte o conetor da API Cloud Tasks.
Implemente o fluxo de trabalho:
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza o nome,
workflow-parent
, do novo fluxo de trabalho.Na lista Região, selecione us-central1 (Iowa).
Na lista Conta de serviço, selecione a conta de serviço predefinida do Compute Engine.
Clicar em Seguinte.
No editor de fluxos de trabalho, cole a definição do fluxo de trabalho principal.
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-parent.yaml
Abra o ficheiro de código fonte num editor de texto e cole a definição do fluxo de trabalho principal.
Implemente o fluxo de trabalho:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Execute o fluxo de trabalho principal sem limites de velocidade
Execute o fluxo de trabalho principal para invocar os fluxos de trabalho secundários através da fila do Cloud Tasks. As execuções devem demorar cerca de 10 segundos a concluir.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Na página Fluxos de trabalho, clique no fluxo de trabalho workflow-parent para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
Enquanto o fluxo de trabalho principal está em execução, regresse à página Fluxos de trabalho e clique no fluxo de trabalho workflow-child para aceder à respetiva página de detalhes.
Clique no separador Execuções.
Deverá ver execuções do fluxo de trabalho secundário, executadas aproximadamente ao mesmo tempo, semelhantes ao seguinte:
gcloud
Execute o fluxo de trabalho:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar se uma execução do fluxo de trabalho foi acionada, liste as últimas quatro execuções:
gcloud workflows executions list workflow-child --limit=4
Uma vez que o número de execuções (100) está abaixo do limite de concorrência dos fluxos de trabalho, os resultados devem ser semelhantes aos seguintes. Podem surgir problemas de quota se enviar milhares de execuções em simultâneo.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
Criou e implementou um fluxo de trabalho que invoca 100 iterações do fluxo de trabalho filho.
Execute o fluxo de trabalho principal com limites de velocidade
Aplique um limite de taxa de um envio por segundo à fila do Cloud Tasks e, em seguida, execute o fluxo de trabalho principal.
Consola
Na Google Cloud consola, aceda à página Cloud Tasks:
Clique em queue-workflow-child, a fila do Cloud Tasks que criou, e clique em Editar fila.
Na secção Limites de taxa para envios de tarefas, no campo Envios máximos, escreva 1.
Clique em Guardar.
Aceda à página Fluxos de trabalho:
Clique no fluxo de trabalho workflow-parent para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
Enquanto o fluxo de trabalho principal está em execução, regresse à página Fluxos de trabalho e clique no fluxo de trabalho workflow-child para aceder à respetiva página de detalhes.
Clique no separador Execuções.
Deverá ver execuções do fluxo de trabalho secundário, em execução a um pedido por segundo, semelhantes ao seguinte:
gcloud
Atualize a fila de tarefas do Cloud para aplicar um limite de taxa de um envio por segundo:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Execute o fluxo de trabalho:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar se uma execução do fluxo de trabalho foi acionada, liste as últimas quatro execuções:
gcloud workflows executions list workflow-child --limit=4
Os resultados devem ser semelhantes aos seguintes, com um fluxo de trabalho executado por segundo:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
Implementou com êxito um fluxo de trabalho que invoca 100 iterações do fluxo de trabalho filho com uma taxa de envio de uma execução por segundo.
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine recursos de tutoriais
Elimine os fluxos de trabalho e os recursos do Cloud Tasks criados neste tutorial:
Consola
Para eliminar os fluxos de trabalho, siga estes passos:
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Na lista de fluxos de trabalho, clique num fluxo de trabalho para aceder à respetiva página de detalhes do fluxo de trabalho.
Clique em
Eliminar.Escreva o nome do fluxo de trabalho e, de seguida, clique em Confirmar.
Para eliminar a fila do Cloud Tasks, siga estes passos:
Na Google Cloud consola, aceda à página Cloud Tasks:
Selecione o nome da fila que quer eliminar e clique em Eliminar fila.
Confirme a ação.
gcloud
Para eliminar os fluxos de trabalho, execute estes comandos:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Para eliminar a fila do Cloud Tasks, execute este comando:
gcloud tasks queues delete queue-workflow-child
O que se segue?
- Para saber como usar o Cloud Tasks para colocar um fluxo de trabalho em fila e executá-lo de forma assíncrona, consulte o artigo Coloque execuções de fluxos de trabalho em fila com o Cloud Tasks.
- Para saber mais sobre a sintaxe do Workflows, consulte a referência da sintaxe do Workflows.