21 KiB
VWED任务系统 - 系统架构设计
1. 整体架构图
┌─────────────────────────────────────────────────────────────────────────────────┐ │ 客户端层 │ ├─────────────────┬─────────────────┬──────────────────┬───────────────────┬──────┘ │ 任务管理界面 │ 任务创建界面 │ 任务编辑界面 │ 任务监控与执行 │ │ - 任务列表 │ - 基本信息表单 │ - 低代码编辑器 │ - 执行状态监控 │ │ - 状态筛选 │ - 任务类型选择 │ - 预设组件库 │ - 执行记录查看 │ │ - 导入/导出 │ │ - 流程设计工具 │ │ └─────────┬───────┴─────────┬───────┴───────┬──────────┴────────┬──────────┘ │ │ │ │ ┌─────────▼─────────────────▼───────────────▼────────────────────▼───────────────┐ │ 业务逻辑层 │ ├────────────────┬────────────────┬────────────────┬────────────────┬─────────────┤ │ 任务定义模块 │ 任务执行模块 │ 组件管理模块 │ 参数配置模块 │ 模板配置 │ │ - 任务创建 │ - 任务调度 │ - 组件选择 │ - 参数设置 │ - 模板创建 │ │ - 任务配置 │ - 状态管理 │ - 组件逻辑 │ - 参数验证 │ - 模板管理 │ │ - 任务编辑 │ - 子任务控制 │ - 参数配置 │ - 预设表达式 │ - 版本控制 │ └────────┬───────┴────────┬───────┴────────┬───────┴────────┬───────┴──────┬──────┘ │ │ │ │ │ ┌────────▼────────────────▼────────────────▼────────────────▼──────────────▼──────┐ │ 数据访问层 │ ├────────────────┬────────────────┬────────────────┬────────────────┬─────────────┤ │ 任务定义DAO │ 任务记录DAO │ 任务块记录DAO │ 数据缓存DAO │ 模板DAO │ └────────┬───────┴────────┬───────┴────────┬───────┴────────┬───────┴──────┬──────┘ │ │ │ │ │ ┌────────▼────────────────▼────────────────▼────────────────▼──────────────▼──────┐ │ 数据存储层 │ ├────────────────┬────────────────┬────────────────┬────────────────┬─────────────┤ │ vwed_taskdef │ vwed_taskrecord│vwed_blockrecord│vwed_datacache│vwed_task │ │ (任务定义表) │ (任务记录表) │ (任务块记录表) │ (数据缓存表) │template表 │ └────────────────┴────────────────┴────────────────┴────────────────┴─────────────┘ │ │ │ │ │ ┌────────▼────────────────▼────────────────▼────────────────▼──────────────▼──────┐ │ 集成服务层 │ ├────────────────┬────────────────┬────────────────┬────────────────┬─────────────┤ │ AGV控制接口 │ 站点管理接口 │ 设备接口 │ 外部系统接口 │ 认证服务 │ └────────────────┴────────────────┴────────────────┴────────────────┴─────────────┘
2. 系统模块拆分
2.1 核心模块
模块名称 | 功能描述 | 优先级 | 依赖模块 |
---|---|---|---|
任务管理模块 | 提供任务的CRUD操作,包括任务列表、筛选、搜索、导入导出功能 | 高 | 数据访问层 |
任务创建模块 | 创建新任务,设置基本信息和任务类型 | 高 | 任务管理模块,模板配置模块 |
任务定义模块 | 定义任务结构、存储任务流程和逻辑 | 高 | 数据访问层 |
任务执行模块 | 处理任务的执行、调度和状态管理 | 高 | 任务定义模块,AGV控制接口 |
低代码编辑器 | 可视化任务流程设计器,预设组件拖拽配置 | 高 | 组件管理模块 |
组件管理模块 | 管理预设组件集合,提供组件选择和参数配置 | 高 | 无 |
2.2 扩展模块
模块名称 | 功能描述 | 优先级 | 依赖模块 |
---|---|---|---|
模板配置模块 | 创建和管理任务模板,维护模板版本 | 中 | 任务定义模块 |
参数配置模块 | 为预设组件提供参数配置界面,支持预设表达式 | 中 | 组件管理模块 |
库位组件模块 | 管理库位操作相关的预设组件集合 | 中 | 组件管理模块,站点管理接口 |
机器人调度模块 | 管理机器人调度相关的预设组件集合 | 中 | 组件管理模块,AGV控制接口 |
业务管理模块 | 管理业务规则,提供业务配置界面 | 中 | 任务管理模块 |
2.3 基础设施模块
模块名称 | 功能描述 | 优先级 | 依赖模块 |
---|---|---|---|
数据访问层 | 封装对数据库的访问,提供统一接口 | 高 | 无 |
AGV控制接口 | 提供与AGV交互的接口 | 高 | 无 |
站点管理接口 | 提供库位/站点的管理接口 | 高 | 无 |
设备接口 | 提供与外部设备通信的接口 | 中 | 无 |
认证授权模块 | 用户认证与权限管理 | 中 | 无 |
3. 任务调度系统架构
3.1 调度器架构图
┌─────────────────────────────────────────────────────────────────────────────────┐ │ 任务调度系统 │ ├───────────────────┬─────────────────────┬──────────────────┬────────────────────┤ │ 调度器核心 │ 工作线程池 │ 任务队列 │ 状态管理 │ │ - 任务分配逻辑 │ - 并发任务处理 │ - 优先级队列 │ - 任务状态跟踪 │ │ - 生命周期管理 │ - 资源隔离 │ - 延迟任务处理 │ - 失败处理机制 │ │ - 负载均衡 │ - 线程数控制 │ - 队列监控 │ - 状态通知 │ └─────────┬─────────┴──────────┬──────────┴────────┬─────────┴─────────┬──────────┘ │ │ │ │ ┌─────────▼────────────────────▼───────────────────▼────────────────────▼──────────┐ │ 执行引擎层 │ ├───────────────────┬─────────────────────┬──────────────────┬────────────────────┤ │ 任务执行器 │ 组件执行器 │ 异步IO管理 │ 资源管理 │ │ - 任务解析 │ - 组件加载 │ - 非阻塞操作 │ - 内存限制 │ │ - 执行上下文 │ - 参数验证 │ - 超时控制 │ - CPU使用监控 │ │ - 错误处理 │ - 结果处理 │ - 事件循环 │ - 资源释放 │ └───────────────────┴─────────────────────┴──────────────────┴────────────────────┘
3.2 调度系统关键组件
组件名称 | 功能描述 | 技术实现 |
---|---|---|
任务调度器 | 核心调度组件,负责任务分派和执行控制 | asyncio + 自定义调度算法 |
工作线程池 | 管理固定数量的工作线程,处理并发任务 | ThreadPoolExecutor,线程数: 5 |
任务队列 | 存储待执行任务,支持优先级和延迟执行 | asyncio.Queue + 优先级算法 |
状态追踪器 | 记录和更新任务状态,提供实时状态查询 | 内存缓存 + 数据库持久化 |
执行上下文 | 为任务提供执行环境和参数传递机制 | 上下文管理器模式 |
异常处理器 | 捕获和处理任务执行过程中的异常 | try-except + 重试机制 |
3.3 调度系统工作流程
-
任务提交阶段: API层 → TaskEditService/TaskService → 任务调度器(scheduler) → 任务队列
-
任务调度阶段: 任务调度器 → 工作线程池分配 → 执行上下文创建 → 任务执行器
-
任务执行阶段: 任务执行器 → 组件执行器 → 业务逻辑处理 → 状态更新
-
任务完成阶段: 任务执行器 → 状态追踪器 → 数据库更新 → 任务调度器(下一任务)
3.4 并发控制与资源管理
- 线程池大小: 系统配置工作线程数为5,表示最多同时执行5个任务
- 任务排队机制: 超过并发上限的任务进入队列等待,按优先级和提交顺序排序
- 资源隔离: 每个工作线程独立执行任务,防止任务间相互干扰
- 负载均衡: 调度器根据线程负载情况,合理分配任务以优化系统资源利用
3.5 调度系统优势
- 高性能: 利用异步编程和线程池实现高效任务处理
- 可靠性: 完善的错误处理和状态管理机制,防止任务丢失
- 可扩展性: 支持动态调整线程池大小,适应不同负载场景
- 灵活性: 支持任务优先级,可根据业务需求调整执行顺序
- 可监控性: 提供详细的任务执行状态和统计信息,便于系统监控和问题排查
3.6 调度系统与应用生命周期集成
# 应用启动时初始化调度器
@app.on_event("startup")
async def startup():
# 初始化任务调度器
await scheduler.start(worker_count=5)
logger.info("任务调度器已启动,工作线程数: 5")
# 应用关闭时停止调度器
@app.on_event("shutdown")
async def shutdown():
# 停止任务调度器
await scheduler.stop()
logger.info("任务调度器已停止")
3.7 增强版任务调度系统
为满足系统不断增长的任务处理需求和更高的可靠性要求,我们设计并实现了增强版任务调度系统,采用模块化设计,大幅提升了系统的性能、可靠性和可扩展性。
3.7.1 增强版调度系统架构图
┌─────────────────────────────────────────────────────────────────────────────────┐ │ 增强版任务调度系统 │ ├───────────────────┬─────────────────────┬──────────────────┬────────────────────┤ │ EnhancedScheduler │ PriorityQueueManager│ WorkerManager │PeriodicTaskManager │ │ - 调度器核心 │ - 多级优先级队列 │ - 动态工作线程池 │ - 高级定时任务 │ │ - 组件协调 │ - 动态阈值调整 │ - 心跳监控 │ - Cron表达式支持 │ │ - 任务分发 │ - 平衡调度策略 │ - 自动扩缩容 │ - 周期任务管理 │ └─────────┬─────────┴──────────┬──────────┴────────┬─────────┴─────────┬──────────┘ │ │ │ │ ┌─────────▼────────────────────▼───────────────────▼────────────────────▼──────────┐ │ 支撑服务层 │ ├───────────────────┬─────────────────────┬──────────────────┬────────────────────┤ │TaskPersistenceManager│ 任务执行器 │ 健壮性服务 │ 监控系统 │ │ - 队列持久化 │ - 超时控制 │ - 异常恢复机制 │ - 实时状态监控 │ │ - 备份与恢复 │ - 重试机制 │ - 僵尸任务清理 │ - 资源使用跟踪 │ │ - 故障恢复 │ - 资源控制 │ - 心跳检测 │ - 性能指标统计 │ └───────────────────┴─────────────────────┴──────────────────┴────────────────────┘
3.7.2 增强版调度系统核心组件
组件名称 | 功能描述 | 技术特点 |
---|---|---|
EnhancedTaskScheduler | 主调度器,协调各组件工作 | 单例模式,异步协程,组件化设计 |
PriorityQueueManager | 优先级队列管理,实现多级队列 | 动态阈值算法,自适应优先级分布 |
WorkerManager | 工作线程管理和监控 | 自动扩缩容,心跳检测,资源感知 |
TaskPersistenceManager | 任务队列持久化,故障恢复 | 定期备份,数据一致性保障 |
PeriodicTaskManager | 高级定时任务管理 | Cron表达式支持,精确调度控制 |
3.7.3 增强版调度系统主要特性
1. 优先级队列管理优化
- 动态阈值多级队列:根据任务优先级分布自动调整队列阈值
- 平衡调度策略:确保高优先级任务优先处理,同时避免低优先级任务长时间饥饿
- 资源分配:针对不同优先级队列分配不同的工作线程配额
2. 健壮性提升
- 全面的异常处理:增强异常捕获和处理,防止工作线程崩溃
- 工作线程自动恢复:检测到异常退出时自动重启工作线程
- 心跳检测:周期性检查各组件状态,及时发现异常
- 状态一致性保障:增强任务状态管理,避免"僵尸任务"和状态不一致
3. 性能优化
- 动态工作线程池:根据系统负载和队列长度自动调整工作线程数量
- 资源感知调度:根据CPU和内存使用情况动态调整执行策略
- 非阻塞IO:全面采用异步IO操作,提高系统吞吐量
4. 功能增强
- 任务超时控制:可为每个任务设置执行超时时间,超时自动终止
- 任务重试机制:支持配置失败任务的重试策略(次数、间隔、退避算法)
- 高级定时任务:支持标准Cron表达式,实现更灵活的定时调度
- 状态通知机制:提供实时的任务状态变更通知
5. 数据安全与持久化
- 任务队列持久化:定期备份任务队列,确保系统崩溃后能恢复任务
- 数据库事务优化:加强事务处理,确保状态更新的原子性
- 预防内存泄漏:监控内存使用,及时清理无效资源
3.7.4 增强版调度系统配置选项
系统提供丰富的配置项,可通过config/settings.py
进行调整:
# 增强版任务调度器配置
TASK_SCHEDULER_MIN_WORKER_COUNT = 5 # 最小工作线程数
TASK_SCHEDULER_MAX_WORKER_COUNT = 20 # 最大工作线程数
TASK_SCHEDULER_QUEUE_COUNT = 3 # 队列数量
TASK_SCHEDULER_QUEUE_THRESHOLD_PERCENTILES = [0.1, 0.3, 1.0] # 队列阈值
TASK_SCHEDULER_WORKER_RATIOS = [0.6, 0.3, 0.1] # 工作线程分配比例
TASK_SCHEDULER_TASK_TIMEOUT = 3600 # 任务超时时间(秒)
TASK_SCHEDULER_MAX_RETRY_COUNT = 3 # 最大重试次数
TASK_SCHEDULER_RETRY_DELAY = 60 # 重试基础延迟(秒)
TASK_SCHEDULER_BACKUP_INTERVAL = 300 # 备份间隔(秒)
TASK_SCHEDULER_MAX_BACKUPS = 5 # 最大备份数
3.7.5 增强版调度系统集成方案
增强版调度系统设计为完全兼容现有系统接口,可通过集成脚本快速替换原有调度器:
# 集成增强版调度系统
from services.enhanced_scheduler.integration import integrate_enhanced_scheduler
# 在应用启动时集成
@app.on_event("startup")
async def startup():
integration_result = await integrate_enhanced_scheduler()
if integration_result["success"]:
logger.info("增强版任务调度系统集成成功")
else:
logger.error(f"集成失败: {integration_result['message']}")
3.7.6 增强版调度系统对比分析
特性 | 原有调度系统 | 增强版调度系统 | 提升效果 |
---|---|---|---|
任务优先级 | 单一队列优先级 | 多级动态阈值队列 | 更精准的任务优先级控制 |
工作线程 | 固定数量 | 动态自适应 | 更高效的资源利用率 |
任务重试 | 无内置重试 | 可配置重试策略 | 提高任务执行成功率 |
定时任务 | 简单周期 | Cron表达式支持 | 更灵活的定时策略 |
故障恢复 | 有限支持 | 完整持久化方案 | 显著提高系统可靠性 |
监控能力 | 基础状态 | 全面指标监控 | 便于问题排查和优化 |
资源控制 | 无资源限制 | CPU/内存监控与控制 | 防止单任务资源过度占用 |
通过增强版任务调度系统的部署,系统的任务处理能力、可靠性和可维护性将获得显著提升,为VWED任务系统提供更稳定和高效的核心调度服务。
4. 数据流图
4.1 任务创建与执行流程
-
任务定义阶段: 用户 → 任务创建界面 → 任务定义模块 → 数据访问层 → vwed_taskdef
-
任务实例化阶段: 用户 → 任务管理界面 → 任务执行模块 → 数据访问层 → vwed_taskrecord
-
任务执行阶段: 任务执行模块 → 组件管理模块 → 任务块记录DAO → vwed_blockrecord 任务执行模块 → AGV控制接口 → 机器人执行
-
任务监控阶段: vwed_taskrecord → 任务记录DAO → 任务监控界面 → 用户
5. 系统交互图
5.1 低代码编辑器与组件交互
用户 ↔ 低代码编辑器 ↔ 组件管理模块 ↔ 预设组件库 ↓ 组件参数配置 ↓ 任务定义
5.2 任务执行与AGV交互
任务执行模块 ↔ AGV控制接口 ↔ 机器人 ↓ 任务块记录DAO ↔ vwed_blockrecord