# 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