Ao invocar uma função de forma assíncrona, não há mecanismo nativo para rastrear se a execução foi bem-sucedida, falhou ou ainda está em andamento. O modo de tarefa assíncrona resolve essa questão registrando cada transição de estado de todas as invocações — do enfileiramento à conclusão ou falha — e disponibilizando esses registros para consultas e gerenciamento em tempo real.
Com o modo de tarefa ativado, é possível:
Consultar o status atual de qualquer tarefa em qualquer ponto do ciclo de vida.
Parar uma tarefa específica em execução pelo id.
Evitar execuções duplicadas atribuindo um id de tarefa exclusivo a cada invocação.
Monitorar a profundidade da fila, a latência de processamento e o uso de recursos no nível da instância.
Coordenar tarefas em fluxos de trabalho de grande escala com o CloudFlow.
O modo de tarefa adiciona latência mínima às invocações e execuções. Essa latência não é cobrada. Para detalhes sobre faturamento, consulte Visão geral do faturamento.
Como funciona o modo de tarefa
Quando o modo de tarefa está ativado, o Function Compute registra cada transição de estado para toda invocação assíncrona. Após o envio de uma tarefa:
O Function Compute enfileira a mensagem de invocação (status: Enqueued).
A mensagem sai da fila e aguarda uma instância disponível (status: Processed).
Uma instância assume a tarefa e a executa (status: Running).
A tarefa transita para um estado final: Succeeded, Failed, Stopped, Expired ou Invalid.
É possível consultar o estado em qualquer etapa pelo console, pela API ou pelo Serverless Devs.
Limitações
Sensibilidade à latência: Desative o modo de tarefa se sua aplicação exigir latência média de ponta a ponta inferior a 100 ms.
Throughput: Desative o modo de tarefa se precisar invocar funções assincronamente a milhares de solicitações por segundo (RPS) ou mais.
Período de retenção: Os registros de tarefas ficam disponíveis para consulta por 7 dias após a criação.
Regiões suportadas: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), Singapura, Reino Unido (Londres), EUA (Vale do Silício), EUA (Virgínia), Alemanha (Frankfurt), Malásia (Kuala Lumpur), Indonésia (Jacarta), Tailândia (Bangkok), Japão (Tóquio) e Coreia do Sul (Seul).
Status das tarefas
O Function Compute rastreia os seguintes status para cada tarefa assíncrona:
|
Status |
Descrição |
|
Enqueued |
A mensagem de invocação está enfileirada e aguardando processamento. |
|
Processed |
A mensagem saiu da fila e a tarefa aguarda invocação. |
|
Running |
A tarefa está em execução em uma instância. |
|
Succeeded |
A tarefa foi concluída com êxito. |
|
Failed |
A tarefa falhou. |
|
Stopped |
A tarefa foi parada manualmente. |
|
Stopping |
O sistema está processando uma solicitação de parada. |
|
Expired |
O tempo de vida (TTL) da mensagem expirou antes do processamento da tarefa; a mensagem foi descartada. |
|
Invalid |
Não foi possível executar a tarefa — por exemplo, porque a função foi excluída. |
|
Retrying |
A tarefa está em nova tentativa após um erro de execução. O status muda para Running assim que a nova tentativa começa. |
Para obter o status atual de uma tarefa específica, chame GetAsyncTask. Para filtrar tarefas por status ou outras condições, chame ListAsyncTasks.
Comparação com jobs do Kubernetes
Para executar tarefas assíncronas, utilize o recurso de tarefas assíncronas do Function Compute ou jobs do Kubernetes. A tabela a seguir compara as duas abordagens.
|
Recurso |
Tarefas do Function Compute |
Jobs do Kubernetes |
|
Casos de uso |
Adequado tanto para tarefas em tempo real com duração de dezenas de milissegundos quanto para tarefas offline com duração de dezenas de horas. |
Indicado para tarefas offline com carga de trabalho fixa e baixos requisitos de velocidade de envio e desempenho em tempo real. |
|
Observabilidade da tarefa |
Suportada. Oferece observabilidade abrangente, incluindo logs, métricas como contagem de tarefas enfileiradas, duração do caminho da tarefa e consultas de status da tarefa. |
Requer integração manual de software open source. |
|
Dimensionamento automático de instâncias de tarefa |
Suportado. Dimensiona instâncias automaticamente com base no número de tarefas enfileiradas e na utilização de recursos. |
Exige implementação manual de dimensionamento e balanceamento de carga com uma fila de tarefas, o que aumenta a complexidade. |
|
Velocidade de dimensionamento de instâncias |
Nível de milissegundos. |
Nível de minutos. |
|
Utilização de recursos da instância |
Selecione um tipo de instância apropriado. As instâncias são dimensionadas automaticamente; a cobrança é baseada na duração real do processamento da tarefa, resultando em alta utilização de recursos. |
É necessário especificar o tipo e a quantidade de instâncias ao enviar um job. O dimensionamento automático e o balanceamento de carga são difíceis de implementar, levando a uma baixa utilização de recursos. |
|
Throughput de envio de tarefas |
Um único usuário pode enviar dezenas de milhares de tarefas por segundo. |
Um cluster pode iniciar no máximo algumas centenas de jobs por segundo. |
|
Envio agendado ou atrasado |
Suporta envio agendado e atrasado. |
Suporta envio agendado, mas não suporta envio atrasado. |
|
Deduplicação de tarefas |
Suportada. |
Não suportada. |
|
Pausar ou retomar a execução da tarefa |
Suportado. |
Suportado apenas no Kubernetes 1.21 e versões posteriores. |
|
Encerrar uma tarefa específica |
Suportado. |
Suporte limitado. As tarefas são encerradas indiretamente ao parar as instâncias da tarefa. |
|
Limitação de taxa de tarefas |
Suportada. A limitação pode ser configurada no nível do usuário ou da função. |
Não suportada. |
|
Callbacks automáticos de resultado |
Suportados. |
Não suportados. |
|
Custos de desenvolvimento e O&M |
Basta implementar a lógica de processamento da tarefa. |
Requer a manutenção de um cluster Kubernetes. |
Ativar o modo de tarefa
Ativar o modo de tarefa ao criar uma função
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Function.
Na barra de navegação superior, selecione uma região. Na página Function, clique em Create Function.
Na caixa de diálogo, selecione Task Function e clique em Create. Defina o nome da função e clique em Create.
Após a criação da função, acesse a página de detalhes da função e clique na aba Tasks. O modo de tarefa é ativado por padrão.
Para detalhes de configuração, consulte Criar uma função de tarefa.
Ativar o modo de tarefa em uma função existente
Antes de começar, certifique-se de ter criado uma função. Consulte Criar uma função.
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.
Na página de detalhes da função, clique na aba Tasks e, em seguida, clique em Modify ao lado de Task Mode.
No painel Task Mode, defina Task Mode como Enable e clique em Deploy.
Ativar o modo de tarefa via API
Chame PutFunctionAsyncInvokeConfig com asyncTask definido como true. Todas as invocações assíncronas subsequentes para a função usarão o modo de tarefa.
{
"asyncTask": true
}
Ativar o modo de tarefa não afeta as invocações síncronas. O modo de tarefa aplica-se apenas a invocações assíncronas.
Enviar uma tarefa
Enviar uma tarefa pelo console
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.
Na página de detalhes da função, clique na aba Tasks e, em seguida, clique em Submit Task.
Na caixa de diálogo, selecione um método de geração de id de tarefa e especifique o horário de execução; depois, clique em OK.
Para passar parâmetros de teste antes do envio, clique no ícone de seta ao lado de Submit Task e selecione Configure Test Parameters. Para funções de evento, os parâmetros são passados como um payload de evento. Para funções HTTP, os parâmetros são passados como parâmetros HTTP.
Após o envio, a lista de tarefas exibe Task Status, Task ID e Instance ID.
Enviar uma tarefa via API
Chame InvokeFunction com o cabeçalho x-fc-invocation-type definido como Async. Para atribuir um id de tarefa personalizado para deduplicação, inclua o cabeçalho x-fc-async-task-id.
Exemplo: enviar uma tarefa e consultar seu status
O exemplo a seguir mostra o ciclo de vida completo de envio de uma tarefa assíncrona e consulta do seu status até a conclusão.
-
Ative o modo de tarefa na função (configuração única):
PUT /2023-03-30/functions/{functionName}/async-invoke-config Content-Type: application/json { "asyncTask": true } -
Envie a tarefa com um id de tarefa personalizado:
POST /2023-03-30/functions/{functionName}/invocations x-fc-invocation-type: Async x-fc-async-task-id: my-task-001 -
Consulte o status da tarefa usando o id da tarefa:
GET /2023-03-30/functions/{functionName}/async-tasks/my-task-001A resposta inclui o status atual (
Enqueued,Running,Succeeded, etc.). Consulte este endpoint repetidamente até que o status atinja um estado final.
Para um exemplo de código executável que define um id de tarefa durante a invocação, consulte Exemplo de InvokeFunction (site internacional).
Parar uma tarefa
Parar uma tarefa pelo console
Na aba Tasks da página de detalhes da função, localize a tarefa na lista de tarefas e pare-a.
Parar uma tarefa via API
Chame StopAsyncTask com o TaskID da tarefa. Para encontrar o TaskID, chame ListAsyncTasks.
Deduplicação de tarefas
O Function Compute usa um TaskID globalmente exclusivo para evitar execuções duplicadas. Se um envio falhar — por exemplo, devido a um timeout — tente novamente com o mesmo TaskID. O Function Compute rejeita envios duplicados com um erro 409.
Atribua um TaskID a cada tarefa incluindo o cabeçalho x-fc-async-task-id na solicitação de invocação. Use esse id ao tentar reenviar submissões que falharam.
Se você definir RequestID sem definir TaskID, o Function Compute definirá automaticamente TaskID como RequestID. Defina TaskID diretamente e deixe RequestID indefinido.
Acionar tarefas com gatilhos de evento
Os seguintes gatilhos suportam invocação assíncrona e podem acionar tarefas assíncronas:
-
Gatilhos integrados ao EventBridge:
Defina Invocation Method como Async Invocation para gatilhos HTTP e gatilhos integrados ao EventBridge.
Monitorar tarefas
Utilize as métricas de monitoramento do Function Compute para rastrear a profundidade da fila de tarefas, detectar erros e responder a timeouts em tempo real.
Visualizar métricas
Antes de começar, certifique-se de ter criado uma função. Consulte Criar uma função.
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Function, clique na função desejada.
-
Na página de detalhes da função, clique na aba Monitoring.
Clique em Function Metrics para visualizar métricas de invocação assíncrona: Asynchronous Invocation Processing (count), Asynchronous Invocation Processing Latency (ms), Asynchronous Invocation Trigger Events (count) e Asynchronous Requests Backlogs (count).
Clique em Instance Metrics para visualizar o uso de recursos no nível da instância para instâncias de tarefas assíncronas.
As métricas no nível da instância exigem que o recurso de log esteja ativado. Consulte Configurar logging.
Para obter a lista completa de métricas de monitoramento, consulte Métricas de monitoramento.
Definir regras de alerta
Para definir um alerta em uma métrica, clique no ícone de sino no canto superior direito do gráfico da métrica. Configure as condições de alerta e o limiar no painel Create Metric-based Alert Rule e clique em OK.
Exemplo: enviar um alerta de severidade média quando as invocações assíncronas acumuladas atingirem 5 ou mais, entregue 24 horas por dia, 7 dias por semana via DingTalk, e-mail, telefone e webhook.
Orquestrar tarefas com o CloudFlow
Integre o Function Compute ao CloudFlow para coordenar tarefas assíncronas em fluxos de trabalho de grande escala. O CloudFlow rastreia as transições de estado de cada tarefa, aplica sua lógica de nova tentativa e garante a execução confiável de etapas predefinidas. Os estados do CloudFlow suportados incluem Pass, Map e Parallel.
Para detalhes de integração, consulte Integrar com o Function Compute.
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma tarefa assíncrona ativada (consulte Ativar o modo de tarefa)
Concedido acesso do CloudFlow ao Function Compute. Consulte Usar uma função para conceder permissões ao Function Compute para acessar outros serviços de nuvem
Criar e executar um fluxo de trabalho
Faça login no console do CloudFlow. Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, clique em Workflows. Na página Workflows, clique em Create Workflow.
Na caixa de diálogo Create Workflow, selecione um método de criação e modo de fluxo de trabalho. O CloudFlow suporta dois modos: Standard e Express. Consulte Fluxos de trabalho Standard e Express e Criar um fluxo de trabalho a partir de um modelo em branco para obter detalhes.
-
Defina o fluxo de trabalho. No canto superior direito da página de detalhes do fluxo, clique em YAML. Insira a definição do fluxo no editor de código e clique em Save. O exemplo a seguir invoca uma função do Function Compute assincronamente e aguarda sua conclusão antes que o fluxo de trabalho termine (
TaskMode: RequestComplete):Type: StateMachine Name: MyFlow SpecVersion: v1 StartAt: InvokeFunction States: - Type: Task Name: InvokeFunction Action: FC:InvokeFunction TaskMode: RequestComplete Parameters: invocationType: Async resourceArn: acs:fc:us-west-1:103435468****:functions/func-i1****/LATEST End: true -
Configure a função de execução. No canto superior direito, clique em Configure Workflow. Selecione uma Execution Role e clique em Save.
NotaA função deve estar vinculada à política AliyunFCInvocationAccess.
Na página de detalhes do fluxo, clique em Execute para testar o fluxo de trabalho.