5.3 KiB
5.3 KiB
一、 产品功能矩阵
| 维度 | 功能点 | 业务描述 |
|---|---|---|
| 流程建模 | 拓扑解析与保存 | 解析执行节点、串/并行网关及连线拓扑;支持流程模板版本管理。 |
| 节点配置映射 | 支持节点级参数配置,包括执行模式(自动/手动)与调用模式(同步/异步)。 | |
| 数据管理 | 参数快照 | 保存算例启动时的输入参数与仿真参数,支持运行中动态更新。 |
| 文件 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)
- 职责:解析
viewContentJSON。 - 逻辑:在算例实例化时,一次性计算每个节点的入度(依赖项)与出度(触发项),打平存储至
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.status;Dispatcher每次调度前校验此状态。
五、 待完成与深度设计 (To-be-discussed)
1. 物理取消与防回调重新激活
- 取消逻辑:取消算例时,需递归调用所有运行中节点的
Executor.cancel()(如 HPC 作业)。 - 防御机制:回调中心增加状态校验,若节点状态已为
CANCELLED,则丢弃后续回传的SUCCESS信号。
2. 精细化状态机
- 定义严格的状态跳转矩阵(例如:
SUCCESS节点禁止跳转回RUNNING,除非经过重置)。
3. 级联回退重试 (Rewind/Retry)
- 算法:从选定节点开始,通过
next_node_idsBFS(广度优先搜索) 找到所有子图节点。 - 清理:物理强杀运行中节点 -> 逻辑重置所有子图节点为
INIT-> 清理磁盘目录 -> 重新启动。