Saltar al contenido principal
DocumentoCorrerReanudación automática

Interrupción inesperada y reanudación automática.

¿Qué debo hacer si mi flujo de trabajo se interrumpe a mitad de camino? Equipado con recuperación e idempotente, reanude la descarga en los puntos de interrupción y evite efectos secundarios repetidos.

"Qué hacer si la ejecución no se completa de una vez" es una pregunta que el flujo de trabajo a nivel de producción debe responder. Braidrun ofrece dos soluciones de procesamiento:

  • Predeterminado: pausa segura — Marque la ejecución como INTERRUMPIDA y espere hasta que la vea claramente antes de "reintentar" manualmente desde un determinado paso en el medio.
  • Opcional: continuar ejecutando automáticamente — Después de declarar explícitamente "este flujo de trabajo puede continuar + qué pasos son idempotentes", la plataforma continuará automáticamente desde el punto de interrupción.
¿Qué significa interrumpir?

Dos categorías:

  • Lado de la plataforma: el servicio se reinicia, las instancias se reemplazan, el host falla. Estos tratamos de evitarlos, pero no el 100% de las veces.
  • De su lado, "cancela" activamente una ejecución (deténgase en CANCELADO, no INTERRUMPIDO).

Solo la categoría anterior ingresará al proceso de "continuación automática" y la ejecución de CANCELADO no se ejecutará automáticamente.

Comportamiento predeterminado: pausa segura

Cuando ocurre una interrupción en el lado de la plataforma, la plataforma:

  1. Marcar el estado de ejecución como INTERRUMPIDO;
  2. Conservar los resultados, productos y registros de todos los pasos completados;
  3. Recibirá una notificación en el sitio (el correo electrónico/Slack también se configurará de acuerdo con su notificación);
  4. Cuando vaya a la página de detalles de ejecución, puede "reintentar desde el paso fallido": la plataforma reutiliza los resultados del paso anterior.

Este valor predeterminado está disponible para todos los flujos de trabajo y no requiere configuración. Adecuado para:

  • El flujo de trabajo contiene efectos secundarios externos (enviar correos electrónicos/deducir dinero/modificar la base de datos)
  • Cuando la producción aún no está segura "si es seguro reiniciar y continuar funcionando"

Opcional: continuar ejecutando automáticamente

Si su flujo de trabajo es un proceso de datos puro (API de solo lectura + generación de informes), puede activar la continuación automática: después de que se produzca una interrupción, la plataforma continuará ejecutándose automáticamente desde el punto de interrupción, sin que usted tenga que hacer clic manualmente.

Opción de dos niveles habilitada

Para que la continuación automática surta efecto, debes declarar ambas capas en YAML:

  1. nivel de flujo de trabajo: Declaración recovery.autoResumeOnRestart: true
  2. nivel de paso: Instrucciones paso a paso para repeticiones seguras idempotent: true

Ejemplo completo

yaml
name: daily-asa-digest
version: "1.0.0"

recovery:
  autoResumeOnRestart: true
  policy: RESUME_FROM_LAST_INCOMPLETE
  maxAutoResumeAttempts: 3

steps:
  - id: fetch_asa_data
    type: sub_workflow
    module: dingyue-module-asa-fetch
    idempotent: true           # 只读拉取,可重跑

  - id: build_excel
    type: sub_workflow
    module: dingyue-module-excel-report
    idempotent: true           # 生成文件到产物目录,可重跑

  - id: notify_team
    type: sub_workflow
    module: dingyue-module-slack-deliver
    # 不写 idempotent —— 默认 false,发消息不可重跑

Tres políticas de recuperación

policysignificadoAdecuado para la escena
ABORTNo restaurar automáticamente equivale a volver al comportamiento predeterminado.fase de prueba
RESUME_FROM_LAST_INCOMPLETEPredeterminado. Vuelva a ejecutar desde el primer paso NO COMPLETADO.Canalizaciones de datos, agregaciones de API de solo lectura, computación pura
RESUME_FROM_STARTVuelva a ejecutar todo el flujo de trabajo desde ceroEscenarios en los que las fuentes de datos pueden cambiar durante las interrupciones y es necesario actualizarlas

