开源卫星星座管理平台 2.0:14 项缺陷复盘 + 工程级升级路线图全曝光
上一期我们介绍了 LEO 卫星星座管理平台的功能全景(卫星/星座/地面站/链路/遥测/3D 仿真/数据接入九大模块)。功能齐全 ≠ 工程可靠。本期带来 v2.0 升级规划:从 14 项工程缺陷的复盘出发,给出 M0-M4 里程碑路线图、关键架构决策与质量门禁,带大家看看一个开源卫星平台如何从"能用"走向"工程级"。
一、简短回顾:平台已实现的能力
平台覆盖 LEO/MEO/GEO 全要素卫星星座管理:卫星全生命周期管理、星座编排、地面站台账、ISL/GSL 链路监控、WebSocket 实时遥测、2D 轨道视图、CesiumJS 3D 仿真,以及 21 种协议的数据接入层(含航天专用 CCSDS AOS 连接器)。技术栈为 Spring Boot 3.3 + Vue 3.5 + PostgreSQL 16 + Redis 7。


功能层面已经"五脏俱全",但距离工程级产品还差关键一环——这也是本次 2.0 升级计划的出发点。
二、现状复盘:勘察出的 14 项工程缺陷
升级计划的第一件事,是对代码库做一次全面"体检"。基于源码、配置文件与文档逐项核对,共发现 14 项工程缺陷,按影响面分为 P0(阻断工程化/有安全风险)、P1(影响生产可用性)、P2(影响体验与长期演进):
| # | 缺陷 | 影响 | 优先级 |
|---|---|---|---|
| E1 | init.sql 缺失,数据库无脚本化建表 | Docker 初始化挂载失败,无法复现环境 | P0 |
| E2 | 后端零测试 | 功能回归无保障 | P0 |
| E3 | 前端 lint 配置缺失,npm run lint 直接报错 | 无代码质量门禁 | P0 |
| E4 | WebSocket 无鉴权(/ws/** permitAll) | 未授权用户可订阅遥测/数据接入推送 | P0 |
| E5 | 前端路由仅登录态守卫 | 无角色/按钮级权限,RBAC 未闭环 | P1 |
| E6 | JWT 密钥硬编码在配置文件中 | 密钥泄露即全线沦陷 | P0 |
| E7 | 单环境配置,无 profile 拆分 | 无法区分 dev/prod 行为 | P1 |
| E8 | 无数据库迁移工具(Flyway/Liquibase) | 表结构变更无法版本化演进 | P0 |
| E9 | 无操作审计 | 操作不可追溯,无法满足合规 | P1 |
| E10 | 无告警/通知体系 | 遥测越限无法主动感知,仅靠人工盯屏 | P1 |
| E11 | 遥测数据无分区归档与清理策略 | 数据量增长后查询变慢、存储膨胀 | P2 |
| E12 | docker-compose 缺资源限制/日志轮转/健康检查/备份 | 生产运行不可控,故障难恢复 | P1 |
| E13 | 无 CI/CD 流水线 | 发布靠手动构建,无质量门禁拦截 | P1 |
| E14 | 缓存 TTL 全局统一 1 小时 | 冷热数据不分,失效策略粗糙 | P2 |
复盘结论:P0 类缺陷集中在"可复现、可测试、可审计、可运维"四个维度——这正是 2.0 升级的主攻方向。
三、升级目标:六项工程级标准与量化 SLO
v2.0 的验收总纲,是达到六项工程级标准:
- 可复现:一条命令从零拉起完整环境(数据库自动迁移、种子数据、依赖服务);
- 可测试:核心业务有自动化测试,CI 中覆盖率门禁拦截劣化;
- 可观测:指标、日志、链路三者齐备,关键异常能告警触达;
- 可审计:敏感操作留痕,权限控制到菜单/按钮级;
- 可运维:备份可恢复、发布可回滚、配置外置化、无硬编码密钥;
- 可演进:数据库变更版本化、模块边界清晰、为 K8s/微服务预留路径。
并用量化 SLO 兜底,让"工程级"不再是口号:
| 维度 | 指标 | 目标值 |
|---|---|---|
| 可用性 | 系统可用率 | ≥ 99.5%(月故障 ≤ 3.6h) |
| 性能 | API P95 响应时间 | < 500ms |
| 性能 | 遥测推送端到端延迟 | < 2s |
| 性能 | 仪表盘/3D 首屏可交互 | ≤ 3s |
| 质量 | 后端行覆盖率 | ≥ 70%(核心模块 ≥ 80%) |
| 安全 | OWASP Top 10 | 认证/授权/注入/敏感信息 4 类零缺陷 |
| 数据 | 备份 RPO / RTO | RPO ≤ 24h / RTO ≤ 2h |
| 发布 | 镜像构建到回滚 | 发布失败回滚 < 10min |
四、升级路线图总览:M0-M4 四大里程碑
每个里程碑都是可独立验收的发布单元,工期按单人全职估算:
M0 基线修复(0.5-1 周)——让项目可构建、可运行、可审计
- 重建数据库基线脚本
V1__baseline.sql(10 张表 + 种子数据) - ESLint 9 flat config 落地,存量告警清零
- JWT/数据库/Redis 密钥全部环境变量化,仓库零明文
- README 修正与实际一致
出口标准:docker compose up -d 一次成功;lint / vue-tsc / mvn package 全绿。
M1 地基加固(2-3 周)——工程化骨架
- Flyway 集成 + 迁移验证
- 后端测试体系(单测 + Testcontainers 集成测试 + 控制器测试 + JaCoCo 覆盖率门禁)
- 前端测试(Vitest 组件测试 + Playwright E2E 冒烟)
- CI/CD 流水线(Gitee Go),质量门禁串联
- WebSocket 握手鉴权(ChannelInterceptor 校验 CONNECT 帧 JWT)
- 用户管理 + 按钮级 RBAC、遥测导出 CSV/JSON、审计日志 AOP
出口标准:CI 全绿且含覆盖率门禁;WS 未授权连接被拒;权限到按钮级;审计可查。
M2 业务深化(3-4 周)——告警、遥测与航天能力
- 告警规则引擎 + 通知中心(阈值/区间/持续时长规则,WebSocket/站内信推送)
- 遥测按日分区 + 90 天归档清理
- 可观测性全套:Prometheus + Grafana + Loki + Alertmanager
- SGP4 轨道预报引擎(支持 TLE 输入,替代圆轨道近似)
- 地面站过境预报(AOS/LOS 时间、最大仰角、GSL 窗口排程)
- 认证加固:图形验证码、登录失败锁定(5 次锁 15min)、密码强度策略
- dev/prod 多环境配置拆分
出口标准:告警闭环演示通过;监控栈随 compose 一键拉起;SGP4 引擎单测覆盖。
M3 体验跃升(2-3 周)——产品化与性能
- Excel 批量导入导出(EasyExcel)
- 前端性能优化(万级列表虚拟滚动、ECharts 采样降噪、路由级代码分割)
- 运营数据大屏、暗黑模式、3D 交互升级(点击详情浮窗、时间轴拖拽)
- 统一错误处理(异常码体系 + 全局反馈)
出口标准:P95 < 500ms、首屏 ≤ 3s;大屏与暗黑模式演示通过。
M4 平台演进(持续,按需)——规模化与远期能力
- K8s / Helm 落地(HPA、PV 持久化、备份 CronJob)
- 碰撞预警(星历交叉分析 + 接近事件列表)
- 任务规划与指令管理(指令队列、上注记录、执行状态跟踪)
- 仿真持久化与历史回放、Monte Carlo 参数扫描
- 微服务化预留路线图
出口标准:按路线图文档可执行推进;无阻塞性技术债。
依赖关系决定了执行顺序:Flyway 是地基,遥测分区依赖它,告警引擎依赖分区,通知中心依赖告警——环环相扣:
▼mermaid复制代码graph LR E8[E8 Flyway 迁移] --> U1[U1 遥测分区] U1 --> A3[A3 告警引擎] A3 --> UI3[UI3 通知中心] E8 --> A1[A1 用户管理] A1 --> E5[E5 按钮级 RBAC] E2[E2 测试体系] --> C1[C1 CI/CD] C1 --> E13[E13 发布流水线] E4[E4 WS 鉴权] --> U2[U2 WS 加固] U2 --> UI1[UI1 大屏实时] S1[S1 SGP4] --> S2[S2 过境预报] S1 --> SU1[SU1 物理升级] SU1 --> SU3[SU3 覆盖分析] O1[O1 可观测性] --> DP1[DP1 生产运维] U1 --> DU5[DU5 定时任务]
五、重点升级方向详解
5.1 数据库工程化:Flyway + 遥测分区 + 备份恢复
- Flyway 10 版本化迁移:重建 V1 基线(10 个实体建表 + 索引 + 外键 + 种子数据),V2 迁移将遥测表按日 Range 分区,V3 增加审计日志表,禁止修改已发布版本脚本;
- 备份恢复:
pg_dump压缩备份 + 7 天保留策略,Windows/Linux 双版本脚本,RPO ≤ 24h、RTO ≤ 2h 演练验证。
5.2 测试体系:从零到覆盖率门禁
- 单元测试(Mockito):认证、卫星分页/缓存、遥测查询/健康评估、仿真 KPI、连接器生命周期与异常恢复,核心分支覆盖率 ≥ 80%;
- 集成测试(Testcontainers + 真实 PostgreSQL 16 镜像):验证 JSONB 字段、分页与 Flyway 基线一致性,杜绝 H2 方言差异的假绿;
- 控制器测试:MockMvc +
@WithMockUser覆盖主路径与 401/403/参数校验分支; - 前端测试:Vitest + Vue Test Utils 覆盖请求拦截器、用户 Store、列表交互、遥测卡片;Playwright E2E 跑通"登录→仪表盘→卫星列表→遥测页"主链路;
- 门禁:JaCoCo 行覆盖 ≥ 70%(service/dataaccess 包 ≥ 80%),低于阈值
mvn verify直接失败。
5.3 CI/CD:质量门禁串联发布
Gitee Go 流水线(GitHub Actions 为备选):lint/typecheck → 后端单测+覆盖率 → 镜像构建 → 推送镜像仓库 → 部署触发。任一环节红,发布即阻断。main 分支受保护,feature/* + MR 评审,v*.*.* tag 触发发布,版本语义化同步。
5.4 可观测性:指标、日志、告警三位一体
- 指标:Actuator + Micrometer 暴露
/actuator/prometheus,Prometheus 抓取,Grafana 看板展示 CPU/JVM/请求量/遥测推送计数; - 日志:logback JSON encoder + MDC 注入 traceId/userId,Loki + promtail 轻量收集(放弃 ELK,单机场景资源更友好);
- 告警:Alertmanager 规则覆盖"服务 down、API 5xx 率 > 5%、JVM 堆 > 85%、遥测推送中断 > 60s",邮件/企业微信 webhook 触达。
5.5 安全加固:从认证到审计的完整闭环
- WebSocket 握手鉴权:STOMP ChannelInterceptor 校验 CONNECT 帧 JWT,无 token 连接直接 403;
- 登录防线:图形验证码(Redis 5min 有效)+ 连续失败 5 次锁定 15min + 密码复杂度校验;
- 密钥外置:JWT secret、数据库/Redis 密码全部
${ENV_VAR}注入,仓库零明文; - 审计留痕:
@AuditLog注解 + AOP 切面,用户/动作/资源/结果/IP/耗时落audit_log表,提供审计查询 API。
5.6 航天能力升级:从圆轨道到 SGP4
这是本次升级中最"航天"的部分:
- SGP4/SDP4 轨道预报引擎:支持 TLE 输入(替代当前圆轨道近似),引入 Orekit/ootk 或轻量 sgp4 库,分阶段落地(先椭圆轨道 Kepler,再切 SGP4,预留适配器接口);
- 地面站过境预报:AOS/LOS 时间、最大仰角、方位角、GSL 通信窗口排程;
- 链路预算分析器:Friis 方程、自由空间损耗、ITU-R 雨衰/大气衰减,输出链路余量;
- 仿真物理升级:椭圆轨道(偏心率)、大气阻力、太阳光压,以及全球网格覆盖热力图、重访时间统计;
- 远期:碰撞预警、任务规划与指令管理、能源/热控预算(日蚀时间、SOC 趋势预测)。
5.7 产品体验:大屏、暗黑、3D 交互
运营数据大屏(2560 宽屏自适应 + 实时刷新)、暗黑模式(CSS 变量 + 主题切换记忆)、3D 交互升级(点击卫星弹详情、轨道时间轴拖拽、测距/标记)、图表体系升级(多参数联动趋势、链路拓扑)、Excel 批量导入导出(1000 行模板无丢数)。
5.8 配置与部署:生产级 compose
profile 拆分(dev 宽松/prod 严格)、环境变量注入清单化、compose 增加 healthcheck(/actuator/health)、资源 limits、日志轮转(max-size 10m × 5)、restart: unless-stopped,让容器故障可自愈。
六、架构演进:单机生产级 → K8s
阶段一:单机生产级(M0-M2 目标形态)——监控栈随 compose 一键拉起,备份任务内置:
▼mermaid复制代码flowchart LR subgraph Host["生产主机 (docker compose)"] FE[frontend:nginx<br/>80] BE[backend<br/>8080] PG[(postgres:16<br/>Flyway 迁移)] RD[(redis:7)] PROM[prometheus] GRAF[grafana<br/>3000] LOKI[loki + promtail] BACKUP[备份任务<br/>pg_dump + 保留策略] FE --> BE --> PG BE --> RD PROM --> BE GRAF --> PROM LOKI --> FE & BE BACKUP --> PG end U[用户浏览器] --> FE OPS[运维] --> GRAF
阶段二:K8s 演进(M4 目标形态)——后端无状态化(WebSocket 推送改 Redis Pub/Sub 广播),HPA 弹性伸缩 2-5 副本,数据库/缓存 StatefulSet + PV 持久化,配置全部外置:
▼mermaid复制代码flowchart TB subgraph K8s["Kubernetes 集群 (leo-prod namespace)"] ING[Ingress + TLS] FE_D[Deployment frontend] BE_D[Deployment backend<br/>HPA 2-5 副本] STS_PG[StatefulSet postgres<br/>PV 持久化 + 备份 CronJob] STS_RD[StatefulSet redis] CFG[ConfigMap: 非敏感配置] SECRET[Secret: 密码/密钥] BE_D --> STS_PG & STS_RD CFG --> BE_D SECRET --> BE_D end ING --> FE_D --> BE_D
七、关键架构决策(ADR 摘要)
升级过程中每个关键选型都经过对比论证,避免"为了技术而技术":
| 决策点 | 选择 | 理由 | 否决的备选 |
|---|---|---|---|
| 数据库迁移 | Flyway 10 | Spring Boot 3.3 官方集成,SQL 版本化,社区标准 | Liquibase(XML 较重,收益无差) |
| 集成测试 | Testcontainers(PG 16 镜像) | 与生产一致,方言零差异 | H2(JSONB/分区方言差异大) |
| 指标监控 | Micrometer + Prometheus + Grafana | 原生暴露端点,生态成熟 | 自研统计(不可扩展) |
| 日志收集 | Loki + promtail | 轻量、与 Grafana 一体化 | ELK(组件重,单机过载) |
| WS 鉴权 | STOMP ChannelInterceptor | 握手阶段拦截,订阅粒度可控 | 仅靠 SockJS 头(可伪造) |
| 遥测分区 | PostgreSQL 原生 Range 分区 | 查询裁剪 + 按区归档,零新组件 | TimescaleDB(M4 再评估) |
| 配置管理 | profile 拆分 + 环境变量注入 | 简单直接、容器友好 | Nacos(微服务化时再引入) |
| 任务调度 | Spring @Scheduled 起步 | 避免过度设计 | Quartz(任务复杂后评估) |
八、质量门禁:数字说了算
| 门禁 | 阈值 | 工具 | 生效里程碑 |
|---|---|---|---|
| 后端行覆盖率 | ≥ 70%(核心 ≥ 80%) | JaCoCo check | M1 |
| 前端 lint | 0 error | ESLint 9 | M0 |
| 前端类型检查 | 0 error | vue-tsc | M0 |
| 构建 | 全绿 | Maven / Vite | M0 |
| 后端单测 | 100% 通过 | JUnit5 | M1 |
| E2E 冒烟 | 核心链路 100% 通过 | Playwright | M1 |
| 安全扫描 | 0 高危依赖 | OWASP dependency-check | M1 |
生产上线检查单:Flyway 迁移记录正确、备份完成一次恢复演练、Grafana 看板可见、WS 未授权连接被拒(403)、仓库密钥扫描零命中、审计日志落库可查、遥测分区与归档任务运行正常。
九、结语:升级的意义
一个开源项目从"功能演示级"到"工程级",跨越的不是代码量,而是工程纪律:数据库变更可版本化回放、每次提交有测试与门禁护航、运行状态可观测可告警、敏感操作可审计可追溯。
这次 2.0 升级路线图的价值在于:它把"航天级业务 + 工程级标准"的组合完整示范了一遍——Flyway 管住数据演进,SGP4 管住轨道精度,Prometheus 管住运行健康,K8s 管住规模演进。对正在建设卫星地面系统的团队,或想学习大型系统工程化改造的开发者,都有直接的参考意义。
升级路线图一览:M0 基线修复(1 周)→ M1 地基加固(2-3 周)→ M2 业务深化(3-4 周)→ M3 体验跃升(2-3 周)→ M4 平台演进(持续)。
开源地址:https://gitee.com/zd_g/leo.git
📌 觉得这份路线图有参考价值?点赞 + 在看 + 转发,让更多航天与软件开发者看到! 💬 留言聊聊:你最期待哪个里程碑落地?SGP4 轨道预报、告警引擎还是 K8s 演进?
本文关键词:卫星平台 2.0 | 升级路线图 | 工程化改造 | Flyway | SGP4 轨道预报 | 遥测分区 | 可观测性 | Prometheus | CI/CD | WebSocket 鉴权 | Kubernetes | 开源项目
