# Novalon 管理系统 - 系统架构设计文档

## 1. 系统概述

Novalon 管理系统是一个企业级后台管理系统，采用前后端分离架构，基于 Spring WebFlux 响应式编程模型。

## 2. 技术架构

### 2.1 后端架构

- **框架**: Spring Boot 3.4.1
- **编程模型**: 响应式 WebFlux
- **数据库**: PostgreSQL 15 + R2DBC
- **认证**: JWT + Spring Security
- **缓存**: Caffeine
- **文档**: SpringDoc OpenAPI 3.0
- **构建工具**: Maven 3.9
- **JDK**: Java 21

### 2.2 前端架构

- **框架**: Vue 3 + TypeScript 5.0
- **UI 组件**: Ant Design Vue 4.0
- **状态管理**: Pinia
- **路由**: Vue Router 4.0
- **构建工具**: Vite 5.0
- **HTTP 客户端**: Axios

### 2.3 基础设施

- **容器化**: Docker
- **编排**: Docker Compose
- **CI/CD**: Woodpecker
- **监控**: Prometheus + Grafana
- **日志**: 结构化日志 (SLF4J)

## 3. 分层架构

```
┌─────────────────────────────────────┐
│         Frontend (Vue 3)           │
│    - TypeScript                     │
│    - Ant Design Vue               │
│    - Pinia State                  │
└──────────────┬──────────────────────┘
               │ HTTP/WebSocket
┌──────────────▼──────────────────────┐
│         Handler Layer               │
│    (Functional WebFlux Routes)      │
│    - Request Validation             │
│    - Response Formatting            │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         Service Layer               │
│      (Business Logic)              │
│    - @Cacheable                  │
│    - Transaction Management        │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         DAO Layer                   │
│   (Data Access Object)             │
│    - Repository Pattern            │
│    - R2DBC Operations           │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         Entity Layer                │
│   (Database Entities)              │
│    - MapStruct Mappers           │
│    - Domain Objects              │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         Database (PostgreSQL)      │
│    - Connection Pool (HikariCP)    │
│    - Indexes                     │
└─────────────────────────────────────┘
```

## 4. 核心模块

### 4.1 用户管理 (User Management)
- 用户 CRUD 操作
- 用户认证与授权
- 密码管理 (BCrypt 加密)
- 角色分配
- 用户状态管理 (启用/禁用)
- 逻辑删除与恢复

### 4.2 角色管理 (Role Management)
- 角色定义与维护
- 权限配置
- 菜单关联
- 角色排序
- 角色状态管理

### 4.3 菜单管理 (Menu Management)
- 菜单树结构
- 路由配置
- 权限控制
- 菜单类型 (目录/菜单/按钮)
- 图标配置

### 4.4 字典管理 (Dictionary Management)
- 字典类型管理
- 字典数据管理
- 字典缓存
- 字典查询优化

### 4.5 系统配置 (System Configuration)
- 系统参数配置
- 配置管理
- 配置缓存
- 配置类型分类

### 4.6 审计日志 (Audit Logs)
- 操作日志记录
- 登录日志记录
- 异常日志记录
- 日志查询与导出

### 4.7 通知中心 (Notification Center)
- 通知公告管理
- 用户消息管理
- WebSocket 实时推送
- 消息状态跟踪

### 4.8 文件管理 (File Management)
- 文件上传 (Multipart)
- 文件下载
- 文件预览
- 文件类型限制
- 文件大小限制

## 5. 数据流

### 5.1 请求流程

```
1. 前端发送 HTTP 请求
   ↓
2. Handler 层接收请求并解析参数
   ↓
3. Service 层处理业务逻辑
   - 缓存检查
   - 数据验证
   ↓
4. DAO 层访问数据库
   - R2DBC 非阻塞查询
   ↓
5. 数据库返回结果
   ↓
6. 逐层返回给前端
   - Mono/Flux 响应式流
```

### 5.2 响应式数据流

```
Frontend Request
    ↓
Handler (Mono/Flux)
    - ServerRequest → Mono<ServerResponse>
    ↓
Service (Mono/Flux)
    - @Cacheable 缓存拦截
    - 业务逻辑处理
    ↓
DAO (Mono/Flux)
    - R2DBC 非阻塞 I/O
    ↓
Database (R2DBC Driver)
    - 异步数据库操作
    ↓
Response (Mono/Flux)
    - 响应式流返回
    ↓
Frontend
```

