# 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 调度系统工作流程 1. **任务提交阶段**: API层 → TaskEditService/TaskService → 任务调度器(scheduler) → 任务队列 2. **任务调度阶段**: 任务调度器 → 工作线程池分配 → 执行上下文创建 → 任务执行器 3. **任务执行阶段**: 任务执行器 → 组件执行器 → 业务逻辑处理 → 状态更新 4. **任务完成阶段**: 任务执行器 → 状态追踪器 → 数据库更新 → 任务调度器(下一任务) ### 3.4 并发控制与资源管理 - **线程池大小**: 系统配置工作线程数为5,表示最多同时执行5个任务 - **任务排队机制**: 超过并发上限的任务进入队列等待,按优先级和提交顺序排序 - **资源隔离**: 每个工作线程独立执行任务,防止任务间相互干扰 - **负载均衡**: 调度器根据线程负载情况,合理分配任务以优化系统资源利用 ### 3.5 调度系统优势 1. **高性能**: 利用异步编程和线程池实现高效任务处理 2. **可靠性**: 完善的错误处理和状态管理机制,防止任务丢失 3. **可扩展性**: 支持动态调整线程池大小,适应不同负载场景 4. **灵活性**: 支持任务优先级,可根据业务需求调整执行顺序 5. **可监控性**: 提供详细的任务执行状态和统计信息,便于系统监控和问题排查 ### 3.6 调度系统与应用生命周期集成 ```python # 应用启动时初始化调度器 @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`进行调整: ```python # 增强版任务调度器配置 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 增强版调度系统集成方案 增强版调度系统设计为完全兼容现有系统接口,可通过集成脚本快速替换原有调度器: ```python # 集成增强版调度系统 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 任务创建与执行流程 1. **任务定义阶段**: 用户 → 任务创建界面 → 任务定义模块 → 数据访问层 → vwed_taskdef 2. **任务实例化阶段**: 用户 → 任务管理界面 → 任务执行模块 → 数据访问层 → vwed_taskrecord 3. **任务执行阶段**: 任务执行模块 → 组件管理模块 → 任务块记录DAO → vwed_blockrecord 任务执行模块 → AGV控制接口 → 机器人执行 4. **任务监控阶段**: vwed_taskrecord → 任务记录DAO → 任务监控界面 → 用户 ## 5. 系统交互图 ### 5.1 低代码编辑器与组件交互 用户 ↔ 低代码编辑器 ↔ 组件管理模块 ↔ 预设组件库 ↓ 组件参数配置 ↓ 任务定义 ### 5.2 任务执行与AGV交互 任务执行模块 ↔ AGV控制接口 ↔ 机器人 ↓ 任务块记录DAO ↔ vwed_blockrecord