官网 · 文档中心 · 技术架构与选型

技术架构与选型

分层、模块化与扩展性 · 云驰智运 YunChi · Smart Logistics Cloud

07 - 技术架构与技术选型

1. 架构原则

  1. 单体起步、模块化、预留拆分:业务边界清晰(DDD),后期可平滑拆微服务
  2. 数据隔离优先:多租户 + 多分站行级隔离贯穿全系统
  3. 可观测:日志、指标、链路追踪三位一体
  4. 可扩展:核心抽象(打印、支付、地图、短信)使用适配器模式

2. 技术栈总览

┌─────────────────────────────────────────────────────────┐
│  客户端                                                   │
│  ├── PC 后台 (Vue 3 + Vite + Element Plus)               │
│  └── uni-app (Vue 3, 多角色分包,H5/小程序/App)           │
├─────────────────────────────────────────────────────────┤
│  接入层 (Nginx + WAF)                                    │
├─────────────────────────────────────────────────────────┤
│  应用层 (Spring Boot 3.2 多模块单体)                     │
│  ├── 网关/限流/鉴权 (Spring Security + JWT)              │
│  ├── 业务模块 (auth/tenant/user/vehicle/cargo/order/    │
│  │              dispatch/track/finance/print/notify)    │
│  └── Open API (供 ERP/TMS 对接)                          │
├─────────────────────────────────────────────────────────┤
│  中间件                                                   │
│  ├── MySQL 8 (主从)                                      │
│  ├── Redis 7 (哨兵)                                      │
│  ├── RabbitMQ (异步/广播)                                │
│  ├── MinIO (对象存储)                                    │
│  └── Elasticsearch (订单搜索, 二期)                       │
├─────────────────────────────────────────────────────────┤
│  第三方                                                   │
│  ├── 高德地图 / 短信 / 微信支付 / 支付宝 / 发票          │
│  └── 车辆核验、OCR、活体认证                              │
├─────────────────────────────────────────────────────────┤
│  可观测                                                   │
│  └── Prometheus + Grafana + Loki + Tempo                │
└─────────────────────────────────────────────────────────┘

3. 模块划分(DDD 边界)

模块 职责 主要聚合根
logistics-common 工具、统一响应、异常、BaseEntity -
logistics-auth 认证、JWT、RBAC、权限拦截器 User, Role, Permission
logistics-tenant 多租户、多分站 Tenant, Branch
logistics-user 货主、车主、企业员工 Shipper, Driver, Staff
logistics-vehicle 自有车队、个人车辆审核 Vehicle, Fleet
logistics-cargo 货源 Cargo
logistics-order 订单、抢单/派单、跨分站中转 Order, Transfer
logistics-dispatch 调度、发车单 Dispatch
logistics-track 轨迹、签收 Track, Sign
logistics-finance 结算、对账、发票、支付 Settle, Invoice
logistics-print 模板、打印日志、单据快照 PrintTemplate, PrintLog
logistics-notify 站内信、短信、推送 Message
logistics-admin 平台后台聚合 -
logistics-app 启动模块 -
logistics-gateway 预留:网关 -

4. 关键技术决策

决策 选择 理由
单体 vs 微服务 单体起步 1-2 人团队,运维简单;模块化后可拆
ORM MyBatis Plus 灵活、可读 SQL、便于自定义拦截器
鉴权 Spring Security + JWT 标准;RBAC 自研拦截器
多租户隔离 共享库行级隔离 实现简单,性能可接受;规模化后再分库
异步 RabbitMQ 成熟、Spring 集成好
文件 MinIO S3 协议,私有化友好
缓存 Redis 7(哨兵) 抢单 Lua、会话、热数据
实时推送 WebSocket 派单/状态变更
移动跨端 uni-app 一码三端,蓝牙打印生态成熟
PC 框架 Vue 3 + Vite + Element Plus 团队熟悉、社区活跃
PC 打印 Lodop / C-Lodop 行业标准、支持多种打印机
移动打印 uni-app 蓝牙 + ESC/POS 指令 兼容性广
部署 Docker Compose 起步简单;规模化迁 K8s
CI/CD GitHub Actions / GitLab CI 主流
监控 Prometheus + Grafana + Loki 开源、自托管

5. 单体 → 微服务演进路径

当出现下列信号时考虑拆分: - 单模块代码 > 5 万行 - 团队规模 > 10 人 - 某模块(如打印、调度)需独立扩缩容 - 单体启动 > 60s、内存 > 4G

拆分顺序建议: 1. 先拆 print 服务(IO 密集,独立扩容) 2. 再拆 track(高频写入,可独立 DB) 3. 再拆 notify(异步消费) 4. 最后拆 order / dispatch / finance

拆分时引入: - Spring Cloud Gateway - Nacos 注册/配置 - Seata 分布式事务(必要时) - Sentinel 熔断限流

6. 接口风格

  • RESTful + JSON
  • URL:/api/v1/{module}/{resource}
  • 统一响应:{ code, msg, data, traceId }
  • 错误码:6 位(业务域 2 位 + 错误 4 位)
  • 鉴权:Authorization: Bearer <jwt>
  • 多租户:JWT 内含 tenantId + branchId,无需显式传

7. 性能目标

接口 P95 备注
登录 / 列表查询 < 300 ms 含权限校验
抢单 < 100 ms Redis Lua
派单 < 500 ms 含 MQ 投递
打印生成 < 1 s 服务端模板渲染
大屏聚合 < 2 s 缓存 + 预聚合

8. 安全

  • HTTPS 强制
  • JWT + Refresh Token
  • 敏感字段(手机号、身份证)AES 加密存储 + 脱敏展示
  • 操作日志全量记录
  • SQL 注入、XSS、CSRF 防护
  • 越权检测(数据权限拦截器全局生效)