## 6. 安全设计

### 6.1 认证机制
- JWT Token 认证
- Token 刷新机制
- 密码 BCrypt 加密存储
- 登录失败次数限制
- Token 过期时间控制

### 6.2 授权机制
- 基于角色的访问控制 (RBAC)
- API 级别权限控制
- 菜单级别权限控制
- 数据级权限控制

### 6.3 审计机制
- 操作日志记录 (CRUD 操作)
- 登录日志记录 (成功/失败)
- 异常日志记录
- 敏感操作审计

### 6.4 数据安全
- SQL 注入防护 (R2DBC 参数化查询)
- XSS 防护 (输入验证)
- CSRF 防护 (Token 验证)
- 文件上传安全 (类型/大小限制)

## 7. 性能优化

### 7.1 响应式编程优势
- 非阻塞 I/O 操作
- 背压机制 (Backpressure)
- 异步处理能力
- 高并发支持

### 7.2 缓存策略
- Caffeine 本地缓存
- 缓存预热
- 缓存失效策略 (TTL 30 分钟)
- 缓存命中率监控

### 7.3 数据库优化
- 索引优化 (单列/复合索引)
- 查询优化 (EXPLAIN ANALYZE)
- 连接池配置 (HikariCP)
- 慢查询监控

### 7.4 性能指标
- P95 响应时间 < 500ms
- P99 响应时间 < 1000ms
- 并发支持 > 50 QPS
- 数据库连接池利用率 < 80%

## 8. 监控与运维

### 8.1 健康检查
- Spring Boot Actuator 端点
- 数据库连接检查
- 缓存状态检查
- 磁盘空间检查

### 8.2 指标监控
- Prometheus 指标采集
- Grafana 可视化
- JVM 内存使用
- HTTP 请求指标
- 数据库连接池状态
- 缓存命中率

### 8.3 日志管理
- 结构化日志 (JSON 格式)
- 日志级别控制 (DEBUG/INFO/WARN/ERROR)
- 日志归档策略
- ELK 集成 (可选)

### 8.4 告警规则
- 响应时间 > 1s 告警
- 错误率 > 1% 告警
- 数据库连接池耗尽告警
- JVM 内存使用 > 80% 告警

## 9. 部署架构

### 9.1 容器化部署
- Docker 镜像构建 (多阶段构建)
- Docker Compose 编排
- 环境变量配置
- 数据持久化卷

### 9.2 CI/CD 流水线
- Woodpecker CI 配置
- 自动化测试 (单元/集成/E2E)
- 代码覆盖率检查 (JaCoCo >= 80%)
- 静态代码分析 (SpotBugs)
- 安全扫描 (OWASP Dependency Check)
- 自动化部署

### 9.3 环境配置
- 开发环境 (localhost)
- 测试环境 (staging)
- 生产环境 (production)
- 配置文件分离

## 10. 扩展性设计

### 10.1 水平扩展
- 无状态设计 (Stateless)
- 负载均衡 (Nginx)
- 会话共享 (JWT 无状态)
- 数据库读写分离 (可选)

### 10.2 垂直扩展
- 资源优化 (CPU/内存)
- 连接池调优
- 缓存容量扩展
- 数据库分表 (可选)

## 11. 技术债务与改进

### 11.1 当前技术债务
- 部分 Mapper 警告 (MapStruct 未映射字段)
- WebSocket 未检查操作警告
- 测试覆盖率需提升 (当前 10%，目标 80%)

### 11.2 改进计划
- 修复 Mapper 映射问题
- 添加 WebSocket 类型安全
- 补充单元测试提升覆盖率
- 集成测试覆盖关键业务流程
- E2E 测试覆盖用户主要路径

## 12. 附录

### 12.1 相关文档
- [部署指南](../deployment/deployment-guide.md)
- [API 文档](http://localhost:8080/swagger-ui.html)
- [数据库设计](../database/database-schema.md)

### 12.2 联系方式
- 技术支持: support@novalon.cn
- 文档地址: https://docs.novalon.cn
