Files
spdm-backend/flowable/流程产品设计.md
2026-03-30 11:54:17 +08:00

5.3 KiB
Raw Blame History

一、 产品功能矩阵

维度 功能点 业务描述
流程建模 拓扑解析与保存 解析执行节点、串/并行网关及连线拓扑;支持流程模板版本管理。
节点配置映射 支持节点级参数配置,包括执行模式(自动/手动)与调用模式(同步/异步)。
数据管理 参数快照 保存算例启动时的输入参数与仿真参数,支持运行中动态更新。
文件 I/O 管控 自动初始化本地磁盘执行空间;支持基于规则的前序输出文件自动筛选。
执行控制 多样化启动 支持“一键全量启动”与“指定任意节点启动”。
精细化状态机 流程与节点两级状态管控(待执行/执行中/暂停/完成/异常/取消)。
异常恢复 双重重试机制 支持“当前节点原位重试”与“前置节点回退重试”。
人工干预 支持“强制放行/跳过”失败节点。

二、 核心数据库设计 (Database Schema)

1. 流程模板表 simulation_flow_template

  • uuid: 模板唯一标识(替代原 processDefinitionId)。
  • viewContent: 静态拓扑 JSON节点、连线、网关
  • approveFlowId: 关联的审批流 ID。

2. 流程实例表 (算例表) simulation_run

  • uuid: 算例唯一标识(替代原 processInstanceId)。
  • status: 总状态INIT, RUNNING, SUSPENDED, SUCCESS, ERROR, CANCELLED
  • viewContent: 实例运行快照(启动时从模板拷贝,保证运行中不受模板修改影响)。
  • progress: totalStep / currentStep / currentStepName
  • paramJson: 流程全局启动参数。

3. 流程节点实例表 simulation_flow_node

  • runId / nodeId: 联合主键。
  • pre_node_ids / next_node_ids: 存储入度与出度 ID 列表。
  • status: 节点状态(含 WAITING_CALLBACK, WAITING_USER 等中间态)。
  • inputDirId / outPutDirId: 物理 I/O 目录关联。
  • paramJson: 节点局部配置参数(含 isAsync, executeMode)。
  • requestJson / resultJson: 记录执行器入参及回调/执行结果。

三、 系统核心组件 (Core Components)

1. 解析与构建器 (Parser)

  • 职责:解析 viewContent JSON。
  • 逻辑:在算例实例化时,一次性计算每个节点的入度(依赖项)与出度(触发项),打平存储至 simulation_flow_node,后续流转不再解析 JSON。

2. 调度推进器 (Dispatcher)

  • 核心动作
    • 寻找下游:节点 SUCCESS 后,获取其 next_node_ids
    • 并行汇聚 (AND-Join):检查下游节点的所有 pre_node_ids 是否全部为 SUCCESS
  • 并发控制:采用 Redisson 分布式锁 (锁粒度: runId + targetNodeId) + 状态机 CAS (INIT -> RUNNING),防止并行分支冲突导致节点重复执行。

3. 执行器工厂 (Executor Factory)

  • IProcessExecutor 接口:定义 execute(执行)与 cancel(强杀)。
  • 算子实现
    • HpcExecutor:提交 HPC 任务,更新状态为 WAITING_CALLBACK
    • LocalAppExecutor:拉起本地应用,支持同步或异步模式。

4. 异步回调中心 (Callback Center)

  • 职责接收外部系统HPC/本地应用)的结果回传。
  • 逻辑:更新节点状态与 resultJson -> 判定 SUCCESS -> 唤醒 Dispatcher.dispatchNext()

四、 关键业务逻辑流转

1. 执行模式管控 (Auto vs Manual)

  • 触发点Dispatcher 准备唤醒节点前。
  • 逻辑:检查 executeMode,若为 MANUAL 则将状态设为 WAITING_USER 并停机;待用户调用 /continueServiceTask 后,再由 ExecutorFactory 真正拉起。

2. 调用模式管控 (Async vs Sync)

  • 触发点Executor.execute() 内部。
  • 逻辑
    • isAsync: true -> 记录异步任务,节点设为 WAITING_CALLBACK,释放线程。
    • isAsync: false -> 执行完逻辑后立即将状态设为 SUCCESS,手动触发 Dispatcher

3. 异常管控与干预

  • 强制放行:手动将 ERROR 节点改为 SUCCESS,由管理员触发 Dispatcher 继续向下。
  • 重试节点:将 ERROR 改回 INIT,清理旧数据,由 ExecutorFactory 重新拉起。
  • 暂停/恢复:修改 simulation_run.statusDispatcher 每次调度前校验此状态。

五、 待完成与深度设计 (To-be-discussed)

1. 物理取消与防回调重新激活

  • 取消逻辑:取消算例时,需递归调用所有运行中节点的 Executor.cancel()(如 HPC 作业)。
  • 防御机制:回调中心增加状态校验,若节点状态已为 CANCELLED,则丢弃后续回传的 SUCCESS 信号。

2. 精细化状态机

  • 定义严格的状态跳转矩阵(例如:SUCCESS 节点禁止跳转回 RUNNING,除非经过重置)。

3. 级联回退重试 (Rewind/Retry)

  • 算法:从选定节点开始,通过 next_node_ids BFS广度优先搜索 找到所有子图节点。
  • 清理:物理强杀运行中节点 -> 逻辑重置所有子图节点为 INIT -> 清理磁盘目录 -> 重新启动。