跳到主要内容

🌊 工作流与任务编排

👤 适合谁:业务负责人 / 流程设计者 / 复杂业务架构师
⏱️ 阅读时长:约 8 分钟
💡 一句话:单个工作流是单条线,多个工作流编排起来才是企业级业务。

工作流是 YingCore 执行单个任务的路径图——从触发到完成,按节点一步步走完。但真实业务远比单条工作流复杂:客户入职要走 4 个工作流(注册→配置→培训→激活),还要在不同部门间传递数据。任务编排就是把这些工作流按业务关系组合成完整流程,既能复用又能治理。

核心理念:从单条路径到流程网络

YingCore 的工作流是基础积木,任务编排是把积木拼成城堡:

任务编排的三大价值:复用(工作流可独立维护)/组合(复杂业务可拆解)/治理(跨流程可监控)。

五种编排模式

任何复杂业务流都是这五种基本模式的组合:

模式关系适用场景典型例子
➡️ 顺序A → B → C强依赖的串行注册 → 审核 → 通过
并行A | B | C无依赖的同时同步邮件、短信、IM 通知
🔀 条件A → 条件 → B/C根据结果分支通过走 B,不通过走 C
🔁 循环A → 循环 → A反复执行至达标审核不通过反复重写
🛑 异常A → 异常处理失败兜底任意步骤失败走应急流程

模式 1:顺序执行

工作流按定义顺序依次执行,上一步的输出作为下一步的输入:

orchestration:
type: sequence
steps:
- workflow: customer-register
output_to: register_result
- workflow: customer-verify
input_from: register_result
- workflow: customer-activate
input_from: verify_result

模式 2:并行执行

多个工作流同时启动,结果汇合后再走下一步:

orchestration:
type: parallel
steps:
- parallel:
- workflow: send-email
- workflow: send-sms
- workflow: send-im
join: all_completed
- workflow: log-notification
input_from: parallel_results

模式 3:条件分支

根据条件选择不同分支,支持嵌套:

orchestration:
type: branch
steps:
- workflow: credit-check
- branch:
if: score >= 80
then: workflow: fast-approve
else:
if: score >= 60
then: workflow: manual-review
else: workflow: reject

模式 4:循环重试

反复执行直到满足退出条件,达到上限后走兜底:

orchestration:
type: loop
workflow: auto-fix-bug
condition: build_status == success
max_iterations: 5
on_exhausted: workflow: notify-human

模式 5:异常兜底

任意步骤失败时走应急流程,避免业务中断:

orchestration:
type: try-catch
try:
- workflow: pay-order
- workflow: deduct-inventory
catch:
workflow: rollback-and-notify
notify: [财务, 客服]

核心机制:编排的四块基石

任务编排的稳定运行依赖四个机制:

1️⃣ 变量传递

工作流之间的数据通过变量传递,支持嵌套和映射:

{
"outputs": {
"register_result.customer_id": "C-2025-001",
"register_result.email": "user@example.com",
"register_result.created_at": "2025-09-01T10:00:00Z"
}
}

下游工作流引用:

- workflow: send-welcome
inputs:
customer_id: $outputs.register_result.customer_id
email: $outputs.register_result.email

2️⃣ 上下文继承

子工作流自动继承父编排的上下文(项目、客户、环境),无需重复传递:

3️⃣ 错误传播

子工作流失败时,错误向上传播并附带完整上下文:

{
"error": {
"workflow": "credit-check",
"step": "query-database",
"message": "数据库连接超时",
"context": {
"customer_id": "C-2025-001",
"retry_count": 3
}
}
}

4️⃣ 资源隔离

每个编排实例拥有独立的资源配额,避免相互影响:

资源隔离方式
数据库连接每个编排实例独立连接池
内存单实例内存上限 1GB
并发数单租户编排并发上限可配置
超时全局超时 + 单工作流超时双层保护

完整场景示例:客户入职全流程

某 SaaS 产品新客户入职需要 4 个工作流协同,外加延迟触发的分析工作流:

YAML 完整编排配置:

# customer-onboarding.yaml
orchestration:
name: 客户入职
trigger: webhook
timeout: 24h
on_error: notify-admin

steps:
- id: register
workflow: customer-register
input: $trigger.payload
output: customer_info

- id: provision
workflow: resource-provision
input: $steps.register.output
output: resource_info
depends_on: register

- id: training
workflow: user-training
input: $steps.provision.output
output: training_record
depends_on: provision
timeout: 8h

- id: activation
workflow: activation-campaign
input: $steps.training.output
depends_on: training
delay: 1d

- id: analysis
workflow: usage-analysis
input: $steps.activation.output
depends_on: activation
delay: 7d

error_handling:
catch_all:
workflow: notify-admin
notify: [运营, 客服, 技术]
retry_policy:
max_attempts: 3
backoff: exponential

执行流程一览:

步骤工作流输入输出耗时异常处理
1customer-registerwebhook 载荷客户信息~10s进入 notify-admin
2resource-provision客户信息资源 ID~5min自动重试 3 次
3user-training资源 ID培训记录~8h超时进入 notify-admin
4activation-campaign培训记录触达日志~1min延迟 1 天触发
5usage-analysis触达日志分析报告~30s延迟 7 天触发

关键参数

参数类型说明
orchestrationobject编排配置根
triggerstring编排触发方式
steps[].idstring步骤唯一标识
steps[].depends_onarray依赖的上游步骤
steps[].delayduration启动延迟
steps[].timeoutduration单步骤超时
on_errorstring全局错误处理
retry_policyobject重试策略
error_handlingobject异常分支配置

最佳实践

实践说明
🎯 编排粒度适中单次编排 3-7 个工作流,超出要拆
➡️ 关键路径用顺序强依赖必须保证时序
独立任务用并行节省时间,提高吞吐
🔁 异常分支必须每个编排都有兜底流程
👤 关键节点留审批涉及金额、合规等必须有人审
📊 全链路可视化编排状态实时可查,出问题秒定位
🛑 双层超时全局 + 单步骤双层保护,避免单点卡死
💰 资源配额治理限制单租户编排并发数,避免资源抢占
🔍 失败时记录上下文出错时把上下文快照存下来,便于排查
🔄 可重入设计同一编排支持幂等重跑,不出副作用

下一步

任务编排让多个工作流组合成完整业务。深入了解 🛡️ 平台管理 中如何管控编排的权限、审计和资源配额。