Cuando se invoca una función de forma asíncrona, no existe un mecanismo integrado para saber si la ejecución terminó correctamente, con errores o si aún está en curso. El modo de tarea asíncrona resuelve este problema porque registra cada transición de estado de cada invocación, desde que entra a la cola hasta que finaliza o falla. Además, expone esos registros para realizar consultas y gestiones en tiempo real.
Con el modo de tarea habilitado, usted puede:
Consultar el estado actual de cualquier tarea en cualquier momento de su ciclo de vida.
Detener una tarea específica en ejecución mediante su identificador.
Evitar ejecuciones duplicadas al asignar un identificador de tarea único a cada invocación.
Monitorear la profundidad de la cola, la latencia de procesamiento y el uso de recursos por instancia.
Coordinar tareas en flujos de trabajo a gran escala con CloudFlow.
El modo de tarea añade una latencia mínima a las invocaciones y ejecuciones. Esta latencia no genera cargos. Para más detalles de facturación, consulte Billing overview.
Funcionamiento del modo de tarea
Cuando el modo de tarea está habilitado, Function Compute registra cada transición de estado de todas las invocaciones asíncronas. Después de enviar una tarea, ocurre lo siguiente:
Function Compute coloca el mensaje de invocación en la cola (estado: Enqueued).
El mensaje sale de la cola y espera una instancia disponible (estado: Processed).
Una instancia toma la tarea y la ejecuta (estado: Running).
La tarea pasa a un estado terminal: Succeeded, Failed, Stopped, Expired o Invalid.
Puede consultar el estado en cualquier paso mediante la consola, la API o Serverless Devs.
Límites
Sensibilidad a la latencia: deshabilite el modo de tarea si su aplicación requiere una latencia promedio de extremo a extremo menor a 100 ms.
Throughput: deshabilite el modo de tarea si necesita invocar funciones de forma asíncrona a miles de solicitudes por segundo (RPS) o más.
Periodo de retención: los registros de tareas se pueden consultar durante 7 días después de su creación.
Regiones compatibles: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), Singapore, UK (London), US (Silicon Valley), US (Virginia), Germany (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta), Thailand (Bangkok), Japan (Tokyo) y South Korea (Seoul).
Estados de las tareas
Function Compute rastrea los siguientes estados para cada tarea asíncrona:
|
Estado |
Descripción |
|
Enqueued |
El mensaje de invocación está en la cola y espera procesamiento. |
|
Processed |
El mensaje salió de la cola y la tarea espera su invocación. |
|
Running |
La tarea se está ejecutando en una instancia. |
|
Succeeded |
La tarea finalizó correctamente. |
|
Failed |
La tarea terminó con errores. |
|
Stopped |
La tarea se detuvo de forma manual. |
|
Stopping |
El sistema procesa una solicitud de detención. |
|
Expired |
El tiempo de vida (TTL) del mensaje caducó antes de procesar la tarea; el mensaje se descartó. |
|
Invalid |
No fue posible ejecutar la tarea; por ejemplo, porque se eliminó la función. |
|
Retrying |
Se reintenta la tarea tras un error de ejecución. El estado cambia a Running cuando inicia el reintento. |
Para obtener el estado actual de una tarea específica, llame a GetAsyncTask. Para filtrar tareas por estado u otras condiciones, llame a ListAsyncTasks.
Comparación con los trabajos de Kubernetes
Para ejecutar tareas asíncronas, puede usar la función de tareas asíncronas de Function Compute o los trabajos de Kubernetes. A continuación se comparan ambos enfoques.
|
Función |
Tareas de Function Compute |
Trabajos de Kubernetes |
|
Casos de uso |
Apropiado tanto para tareas en tiempo real de decenas de milisegundos como para tareas sin conexión de decenas de horas. |
Más indicado para tareas sin conexión con carga de trabajo fija y requisitos bajos de velocidad de envío y rendimiento en tiempo real. |
|
Observability de tareas |
Compatible. Ofrece observability integral que incluye registros, métricas como el conteo de tareas en cola, duración de la ruta de la tarea y consultas de estado. |
Requiere integrar manualmente software de código abierto. |
|
Escalado automático de instancias de tareas |
Compatible. Escala las instancias automáticamente según la cantidad de tareas en cola y la utilización de recursos. |
Exige implementar de forma manual el escalado y el balanceo de carga con una cola de tareas, lo cual aumenta la complejidad. |
|
Velocidad de escalado de instancias |
Del orden de milisegundos. |
Del orden de minutos. |
|
Utilización de recursos de las instancias |
Elija un tipo de instancia adecuado. Las instancias escalan de forma automática y la facturación se basa en la duración real del procesamiento, lo que da como resultado una alta utilización de recursos. |
Debe especificar el tipo y la cantidad de instancias al enviar un trabajo. El escalado automático y el balanceo de carga son difíciles de implementar, lo que provoca una baja utilización de recursos. |
|
Throughput de envío de tareas |
Un solo usuario puede enviar decenas de miles de tareas por segundo. |
Un clúster puede iniciar un máximo de unos cientos de trabajos por segundo. |
|
Envío programado o diferido |
Admite envíos programados y diferidos. |
Admite envíos programados, pero no diferidos. |
|
Deduplicación de tareas |
Compatible. |
No compatible. |
|
Finalizar una tarea específica |
Compatible. |
Compatibilidad limitada. Las tareas se finalizan de manera indirecta al detener las instancias de tareas. |
|
Limitación de tasa de tareas |
Compatible. La limitación se configura por usuario o por función. |
No compatible. |
|
Callbacks automáticos de resultados |
Compatible. |
No compatible. |
|
Costos de desarrollo y operación |
Solo necesita implementar la lógica de procesamiento de la tarea. |
Requiere mantener un clúster de Kubernetes. |
Habilitar el modo de tarea
Habilitar el modo de tarea al crear una función
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Function.
En la barra de navegación superior, seleccione una región. En la página Function, haga clic en Create Function.
En el cuadro de diálogo, seleccione Task Function y haga clic en Create. Establezca el nombre de la función y haga clic en Create.
Una vez creada la función, vaya a la página de detalles y haga clic en la pestaña Tasks. El modo de tarea se habilita de forma predeterminada.
Para conocer los detalles de configuración, consulte Create a task function.
Habilitar el modo de tarea en una función existente
Antes de empezar, asegúrese de haber creado una función. Consulte Create a function.
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.
En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función objetivo.
En la página de detalles de la función, haga clic en la pestaña Tasks y luego en Modify junto a Task Mode.
En el panel Task Mode, establezca Task Mode en Enable y haga clic en Deploy.
Habilitar el modo de tarea mediante la API
Llame a PutFunctionAsyncInvokeConfig con asyncTask establecido en true. Todas las invocaciones asíncronas posteriores de la función utilizarán el modo de tarea.
{
"asyncTask": true
}
Habilitar el modo de tarea no afecta las invocaciones síncronas. Este modo aplica únicamente a las invocaciones asíncronas.
Enviar una tarea
Enviar una tarea desde la consola
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.
En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función objetivo.
En la página de detalles de la función, haga clic en la pestaña Tasks y luego en Submit Task.
En el cuadro de diálogo, seleccione un método de generación de identificador de tarea, especifique la hora de ejecución y haga clic en OK.
Si desea pasar parámetros de prueba antes de enviar, haga clic en el ícono de flecha junto a Submit Task y seleccione Configure Test Parameters. En las funciones de eventos, los parámetros se pasan como carga útil del evento. En las funciones HTTP, se transmiten como parámetros HTTP.
Después del envío, la lista de tareas muestra Task Status, Task ID e Instance ID.
Enviar una tarea mediante la API
Llame a InvokeFunction con el encabezado x-fc-invocation-type establecido en Async. Para asignar un identificador de tarea personalizado con fines de deduplicación, incluya el encabezado x-fc-async-task-id.
Ejemplo: enviar una tarea y consultar su estado de forma periódica
A continuación se muestra el ciclo de vida completo para enviar una tarea asíncrona y consultar su estado hasta que finalice.
-
Habilite el modo de tarea en la función (configuración única):
PUT /2023-03-30/functions/{functionName}/async-invoke-config Content-Type: application/json { "asyncTask": true } -
Envíe la tarea con un identificador personalizado:
POST /2023-03-30/functions/{functionName}/invocations x-fc-invocation-type: Async x-fc-async-task-id: my-task-001 -
Consulte el estado de la tarea mediante su identificador:
GET /2023-03-30/functions/{functionName}/async-tasks/my-task-001La respuesta incluye el estado actual (
Enqueued,Running,Succeeded, etc.). Consulte este endpoint de forma periódica hasta que el estado alcance un valor terminal.
Para ver un ejemplo de código ejecutable que establece un identificador de tarea durante la invocación, consulte Ejemplo de InvokeFunction (sitio internacional).
Detener una tarea
Detener una tarea desde la consola
En la pestaña Tasks de la página de detalles de la función, ubique la tarea en la lista y deténgala.
Detener una tarea mediante la API
Llame a StopAsyncTask con el TaskID de la tarea. Para obtener el TaskID, llame a ListAsyncTasks.
Deduplicación de tareas
Function Compute utiliza un TaskID globalmente único para evitar ejecuciones duplicadas. Si un envío falla, por ejemplo debido a un tiempo de espera agotado, reintente con el mismo TaskID. Function Compute rechaza los envíos duplicados con un error 409.
Asigne un TaskID a cada tarea e incluya el encabezado x-fc-async-task-id en la solicitud de invocación. Use este identificador cuando reintente envíos fallidos.
Si establece RequestID sin definir TaskID, Function Compute asigna automáticamente el valor de TaskID como RequestID. Establezca TaskID directamente y deje RequestID sin definir.
Activar tareas con disparadores de eventos
Los siguientes disparadores admiten invocaciones asíncronas y pueden activar tareas asíncronas:
-
Disparadores integrados con EventBridge:
Establezca Invocation Method en Async Invocation para los disparadores HTTP y los disparadores integrados con EventBridge.
Monitorear tareas
Use las métricas de monitoreo de Function Compute para rastrear la profundidad de la cola de tareas, detectar errores y responder a tiempos de espera agotados en tiempo real.
Consultar métricas
Antes de empezar, asegúrese de haber creado una función. Consulte Create a function.
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.
En la barra de navegación superior, seleccione una región. En la página Function, haga clic en la función objetivo.
-
En la página de detalles de la función, haga clic en la pestaña Monitoring.
Haga clic en Function Metrics para consultar las métricas de invocación asíncrona: Asynchronous Invocation Processing (count), Asynchronous Invocation Processing Latency (ms), Asynchronous Invocation Trigger Events (count) y Asynchronous Requests Backlogs (count).
Haga clic en Instance Metrics para consultar el uso de recursos por instancia de las tareas asíncronas.
Las métricas por instancia requieren que la función de registros esté habilitada. Consulte Configure logging.
Para ver la lista completa de métricas de monitoreo, consulte Monitoring metrics.
Configurar reglas de alerta
Para configurar una alerta sobre una métrica, haga clic en el ícono de campana en la esquina superior derecha de la gráfica correspondiente. Defina las condiciones y el umbral de la alerta en el panel Create Metric-based Alert Rule y luego haga clic en OK.
Ejemplo: enviar una alerta de gravedad media cuando haya 5 o más invocaciones asíncronas acumuladas, entregada las 24 horas del día mediante DingTalk, correo electrónico, llamada telefónica y webhook.
Orquestar tareas con CloudFlow
Integre Function Compute con CloudFlow para coordinar tareas asíncronas en flujos de trabajo a gran escala. CloudFlow rastrea las transiciones de estado de cada tarea, aplica su lógica de reintentos y garantiza la ejecución confiable de los pasos predefinidos. Los estados de CloudFlow compatibles incluyen Pass, Map y Parallel.
Para conocer los detalles de integración, consulte Integrate with Function Compute.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una tarea asíncrona habilitada (consulte Habilitar el modo de tarea)
Acceso otorgado a CloudFlow para Function Compute. Consulte Use a function role to grant Function Compute permissions to access other cloud services
Crear y ejecutar un flujo de trabajo
Inicie sesión en la consola de CloudFlow. En la barra de navegación superior, seleccione una región.
En el panel de navegación izquierdo, haga clic en Workflows. En la página Workflows, haga clic en Create Workflow.
En el cuadro de diálogo Create Workflow, seleccione un método de creación y un modo de flujo de trabajo. CloudFlow admite dos modos: Standard y Express. Consulte Standard workflows and Express workflows y Create a workflow from a blank canvas para más detalles.
-
Defina el flujo de trabajo. En la esquina superior derecha de la página de detalles, haga clic en YAML. Introduzca la definición del flujo en el editor de código y haga clic en Save. El siguiente ejemplo invoca una función de Function Compute de forma asíncrona y espera a que termine antes de finalizar el flujo de trabajo (
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 el rol de ejecución. En la esquina superior derecha, haga clic en Configure Workflow. Seleccione un Execution Role y haga clic en Save.
NotaEl rol debe tener adjunta la directiva AliyunFCInvocationAccess.
En la página de detalles del flujo, haga clic en Execute para probar el flujo de trabajo.