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 是工作流实例的“背包”,所有节点均可读写,是数据传递的唯一通道。
核心概念关系图:从定义到运行时 Task(任务定义) Workflow(流程定义) Context(上下文定义) Node(节点) Edge(边) State(运行时状态) 被引用 包含 定义 连接 驱动 注入 共享数据 定义层 编排层 运行时层

2.3 状态机与生命周期

每个工作流实例和任务实例都遵循一个有限状态机模型。状态转换由引擎核心驱动,确保流程的可观测性和可靠性。

工作流实例状态

  • INIT:实例已创建,等待调度。
  • RUNNING:至少一个节点正在执行。
  • SUSPENDED:流程因等待外部输入或条件不满足而暂停。
  • SUCCEEDED:所有节点执行成功,流程正常结束。
  • FAILED:节点执行失败且无补偿策略,流程终止。
  • TERMINATED:被手动终止或超时强制结束。

任务实例状态

  • PENDING:等待被调度器分配。
  • RUNNING:任务正在执行中。
  • SUCCEEDED:任务执行成功,输出已写入上下文。
  • FAILED:任务抛出异常或返回错误码。
  • RETRYING:引擎根据重试策略自动重新调度。
  • TIMEOUT:执行时间超过配置阈值。
设计要点: 状态转换必须是幂等的。引擎通过乐观锁或分布式事务确保在并发场景下状态不会错乱。例如,从 RUNNING 到 SUCCEEDED 的转换,必须校验当前状态确实是 RUNNING。

2.4 上下文传递机制

上下文(Context)是工作流实例的“共享内存”。它采用 键值对(Key-Value) 结构,并支持以下特性:

  • 作用域隔离: 每个工作流实例拥有独立的上下文,互不干扰。
  • 节点级读写: 上游节点写入的数据,下游节点可以读取。引擎保证写后读的可见性。
  • 快照与回滚: 在关键节点执行前,引擎会对上下文进行快照。如果后续节点失败并触发回滚,可以恢复到快照点。
  • 序列化传输: 上下文数据会被序列化为 JSON 或 Protobuf,在分布式节点间传递。
上下文传递与状态转换示例(IAM 用户创建流程) 创建用户 状态: RUNNING 分配角色 状态: PENDING 发送通知 状态: PENDING 工作流上下文(Context) userId: "u-12345" userName: "zhangsan" roleIds: ["admin", "dev"] email: "zhangsan@company.com" notifyStatus: "sent" workflowState: "SUCCEEDED" 写入 userId 写入 roleIds 写入 notifyStatus

2.5 概念关系总结

在 IAM 异步任务编排引擎中,这六个核心概念形成了一个从 定义 到 编排 再到 运行时 的完整闭环:

  1. 设计时: 开发者定义 Task 和 Context 结构,使用 Node 和 Edge 组装成 Workflow。
  2. 运行时: 引擎实例化 Workflow,为每个实例分配独立的 Context,并根据 Edge 的指向调度 Node 执行对应的 Task。
  3. 观测时: 每个 Node 和 Workflow 实例的 State 变化被持久化,用于监控、告警和事后审计。
常见误区: 不要将 Task 与 Node 混为一谈。Task 是纯业务逻辑,Node 是流程中的占位符。一个 Task 可以被多个 Node 在不同工作流中复用。例如,“发送邮件” Task 可以在“审批通过通知” Node 和“异常告警通知” Node 中分别使用。