Serverless Workflow permite invocar funciones de Function Compute de forma asíncrona dentro de los pasos de tipo Task. La invocación asíncrona es ideal para tareas de larga duración y auditorías manuales; además, evita errores por limitación de velocidad y simplifica los procedimientos de manejo de errores y la lógica de reintentos. Serverless Workflow admite varios patrones de integración para la invocación asíncrona.
Requisitos previos
Complete las siguientes operaciones:
-
Opcional: La invocación asíncrona está habilitada. Para obtener más información, consulte Feature overview.
Si habilita la invocación asíncrona con estado, podrá detener instancias de función durante la ejecución para lograr un control de flujo más detallado.
-
Function Compute debe tener permisos para acceder a Serverless Workflow, de modo que Serverless Workflow pueda recibir callbacks una vez que finalice la ejecución asíncrona de la función. Configure la siguiente política de permisos:
{ "Statement": [ { "Effect": "Allow", "Action": [ "fnf:ReportTaskSucceeded", "fnf:ReportTaskFailed" ], "Resource": [ "*" ] } ], "Version": "1" }Para obtener más información sobre la autorización, consulte Grant Function Compute access to other services.
Razones para usar la invocación asíncrona
De forma predeterminada, Serverless Workflow utiliza el patrón síncrono cuando orquesta tareas de Function Compute. El flujo espera a que cada función devuelva una respuesta antes de continuar con el siguiente paso:
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
La invocación síncrona presenta las siguientes limitaciones:
-
Los límites de recursos de Function Compute pueden provocar limitaciones de velocidad. De forma predeterminada, cada cuenta de Alibaba Cloud permite un máximo de 300 instancias pay-as-you-go por región.
Las invocaciones de Serverless Workflow comparten la misma cuota con las invocaciones de otros servicios. Pueden producirse limitaciones de velocidad incluso si su flujo de Serverless Workflow cuenta con políticas de reintentos complejas.
Las tareas de larga duración requieren una conexión persistente entre Serverless Workflow y Function Compute, lo que las hace vulnerables a la inestabilidad de la red.
La invocación asíncrona con los patrones de integración de Serverless Workflow resuelve estos problemas y admite los siguientes escenarios:
Continuar con los pasos posteriores sin esperar a que finalice el paso actual.
Omitir el paso actual y avanzar al siguiente cuando se producen errores inesperados.
Escenarios
Serverless Workflow admite tres patrones para la invocación asíncrona de Function Compute: solicitud-respuesta (requestResponse), síncrono (sync) y espera de devolución de llamada (waitForCallback).
|
Patrón de integración |
Valor del parámetro pattern |
Escenario |
|
Patrón de solicitud-respuesta (patrón predeterminado) |
Flujo de ejemplo:
|
Tareas de larga duración donde los resultados de la ejecución no son relevantes. |
|
Patrón de sincronización |
Flujo de ejemplo:
|
Tareas de larga duración que podrían verse limitadas por control de flujo. |
|
Patrón de espera de devolución de llamada |
Flujo de ejemplo:
|
El flujo debe continuar independientemente de si el paso actual finaliza. Ejemplo: auditoría manual. |
Parámetros de servicio
En estos ejemplos, Serverless Workflow utiliza Function Compute como nodo de tarea. resourceArn especifica el servicio de destino y serviceParams configura la invocación. serviceParams admite:
InvocationType: el tipo de invocación de la función. Valores válidos:Sync(síncrono) yAsync(asíncrono).-
Opcional:
StatefulAsyncInvocationID: el ID de una invocación asíncrona con estado. Utilice este ID para localizar la tarea en la consola de Function Compute.NotaCuando
InvocationTypese establece enAsynccon un StatefulAsyncInvocationID, Serverless Workflow utiliza la invocación asíncrona con estado. El valor de StatefulAsyncInvocationID debe ser único en todas las funciones.
Patrones de integración
Patrón de solicitud-respuesta
Cuando el flujo de trabajo alcanza el paso especificado, Serverless Workflow invoca la función de forma asíncrona y continúa con el siguiente paso sin esperar una devolución de llamada ni la finalización de la ejecución.
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
En este ejemplo, la función se activa en el paso mytask. El flujo de trabajo avanza al siguiente paso de inmediato, independientemente de si la función ha terminado su ejecución.
Patrón de sincronización
Cuando el flujo de trabajo llega al paso indicado, Serverless Workflow invoca la función de manera asíncrona. El flujo de Serverless Workflow espera hasta recibir la notificación de que la ejecución de la función finalizó antes de continuar.
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
En este ejemplo, la función se activa en el paso mytask. El flujo de trabajo se suspende hasta que se le notifica que la ejecución de la función ha concluido.
El patrón de integración síncrona se comporta igual que la invocación síncrona de funciones. La única diferencia radica en el método de invocación.
Patrón de espera de devolución de llamada
Al alcanzar el paso especificado, Serverless Workflow invoca la función de forma asíncrona y transmite un token de tarea. El flujo de trabajo se suspende hasta que usted utilice dicho token para reportar el resultado de la ejecución, sin importar si la función ya finalizó.
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
En este caso, la función se desencadena en el paso mytask. El flujo de trabajo permanece suspendido hasta recibir una devolución de llamada mediante la operación de API ReportTaskSucceed o ReportTaskFailed. Esta devolución de llamada puede iniciarse en cualquier momento, haya terminado o no la ejecución de la función.
Ejemplo: invocación asíncrona de funciones
Serverless Workflow combina la invocación asíncrona con la invocación asíncrona con estado para escenarios tipo trabajo. Al habilitar ambas funcionalidades, es posible supervisar el estado de la ejecución y detenerla en cualquier momento. El siguiente fragmento de FDL muestra esta configuración en 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