改进建议
按优先级与投入产出排序,所有结论均有代码佐证(见文末事实锚点)。
P0 — 立即处理(安全 / 低成本高收益)
- 清理仓库内敏感配置:将第三方凭据、邮箱配置和默认口令统一改为环境变量占位;吊销并轮换已暴露风险的凭据;示例配置使用无意义占位值,避免「示例即生产」。
- 建立 CI 流水线:至少跑后端
go test ./... + go vet + golangci-lint、前端vue-tsc + vitest + eslint,接入gitleaks密钥扫描。测试资产已就绪,这是性价比最高的一步。 - 统一网关鉴权:把 JWT 校验从 8 个业务服务上移到网关,业务服务只信任网关注入的身份头,消除 8 份重复鉴权、收敛密钥。
P1 — 中期(架构定调,关键决策)
- 明确架构定位——二选一,停止骑墙:
- 路线 A(推荐,低风险):收敛为模块化单体。承认现状本质是单体,合并成 1 个进程(或少数几个),保留
pkg/{域}模块边界与清晰的包依赖规则(用go-arch-lint约束依赖方向)。立刻获得部署简单、调试容易、事务一致的收益,去掉网关转发与多份配置的无谓开销。适合当前团队规模。 - 路线 B:补齐真正的微服务。若确有独立伸缩/发布/团队并行的硬需求,则需:拆分 module 或切断 service 层跨域 import(改 HTTP/gRPC + 防腐层)、按域拆库或分 schema、每服务独立容器与独立 CI/CD、引入服务发现与链路追踪。成本高,需明确收益支撑。
- 路线 A(推荐,低风险):收敛为模块化单体。承认现状本质是单体,合并成 1 个进程(或少数几个),保留
- 引入 repository 层:在 service 与
app.DB之间加一层接口,隔离 GORM 与表结构,提升可测试性与复杂查询复用。 - 多租户隔离加固:从「逐查询 opt-in Scope」改为「连接/会话级默认租户过滤 + 显式 opt-out」,并增加跨租户访问的运行时断言与告警。
P2 — 长期优化方向
- 可观测性:项目已间接依赖 OpenTelemetry/Prometheus 但未主动接入。补齐结构化日志(traceId 串联,
gin_core已有traceIdHandler)、指标、链路追踪三件套并接 Grafana。 - 服务级容器化:若走路线 B,把单容器 9 进程拆成 9 个容器,日志/重启/扩缩容下沉到服务粒度,引入 K8s 或 compose profiles。
- 异步解耦:已引入 RabbitMQ 但
config.default.yml默认useRabbitMQ: false。审计日志、通知、AI 分析、跨域副作用适合走消息队列异步化,降低跨域同步调用耦合。 - 前端:token 存储安全加固(CSP / httpOnly Cookie 评估)、大依赖(xlsx/echarts)异步加载与体积监控、按域补充 Pinia store。
- 统一仓库策略:改用 git submodule 规范管理
backend/frontend,或合并为 monorepo(配合 CI path filter 分别构建)。同时补回缺失的ai-service/或从 compose 移除,消除文档与现实偏差。
优先级速查表
| # | 改进项 | 类别 | 优先级 | 投入 | 风险 |
|---|---|---|---|---|---|
| 1 | 清理敏感配置 + 轮换 | 安全 | P0 | 低 | 低 |
| 2 | 建立 CI(测试/lint/密钥扫描) | 工程 | P0 | 低 | 低 |
| 3 | 网关统一鉴权 | 架构/安全 | P0 | 中 | 中 |
| 4 | 架构定调(模块化单体 vs 真微服务) | 架构 | P1 | 高 | 中 |
| 5 | 引入 repository 层 | 分层 | P1 | 中 | 低 |
| 6 | 多租户隔离改默认过滤 | 安全 | P1 | 中 | 中 |
| 7 | 可观测性三件套 | 运维 | P2 | 中 | 低 |
| 8 | 服务级容器化 | 部署 | P2 | 高 | 中 |
| 9 | 消息队列异步解耦 | 架构 | P2 | 中 | 中 |
| 10 | 前端安全/性能优化 | 前端 | P2 | 低 | 低 |
| 11 | 统一仓库策略 / 补 ai-service | 工程 | P2 | 低 | 低 |
事实锚点索引
| 结论 | 依据文件 |
|---|---|
| Polyrepo + 嵌套 Git,无 submodule | README.md:9-30,根目录无 .gitmodules |
| ai-service 被引用但缺失 | docker-compose.yml:135-175,根目录无 ai-service/ |
| 9 服务共享 module/entity | backend/go.mod:1、backend/model/entity/ |
| service 跨域直连 | pkg/trade import crm/logistics/system service 等 |
| 共享单库 | config.default.yml:18-26 各服务 dbName: airsky |
| 单容器多进程 | Dockerfile:13-21、scripts/docker-start.sh:22-35 |
| 网关仅反向代理 | pkg/gateway/router/router.go:22-76 |
| 鉴权下沉各服务 | 各 pkg/*/router/router.go 挂 middleware.JWT |
| 无 repository 层 | customer_service.go:29,66 直接用 app.DB |
| 敏感配置治理不足 | 具体文件位置已在公开版中脱敏 |
| 无 CI/CD | 无 .github/workflows、.gitlab-ci.yml、Jenkinsfile |
| 测试资产 | 后端 110 个 _test.go、前端 70 个测试 + playwright.config.ts |
详细权限维度分析见 权限体系分析。