VWED_server/VWED任务模块系统架构图文件.md

299 lines
21 KiB
Markdown
Raw Normal View History

2025-04-30 16:57:46 +08:00
# 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