# 碰撞避免系统架构分析报告 **版本**: 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简化方案**: ```yaml # 简化的技术栈 数据存储: MySQL 8.0+(单一数据库解决方案) 缓存: Redis(仅用于实时数据缓存) 空间查询: MySQL原生空间函数(ST_Contains, ST_Distance等) 实时通信: WebSocket(保持现有实现) ``` ### 2. **功能模块设计过于复杂** **问题**: - 过多的子模块和分层,增加开发复杂度 - 事件驱动、规则引擎等高级架构增加学习成本 - MVP阶段不需要如此复杂的架构设计 **MVP简化方案**: ```java // 简化的模块结构(仅保留核心功能) ├── controller/ // 统一控制器层 ├── service/ // 业务服务层(合并相关服务) ├── repository/ // 数据访问层 ├── model/ // 数据模型 ├── config/ // 配置管理 └── common/ // 通用工具类 ``` ## 🚫 **MVP核心功能缺失** ### 1. **基础信息管理模块**(第1个月实现) **现状**:完全缺失车辆和驾驶员基础信息管理 **MVP实现**: ```java // 简化的基础信息管理(避免过度设计) management/ ├── VehicleService.java // 车辆管理服务 ├── DriverService.java // 驾驶员管理服务 ├── VehicleRepository.java // 车辆数据访问 ├── DriverRepository.java // 驾驶员数据访问 └── model/ ├── Vehicle.java // 车辆实体 ├── Driver.java // 驾驶员实体 └── VehicleDriver.java // 车辆-驾驶员关联 ``` ### 2. **超速监控模块**(第2个月实现) **现状**:基础功能存在但需要增强为完整的超速监控系统 **MVP实现**: ```java // 增强现有功能,简化实现 speeding/ ├── SpeedMonitorService.java // 超速监控服务(增强现有) ├── SpeedLimitService.java // 限速管理服务 ├── SpeedViolationRepository.java // 违章记录存储 └── model/ ├── SpeedViolation.java // 超速违章记录 └── SpeedLimit.java // 限速配置 ``` ### 3. **电子围栏模块**(第2个月实现) **现状**:areas模块存在但缺乏围栏监控功能 **MVP实现**: ```java // 基于现有areas模块扩展(利用MySQL空间查询) geofence/ ├── GeofenceService.java // 围栏监控服务 ├── ZoneViolationService.java // 违规检测服务 ├── GeofenceRepository.java // 围栏数据访问 └── model/ ├── GeofenceEvent.java // 围栏事件 └── ZoneViolation.java // 区域违规记录 ``` ### 4. **轨迹回放模块**(第3个月实现) **现状**:完全缺失历史轨迹查询和回放功能 **MVP实现**: ```java // 简化的轨迹回放(基于MySQL存储和查询) trajectory/ ├── TrajectoryService.java // 轨迹查询服务 ├── TrajectoryReplayService.java // 轨迹回放服务 ├── TrajectoryRepository.java // 轨迹数据访问(MySQL分区表) └── model/ ├── TrajectoryPoint.java // 轨迹点 └── TrajectoryQuery.java // 查询条件 ``` ### 5. **基础告警系统**(第2个月实现) **现状**:缺乏统一的告警管理机制 **MVP实现**: ```java // 简化的告警系统(基于WebSocket + 数据库) alert/ ├── AlertService.java // 告警服务 ├── AlertRepository.java // 告警记录存储 └── model/ ├── Alert.java // 告警实体 └── AlertType.java // 告警类型(枚举) ``` ## 🔧 **技术实现简化** ### 1. **MySQL统一数据存储策略** **简化方案**: ```yaml # 统一的数据存储架构 MySQL 8.0+: - 车辆和驾驶员基础信息 - 实时位置数据(近期数据,定期清理) - 历史轨迹数据(分区表按时间分区) - 告警记录和配置数据 - 空间数据(POINT, POLYGON类型) Redis: - 实时位置数据缓存(提高查询性能) - WebSocket会话管理 - 临时计算结果缓存 移除: MongoDB(简化技术栈) ``` ### 2. **空间查询简化实现** **技术方案**: ```sql -- 利用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方案**: ```java // 基础数据验证(避免过度设计) @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架构路线图** ```mermaid 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. **架构适度**:既不过度简陋,也不过度复杂 ### **最终数据存储架构** ```yaml # 简化统一的存储架构 MySQL 8.0+: - 所有业务数据(车辆、驾驶员、轨迹、告警等) - 空间数据存储和查询 - 历史数据分区管理 Redis: - 实时位置数据缓存 - WebSocket会话缓存 - 计算结果临时缓存 移除: MongoDB(降低复杂度) ``` 这种**极简化但不简陋**的架构设计,确保在3个月内交付实用的系统,同时为未来扩展保留了足够的架构弹性。