Skip to content

Latest commit

 

History

History
429 lines (343 loc) · 13.8 KB

File metadata and controls

429 lines (343 loc) · 13.8 KB

项目架构设计文档

1. 整体架构

┌─────────────────────────────────────────────────────────────┐
│                        用户层                                │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              浏览器 (Vue 3 + Element Plus)            │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                          ↓ HTTP/HTTPS
┌─────────────────────────────────────────────────────────────┐
│                      应用层                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              Flask 应用 (REST API)                    │  │
│  │  ┌────────────┐  ┌────────────┐  ┌────────────┐     │  │
│  │  │ 认证模块   │  │ 任务管理   │  │ 结果查询   │     │  │
│  │  └────────────┘  └────────────┘  └────────────┘     │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────────┐
│                      业务层                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              任务执行器 (Task Executor)               │  │
│  │  ┌─────────────────┐  ┌─────────────────┐           │  │
│  │  │ PerfTestExecutor│  │QualityTestExecutor│          │  │
│  │  └─────────────────┘  └─────────────────┘           │  │
│  └──────────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              任务调度器 (APScheduler)                 │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────────┐
│                      数据层                                  │
│  ┌────────────────┐  ┌────────────────┐  ┌──────────────┐ │
│  │  MySQL 数据库  │  │  文件系统      │  │  日志系统    │ │
│  └────────────────┘  └────────────────┘  └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────────┐
│                      外部工具                                │
│  ┌────────────────┐  ┌────────────────┐                    │
│  │  evalscope     │  │   audit.py     │                    │
│  └────────────────┘  └────────────────┘                    │
└─────────────────────────────────────────────────────────────┘

2. 核心模块设计

2.1 认证模块 (Authentication)

职责:用户身份验证和会话管理

实现

  • 使用 Flask-Login 进行 Session 认证
  • 密码使用 Werkzeug 进行哈希加密
  • 支持记住登录功能

流程

用户登录 → 验证用户名密码 → 创建 Session → 返回用户信息

2.2 任务管理模块 (Task Management)

职责:任务的 CRUD 操作和调度管理

核心类

  • Task:任务模型,存储任务配置和状态
  • TaskExecutor:任务执行器,负责执行具体任务
  • TaskScheduler:任务调度器,管理定时任务

任务生命周期

创建 → 配置 → 启用 → 调度 → 执行 → 记录结果 → 禁用/删除

2.3 任务执行模块 (Task Execution)

职责:执行具体的测试任务并解析结果

两种任务类型

服务压力测试 (PerfTest)

class PerfTestExecutor:
    def execute(self, task):
        # 1. 构建 evalscope perf 命令
        cmd = self._build_command(task.config)
        
        # 2. 执行命令
        output = subprocess.run(cmd)
        
        # 3. 解析输出
        metrics = self._parse_output(output)
        
        # 4. 保存结果
        self._save_result(task, metrics, output)

模型质量测试 (QualityTest)

class QualityTestExecutor:
    def execute(self, task):
        # 1. 构建 audit.py 命令
        cmd = self._build_command(task.config)
        
        # 2. 执行命令
        output = subprocess.run(cmd)
        
        # 3. 解析 Risk Summary
        risk_summary = self._parse_output(output)
        
        # 4. 保存结果
        self._save_result(task, risk_summary, output)

2.4 结果查询模块 (Result Query)

职责:提供测试结果的查询和可视化数据

API 设计

  • 分页查询
  • 时间范围筛选
  • 任务筛选
  • 图表数据聚合

3. 数据流设计

3.1 任务执行流程

┌──────────┐
│ 用户请求 │
└────┬─────┘
     │
     ↓
┌──────────────┐
│ 任务路由     │
│ /api/tasks/  │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 验证参数     │
│ 创建任务对象 │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 保存到数据库 │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 添加到调度器 │
│ (如果启用)   │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 返回任务信息 │
└──────────────┘

3.2 任务调度流程

