开源卫星星座管理平台 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。

登录.png

jggl.png

功能层面已经"五脏俱全",但距离工程级产品还差关键一环——这也是本次 2.0 升级计划的出发点。


二、现状复盘:勘察出的 14 项工程缺陷

升级计划的第一件事,是对代码库做一次全面"体检"。基于源码、配置文件与文档逐项核对,共发现 14 项工程缺陷,按影响面分为 P0(阻断工程化/有安全风险)、P1(影响生产可用性)、P2(影响体验与长期演进):

#缺陷影响优先级
E1init.sql 缺失,数据库无脚本化建表Docker 初始化挂载失败,无法复现环境P0
E2后端零测试功能回归无保障P0
E3前端 lint 配置缺失,npm run lint 直接报错无代码质量门禁P0
E4WebSocket 无鉴权(/ws/** permitAll)未授权用户可订阅遥测/数据接入推送P0
E5前端路由仅登录态守卫无角色/按钮级权限,RBAC 未闭环P1
E6JWT 密钥硬编码在配置文件中密钥泄露即全线沦陷P0
E7单环境配置,无 profile 拆分无法区分 dev/prod 行为P1
E8无数据库迁移工具(Flyway/Liquibase)表结构变更无法版本化演进P0
E9无操作审计操作不可追溯,无法满足合规P1
E10无告警/通知体系遥测越限无法主动感知,仅靠人工盯屏P1
E11遥测数据无分区归档与清理策略数据量增长后查询变慢、存储膨胀P2
E12docker-compose 缺资源限制/日志轮转/健康检查/备份生产运行不可控,故障难恢复P1
E13无 CI/CD 流水线发布靠手动构建,无质量门禁拦截P1
E14缓存 TTL 全局统一 1 小时冷热数据不分,失效策略粗糙P2

复盘结论:P0 类缺陷集中在"可复现、可测试、可审计、可运维"四个维度——这正是 2.0 升级的主攻方向。


三、升级目标:六项工程级标准与量化 SLO

v2.0 的验收总纲,是达到六项工程级标准:

  1. 可复现:一条命令从零拉起完整环境(数据库自动迁移、种子数据、依赖服务);
  2. 可测试:核心业务有自动化测试,CI 中覆盖率门禁拦截劣化;
  3. 可观测:指标、日志、链路三者齐备,关键异常能告警触达;
  4. 可审计:敏感操作留痕,权限控制到菜单/按钮级;
  5. 可运维:备份可恢复、发布可回滚、配置外置化、无硬编码密钥;
  6. 可演进:数据库变更版本化、模块边界清晰、为 K8s/微服务预留路径。

并用量化 SLO 兜底,让"工程级"不再是口号:

维度指标目标值
可用性系统可用率≥ 99.5%(月故障 ≤ 3.6h)
性能API P95 响应时间< 500ms
性能遥测推送端到端延迟< 2s
性能仪表盘/3D 首屏可交互≤ 3s
质量后端行覆盖率≥ 70%(核心模块 ≥ 80%)
安全OWASP Top 10认证/授权/注入/敏感信息 4 类零缺陷
数据备份 RPO / RTORPO ≤ 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 10Spring 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 checkM1
前端 lint0 errorESLint 9M0
前端类型检查0 errorvue-tscM0
构建全绿Maven / ViteM0
后端单测100% 通过JUnit5M1
E2E 冒烟核心链路 100% 通过PlaywrightM1
安全扫描0 高危依赖OWASP dependency-checkM1

生产上线检查单: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 | 开源项目

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP