QDAirPortBackend0122/doc/design/architecture_analysis_report.md
2026-01-22 13:19:47 +08:00

9.5 KiB
Raw Blame History

碰撞避免系统架构分析报告

版本: 3.0 | 更新日期: 2024-12-20 | 基于需求: requirements.md (2025-05-01)

📋 更新说明: 本版本基于3个月快速交付目标简化架构设计去除MongoDB采用MySQL单一数据库方案专注核心业务功能的MVP实现。

本文档对当前碰撞避免系统的架构进行全面分析,识别设计问题、缺失模块,并提出改进建议。

🔍 当前架构优势

  1. 模块化设计良好:项目采用了清晰的分层架构,模块职责相对明确
  2. 空间计算基础扎实JTS库和MySQL空间索引为地理查询提供强大支持
  3. 配置管理完善支持YAML配置文件和属性绑定机制
  4. 实时通信支持WebSocket实现了基本的实时数据推送

🎯 3个月MVP目标

基于业务需求和开发效率考虑制定3个月快速交付计划

月度1:基础信息管理 + 数据库重构 月度2:超速监控 + 电子围栏 + 基础告警 月度3:轨迹回放 + API完善 + 系统优化

⚠️ 架构设计问题

1. 技术栈过于复杂

问题

  • 同时使用Redis + MongoDB + 未来计划的PostgreSQL技术栈过重
  • JTS空间计算与数据库空间功能重复
  • 过度工程化导致开发周期过长

MVP简化方案

# 简化的技术栈
数据存储: MySQL 8.0+(单一数据库解决方案)
缓存: Redis仅用于实时数据缓存
空间查询: MySQL原生空间函数ST_Contains, ST_Distance等
实时通信: WebSocket保持现有实现

2. 功能模块设计过于复杂

问题

  • 过多的子模块和分层,增加开发复杂度
  • 事件驱动、规则引擎等高级架构增加学习成本
  • MVP阶段不需要如此复杂的架构设计

MVP简化方案

// 简化的模块结构(仅保留核心功能)
├── controller/           // 统一控制器层
├── service/             // 业务服务层(合并相关服务)
├── repository/          // 数据访问层
├── model/              // 数据模型
├── config/             // 配置管理
└── common/             // 通用工具类

🚫 MVP核心功能缺失

1. 基础信息管理模块第1个月实现

现状:完全缺失车辆和驾驶员基础信息管理

MVP实现

// 简化的基础信息管理(避免过度设计)
management/
├── VehicleService.java           // 车辆管理服务
├── DriverService.java            // 驾驶员管理服务  
├── VehicleRepository.java        // 车辆数据访问
├── DriverRepository.java         // 驾驶员数据访问
└── model/
    ├── Vehicle.java              // 车辆实体
    ├── Driver.java               // 驾驶员实体
    └── VehicleDriver.java        // 车辆-驾驶员关联

2. 超速监控模块第2个月实现

现状:基础功能存在但需要增强为完整的超速监控系统

MVP实现

// 增强现有功能,简化实现
speeding/
├── SpeedMonitorService.java      // 超速监控服务(增强现有)
├── SpeedLimitService.java        // 限速管理服务
├── SpeedViolationRepository.java // 违章记录存储
└── model/
    ├── SpeedViolation.java       // 超速违章记录
    └── SpeedLimit.java           // 限速配置

3. 电子围栏模块第2个月实现

现状areas模块存在但缺乏围栏监控功能

MVP实现

// 基于现有areas模块扩展利用MySQL空间查询
geofence/
├── GeofenceService.java          // 围栏监控服务
├── ZoneViolationService.java     // 违规检测服务
├── GeofenceRepository.java       // 围栏数据访问
└── model/
    ├── GeofenceEvent.java        // 围栏事件
    └── ZoneViolation.java        // 区域违规记录

4. 轨迹回放模块第3个月实现

现状:完全缺失历史轨迹查询和回放功能

MVP实现

// 简化的轨迹回放基于MySQL存储和查询
trajectory/
├── TrajectoryService.java         // 轨迹查询服务
├── TrajectoryReplayService.java   // 轨迹回放服务
├── TrajectoryRepository.java      // 轨迹数据访问MySQL分区表
└── model/
    ├── TrajectoryPoint.java       // 轨迹点
    └── TrajectoryQuery.java       // 查询条件

5. 基础告警系统第2个月实现

现状:缺乏统一的告警管理机制

MVP实现

// 简化的告警系统基于WebSocket + 数据库)
alert/
├── AlertService.java             // 告警服务
├── AlertRepository.java          // 告警记录存储
└── model/
    ├── Alert.java               // 告警实体
    └── AlertType.java           // 告警类型(枚举)

🔧 技术实现简化

1. MySQL统一数据存储策略

简化方案

# 统一的数据存储架构
MySQL 8.0+: 
  - 车辆和驾驶员基础信息
  - 实时位置数据(近期数据,定期清理)
  - 历史轨迹数据(分区表按时间分区)
  - 告警记录和配置数据
  - 空间数据POINT, POLYGON类型

Redis: 
  - 实时位置数据缓存(提高查询性能)
  - WebSocket会话管理
  - 临时计算结果缓存

移除: MongoDB简化技术栈

2. 空间查询简化实现

技术方案

-- 利用MySQL原生空间查询替代复杂的JTS计算
-- 点在多边形内查询
SELECT * FROM vehicles v 
WHERE ST_Contains(
    (SELECT boundary FROM airport_zones WHERE zone_id = ?), 
    POINT(v.longitude, v.latitude)
);

-- 距离查询
SELECT *, ST_Distance(POINT(longitude, latitude), POINT(?, ?)) as distance
FROM vehicles 
WHERE ST_Distance_Sphere(POINT(longitude, latitude), POINT(?, ?)) < ?;

3. 数据验证简化

MVP方案

// 基础数据验证(避免过度设计)
@Component
public class DataValidator {
    public boolean validateLocation(Double lat, Double lng) {
        return lat != null && lng != null && 
               lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180;
    }
    
    public boolean validateSpeed(Double speed) {
        return speed != null && speed >= 0 && speed <= 200; // 机场内合理速度范围
    }
}

📋 3个月MVP开发计划

第1个月基础设施建设

Week 1-2: 数据库重构

  • 移除MongoDB配置统一使用MySQL
  • 设计核心数据表结构(车辆、驾驶员、位置、告警等)
  • 配置MySQL空间索引和分区表

Week 3-4: 基础信息管理

  • 实现车辆管理功能CRUD操作
  • 实现驾驶员管理功能
  • 完成基础API和数据验证

第2个月核心监控功能

Week 5-6: 超速监控系统

  • 增强现有SpeedCalculationService
  • 实现超速违章检测和记录
  • 集成告警系统

Week 7-8: 电子围栏功能

  • 基于MySQL空间查询实现围栏监控
  • 实现区域进出检测
  • 完成违规记录和告警

第3个月数据分析和优化

Week 9-10: 轨迹回放功能

  • 实现历史轨迹查询基于MySQL分区表
  • 开发轨迹回放API
  • 前端轨迹可视化(简化版)

Week 11-12: 系统优化和集成

  • API接口完善和文档
  • 性能优化(索引、缓存)
  • 系统测试和部署准备

🎯 MVP架构路线图

graph TD
    A[当前架构] --> B[数据库重构MySQL]
    B --> C[基础信息管理]
    C --> D[超速监控]
    D --> E[电子围栏]
    E --> F[告警系统]
    F --> G[轨迹回放]
    G --> H[API完善]
    H --> I[MVP完成]
    
    style B fill:#ff6b6b
    style C fill:#ff6b6b
    style D fill:#4ecdc4
    style E fill:#4ecdc4
    style F fill:#4ecdc4
    style G fill:#95e1d3
    style H fill:#95e1d3

时间线说明

  • 🔴 月度1数据库重构 + 基础信息管理
  • 🟢 月度2监控功能 + 告警系统
  • 🟦 月度3数据分析 + 系统优化

💡 总结

基于3个月快速交付目标本架构分析提出了大幅简化的MVP方案

关键简化决策

  1. 技术栈简化去除MongoDB统一使用MySQL + Redis架构

    • MySQL处理所有持久化数据存储和空间查询
    • Redis仅作为实时数据缓存和会话管理
    • 大幅降低技术复杂度和学习成本
  2. 功能模块简化:摒弃过度设计,专注核心业务价值

    • 基础信息管理(车辆/驾驶员)
    • 超速监控和电子围栏
    • 基础告警和轨迹回放
    • 避免复杂的规则引擎、事件架构等
  3. 空间查询简化直接使用MySQL原生空间函数

    • ST_Contains, ST_Distance等原生函数替代复杂JTS计算
    • 性能满足需求,开发效率更高

MVP成功关键因素

  1. 技术选型务实:选择团队熟悉、文档完善的技术栈
  2. 需求聚焦:专注最核心的业务价值,避免功能蔓延
  3. 渐进式交付:每月都有可演示的功能增量
  4. 架构适度:既不过度简陋,也不过度复杂

最终数据存储架构

# 简化统一的存储架构
MySQL 8.0+: 
  - 所有业务数据(车辆、驾驶员、轨迹、告警等)
  - 空间数据存储和查询
  - 历史数据分区管理

Redis: 
  - 实时位置数据缓存
  - WebSocket会话缓存
  - 计算结果临时缓存

移除: MongoDB降低复杂度

这种极简化但不简陋的架构设计确保在3个月内交付实用的系统同时为未来扩展保留了足够的架构弹性。