idempotent Como marcar

El estándar de oro para determinar si un paso es idempotente:

"Si se ejecuta la misma entrada dos veces, ¿habrá efectos secundarios?"

Si puede (enviar mensajes externos, cobrar dinero, escribir pedidos), no agregue idempotente.

Propiedades del pasoidempotent
Consulta API de solo lectura (extraer informe, enumerar aplicaciones)✓ true
Cálculo puro/conversión de datos✓ true
Generar Markdown/Excel al directorio de productos✓ true(Los productos antiguos se eliminarán antes de volver a ejecutarlos)
Inferencia LLM (herramienta sin efectos secundarios)✓ true(Los tokens se recalcularán, pero serán semánticamente seguros)
Enviar correo electrónico / Telegram / Slack / Feishu✗ false
Escribir en base de datos externa/Cambiar oferta de anuncio/Realizar pedido/Débito✗ false
Llamadas salientes de webhook✗ false(A menos que el otro punto final elimine explícitamente los duplicados)
manual_approval✗ false(Al continuar con la ejecución, se volverá a hacer ping al aprobador, lo cual es una mala experiencia)
El valor predeterminado es falso: la seguridad es lo primero

Si no se escribe idempotente, el valor predeterminado es falso. RESUME_FROM_LAST_INCOMPLETE bajará a ABORT cuando encuentre un paso no idempotente; no se ejecutará automáticamente, dejando que usted lo haga manualmente.

Varias situaciones que no ocurrirán durante la continuación automática.

Incluso si configura la recuperación, las siguientes ejecuciones aún no continuarán ejecutándose automáticamente:

  • La fuente de activación es un Webhook: la carga útil del Webhook puede realizarse como máximo una vez y la plataforma no sabe si el flujo ascendente volverá a intentarlo.
  • La fuente de activación es el Programador: el programador se reactivará en la siguiente ronda de cron.
  • Actualmente detenido en manual_approval: esperar aprobación significa que está bloqueado originalmente.
  • El archivo de definición del flujo de trabajo se modificó durante la interrupción: la plataforma detectó una discrepancia en el hash y no está segura de si la nueva versión es compatible.

Manual "Reintentar desde un paso" (disponible en cualquier momento)

Independientemente de si el flujo de trabajo está configurado con recuperación o no, la página de detalles de ejecución siempre proporciona un botón "Reintentar desde paso fallido":

  1. Abrir una ejecución INTERRUMPIDA/FALLADA;
  2. Haga clic en "Reintentar desde este paso" junto al paso fallido/interrumpido;
  3. Se reutilizará el resultado del paso COMPLETADO anteriormente; este paso comienza a ejecutarse nuevamente.

Incluso si el paso no es idempotente, puede volver a intentarlo manualmente, porque es entonces cuando usted, como ser humano, decide conscientemente que "vale la pena volver a ejecutarlo".

Continuar ejecutando el límite

Evita que el sistema reinicie la misma ejecución en un "bucle infinito": cada ejecución continuará ejecutándose automáticamente hasta 3 veces. Si aún falla, deténgase y espere a que lo solucione. Puede anular (1-20) en recovery.maxAutoResumeAttempts.

Auditoría

Los eventos de auditoría se registrarán cada vez que se realice la continuación automática:

  • execution.auto_resume — Continuó funcionando con éxito
  • execution.auto_resume.skipped — Según las reglas no debes seguir corriendo, con razón.

El administrador puede filtrar y ver los registros de auditoría por estos dos tipos de eventos.

Sugerencias prácticas

  • Canalización de datos puros (ASA diario, resumen RSS): recuperación completa + idempotente, tenga la seguridad de que continuará ejecutándose automáticamente.
  • Si hay efectos secundarios externos (deducciones, envío de mensajes, realización de pedidos): no abra la reanudación automática. Interrumpir la toma de decisiones humanas.
  • Agregue manual_approval antes de los pasos clave de efectos secundarios: la aprobación en sí misma es un "punto de bloqueo natural" para la ejecución discontinua.

Siguiente paso