2. 核心概念:任务、工作流、节点、边、状态、上下文的定义与关系
在 IAM 异步任务编排引擎中,核心概念是构建一切复杂流程的基石。理解 任务(Task)、工作流(Workflow)、节点(Node)、边(Edge)、状态(State) 和 上下文(Context) 的定义及其相互关系,是掌握引擎架构的第一步。这些概念共同构成了一个可描述、可执行、可观测的编排模型。
2.1 核心概念定义
| 概念 | 英文 | 定义 | IAM 场景示例 |
|---|---|---|---|
| 任务 | Task | 引擎调度的最小执行单元,封装了具体的业务逻辑(如 RPC 调用、数据库操作、消息发送)。 | “调用 LDAP 同步接口”、“发送权限变更通知邮件”、“更新用户缓存”。 |
| 工作流 | Workflow | 一个完整的业务编排流程定义,由多个节点和边组成的有向无环图(DAG)。 | “新员工入职权限开通流程”、“跨系统角色同步流程”。 |
| 节点 | Node | 工作流图中的顶点,代表一个执行步骤。节点可以是一个具体的任务,也可以是一个子工作流或决策网关。 | “创建用户账号节点”、“审批判断节点”、“调用下游系统节点”。 |
| 边 | Edge | 连接节点的有向连线,定义了节点间的执行顺序和数据流转路径。 | “用户创建成功后,边指向角色分配节点”;“审批拒绝时,边指向流程终止节点”。 |
| 状态 | State | 工作流或任务实例在生命周期中的瞬时快照,用于追踪执行进度和结果。 | “待执行”、“运行中”、“成功”、“失败”、“超时”、“已回滚”。 |
| 上下文 | Context | 贯穿整个工作流实例的生命周期数据容器,用于在节点间传递参数、共享临时数据。 | “用户 ID”、“请求追踪 ID”、“上一个节点的输出结果”、“全局配置参数”。 |
关键区分: 任务(Task)是“做什么”的逻辑定义;节点(Node)是“在哪里做”的流程占位符;工作流(Workflow)是“按什么顺序做”的完整蓝图。
2.2 概念关系与编排模型
这六个概念并非孤立存在,它们通过以下关系构成一个完整的编排体系:
- 工作流包含节点和边: 一个 Workflow 由一组 Node 和连接它们的 Edge 组成,形成 DAG 结构。
- 节点引用任务: 每个执行类型的 Node 内部引用一个具体的 Task 定义。一个 Task 可以被多个 Node 引用。
- 边决定流转: Edge 不仅定义了顺序,还可以携带条件表达式(Condition),实现分支、并行、聚合等复杂编排模式。
- 状态附着于实例: State 属于运行时的 Workflow 实例或 Task 实例,而非定义本身。
- 上下文贯穿全局: Context 是工作流实例的“背包”,所有节点均可读写,是数据传递的唯一通道。
2.3 状态机与生命周期
每个工作流实例和任务实例都遵循一个有限状态机模型。状态转换由引擎核心驱动,确保流程的可观测性和可靠性。
工作流实例状态
- INIT:实例已创建,等待调度。
- RUNNING:至少一个节点正在执行。
- SUSPENDED:流程因等待外部输入或条件不满足而暂停。
- SUCCEEDED:所有节点执行成功,流程正常结束。
- FAILED:节点执行失败且无补偿策略,流程终止。
- TERMINATED:被手动终止或超时强制结束。
任务实例状态
- PENDING:等待被调度器分配。
- RUNNING:任务正在执行中。
- SUCCEEDED:任务执行成功,输出已写入上下文。
- FAILED:任务抛出异常或返回错误码。
- RETRYING:引擎根据重试策略自动重新调度。
- TIMEOUT:执行时间超过配置阈值。
设计要点: 状态转换必须是幂等的。引擎通过乐观锁或分布式事务确保在并发场景下状态不会错乱。例如,从 RUNNING 到 SUCCEEDED 的转换,必须校验当前状态确实是 RUNNING。
2.4 上下文传递机制
上下文(Context)是工作流实例的“共享内存”。它采用 键值对(Key-Value) 结构,并支持以下特性:
- 作用域隔离: 每个工作流实例拥有独立的上下文,互不干扰。
- 节点级读写: 上游节点写入的数据,下游节点可以读取。引擎保证写后读的可见性。
- 快照与回滚: 在关键节点执行前,引擎会对上下文进行快照。如果后续节点失败并触发回滚,可以恢复到快照点。
- 序列化传输: 上下文数据会被序列化为 JSON 或 Protobuf,在分布式节点间传递。
2.5 概念关系总结
在 IAM 异步任务编排引擎中,这六个核心概念形成了一个从 定义 到 编排 再到 运行时 的完整闭环:
- 设计时: 开发者定义 Task 和 Context 结构,使用 Node 和 Edge 组装成 Workflow。
- 运行时: 引擎实例化 Workflow,为每个实例分配独立的 Context,并根据 Edge 的指向调度 Node 执行对应的 Task。
- 观测时: 每个 Node 和 Workflow 实例的 State 变化被持久化,用于监控、告警和事后审计。
常见误区: 不要将 Task 与 Node 混为一谈。Task 是纯业务逻辑,Node 是流程中的占位符。一个 Task 可以被多个 Node 在不同工作流中复用。例如,“发送邮件” Task 可以在“审批通过通知” Node 和“异常告警通知” Node 中分别使用。