VWED_server/VWED任务模块系统架构图文件.md
2025-04-30 16:57:46 +08:00

21 KiB
Raw Blame History

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 调度系统与应用生命周期集成

# 应用启动时初始化调度器
@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 任务创建与执行流程

  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