O Serverless Workflow invoca funções do Function Compute de forma assíncrona em etapas do tipo Task. A invocação assíncrona é ideal para tarefas de longa duração e auditorias manuais, pois evita erros de limitação de taxa (throttling) e simplifica o tratamento de erros e a lógica de novas tentativas. O Serverless Workflow oferece suporte a vários padrões de integração para invocação assíncrona.
Pré-requisitos
Conclua as seguintes operações:
-
Opcional: Ative a invocação assíncrona. Para obter mais informações, consulte Visão geral do recurso.
Com a invocação assíncrona com estado ativada, é possível interromper instâncias de função durante a execução para obter um controle de fluxo mais granular.
-
O Function Compute deve ter permissão para acessar o Serverless Workflow, permitindo que o Serverless Workflow receba callbacks após a conclusão da execução assíncrona da função. Configure a seguinte política de permissões:
{ "Statement": [ { "Effect": "Allow", "Action": [ "fnf:ReportTaskSucceeded", "fnf:ReportTaskFailed" ], "Resource": [ "*" ] } ], "Version": "1" }Para obter mais informações sobre autorização, consulte Conceder acesso do Function Compute a outros serviços.
Por que usar invocação assíncrona
Por padrão, o Serverless Workflow utiliza o padrão síncrono ao orquestrar tarefas do Function Compute. O fluxo aguarda o retorno de cada função antes de prosseguir para a próxima etapa:
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
A invocação síncrona apresenta as seguintes limitações:
-
Os limites de recursos do Function Compute podem causar limitação de taxa (throttling). Por padrão, cada conta Alibaba Cloud permite no máximo 300 instâncias de pagamento conforme o uso por região.
As invocações do Serverless Workflow compartilham a mesma cota com invocações de outros serviços. A limitação de taxa pode ocorrer mesmo que seu fluxo do Serverless Workflow possua políticas complexas de nova tentativa.
Tarefas de longa duração exigem uma conexão persistente entre o Serverless Workflow e o Function Compute, o que as torna vulneráveis à instabilidade da rede.
A invocação assíncrona com padrões de integração do Serverless Workflow resolve esses problemas e oferece suporte aos seguintes cenários:
Prosseguir para as etapas subsequentes sem aguardar a conclusão da etapa atual.
Ignorar a etapa atual e avançar para a próxima quando ocorrerem erros inesperados.
Cenários
O Serverless Workflow oferece suporte a três padrões para invocação assíncrona do Function Compute: request-response (requestResponse), synchronous (sync) e wait-for-callback (waitForCallback).
|
Padrão de integração |
Valor do parâmetro pattern |
Cenário |
|
Padrão Request-response (padrão) |
Fluxo de exemplo:
|
Tarefas de longa duração nas quais os resultados da execução não são determinantes. |
|
Padrão Synchronization |
Fluxo de exemplo:
|
Tarefas de longa duração sujeitas a limitação de taxa. |
|
Padrão Wait-for-callback |
Fluxo de exemplo:
|
O fluxo deve prosseguir independentemente da conclusão da etapa atual. Exemplo: auditoria manual. |
Parâmetros de serviço
Nestes exemplos, o Serverless Workflow utiliza o Function Compute como nó de tarefa. O resourceArn especifica o serviço de destino, e o serviceParams configura a invocação. O serviceParams aceita:
InvocationType: o tipo de invocação da função. Valores válidos:Sync(síncrono) eAsync(assíncrono).-
Opcional:
StatefulAsyncInvocationID: o ID de uma invocação assíncrona com estado. Use este ID para localizar a tarefa no console do Function Compute.NotaQuando o
InvocationTypeé definido comoAsynccom um StatefulAsyncInvocationID, o Serverless Workflow utiliza a invocação assíncrona com estado. O valor do StatefulAsyncInvocationID deve ser exclusivo em todas as funções.
Padrões de integração
Padrão Request-response
Quando o fluxo atinge a etapa especificada, o Serverless Workflow invoca a função de forma assíncrona e prossegue para a próxima etapa sem aguardar um callback ou a conclusão da execução.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: requestResponse # Async invocation with sync pattern
serviceParams:
InvocationType: Async
Neste exemplo, a função é acionada na etapa mytask. O fluxo avança imediatamente para a próxima etapa, independentemente da conclusão da função.
Padrão Synchronization
Ao atingir a etapa especificada, o Serverless Workflow invoca a função de forma assíncrona. O fluxo do Serverless Workflow aguarda até receber a notificação de que a execução da função foi concluída antes de prosseguir.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: sync # Async invocation with sync pattern
serviceParams:
InvocationType: Async
Neste exemplo, a função é acionada na etapa mytask. O fluxo fica suspenso até receber a notificação de que a execução da função foi concluída.
O padrão de integração síncrona comporta-se da mesma forma que a invocação síncrona de funções. Apenas o método de invocação difere.
Padrão Wait-for-callback
Quando o fluxo atinge a etapa especificada, o Serverless Workflow invoca a função de forma assíncrona e transmite um token de tarefa. O fluxo permanece suspenso até que você utilize o token de tarefa para relatar o resultado da execução, independentemente da conclusão da função.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: waitForCallback # Async invocation with sync pattern
serviceParams:
InvocationType: Async
Neste exemplo, a função é acionada na etapa mytask. O fluxo fica suspenso até receber um callback por meio da operação de API ReportTaskSucceed ou ReportTaskFailed. É possível iniciar o callback a qualquer momento, tenha a função sido concluída ou não.
Exemplo: invocação assíncrona de função
O Serverless Workflow combina invocação assíncrona com invocação assíncrona com estado para cenários do tipo job. Com ambos os recursos ativados, é possível monitorar o status da execução e interromper a execução da função a qualquer momento. O trecho de FDL a seguir mostra essa configuração no Serverless Workflow:
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:::services/{serviceName}.{qualifier}/functions/{functionName}
pattern: sync # Async invocation with sync pattern
inputMappings:
- target: id
source: $context.execution.name
serviceParams:
InvocationType: Async
StatefulAsyncInvocationID: $.id