┌──────────────┐
│ 调度器触发   │
│ (Cron/Interval)│
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 查询任务配置 │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 检查时间范围 │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 执行任务     │
│ (异步)       │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 解析结果     │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 保存到数据库 │
│ 保存文件     │
└──────────────┘

3.3 结果查询流程

┌──────────────┐
│ 前端请求     │
│ /api/results │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 验证参数     │
│ (分页、筛选) │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 查询数据库   │
│ (ORM)        │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 数据转换     │
│ (JSON)       │
└────┬─────────┘
     │
     ↓
┌──────────────┐
│ 返回结果     │
└──────────────┘

4. 前端架构设计

4.1 组件结构

App.vue
├── Login.vue (登录页)
└── Layout.vue (主布局)
    ├── Dashboard.vue (仪表盘)
    ├── Tasks.vue (任务管理)
    ├── PerfResults.vue (压力测试结果)
    └── QualityResults.vue (质量测试结果)

4.2 状态管理

使用 Vue 3 Composition API 的响应式系统:

// 任务列表状态
const tasks = ref([])
const loading = ref(false)

// 加载任务
const loadTasks = async () => {
  loading.value = true
  tasks.value = await taskAPI.getTasks()
  loading.value = false
}

4.3 API 请求封装

使用 Axios 进行统一请求管理:

// 请求拦截器:添加认证头
api.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

// 响应拦截器:统一错误处理
api.interceptors.response.use(
  response => response.data,
  error => {
    if (error.response.status === 401) {
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

5. 安全设计

5.1 认证安全

  • 密码哈希存储(Werkzeug)
  • Session 超时机制
  • CSRF 保护(Flask-WTF)

5.2 权限控制

  • 使用 Flask-Login 的 @login_required 装饰器
  • 所有 API 都需要认证

5.3 数据安全

  • API Key 加密存储(可扩展)
  • 敏感配置使用环境变量
  • SQL 注入防护(ORM)

6. 性能优化

6.1 数据库优化

  • 添加索引:
    • tasks(task_type, is_enabled)
    • perf_test_results(task_id, execution_time)
    • quality_test_results(task_id, execution_time)

6.2 查询优化

  • 分页查询
  • 延迟加载关联数据
  • 使用 joinedload 预加载

6.3 缓存策略

  • 使用 Redis 缓存任务状态(可扩展)
  • 前端缓存图表数据

7. 扩展性设计

7.1 添加新任务类型

  1. 创建新的结果表模型
  2. 实现执行器类
  3. 注册到执行器工厂
  4. 添加前端配置表单

7.2 插件机制

预留插件接口:

class TaskPlugin:
    def execute(self, task):
        raise NotImplementedError
    
    def parse_output(self, output):
        raise NotImplementedError

7.3 Webhook 通知

预留 Webhook 接口:

def send_webhook(event, data):
    # 任务完成、失败等事件通知
    pass

8. 监控和日志

8.1 日志系统

  • 应用日志:logs/app.log
  • 任务执行日志:data/outputs/task_{id}/
  • 日志轮转:RotatingFileHandler

8.2 性能监控

  • 记录任务执行时间
  • 数据库查询性能
  • API 响应时间

9. 部署架构

9.1 单机部署

Nginx (反向代理)
  ↓
Gunicorn (应用服务器)
  ↓
Flask App
  ↓
MySQL

9.2 分布式部署(可扩展)

Load Balancer
  ↓
┌─────────────┬─────────────┐
│ Flask App 1 │ Flask App 2 │
└─────────────┴─────────────┘
  ↓              ↓
┌──────────────────────────┐
│   MySQL (主从复制)        │
└──────────────────────────┘
  ↓
┌──────────────────────────┐
│   Redis (缓存/队列)       │
└──────────────────────────┘

10. 测试策略

10.1 单元测试

  • 模型测试
  • API 测试
  • 解析器测试

10.2 集成测试

  • 任务执行流程测试
  • 认证流程测试

10.3 端到端测试

  • 前端交互测试
  • 完整业务流程测试