721 lines
58 KiB
Markdown
721 lines
58 KiB
Markdown
# CPTE WMS 微服务架构文档
|
||
|
||
## 1. 架构概述
|
||
|
||
### 1.1 系统定位
|
||
|
||
CPTE WMS 是基于 Spring Boot 3.5.5 + Spring Cloud 2025.0.0 构建的仓库管理系统微服务架构,采用 Kubernetes 进行容器编排部署。
|
||
|
||
### 1.2 架构风格
|
||
|
||
- **微服务架构**: 业务按领域拆分为独立服务
|
||
- **服务网格**: 基于 Kubernetes Service 的服务发现
|
||
- **事件驱动**: Redis 发布订阅实现异步通信
|
||
- **容器化部署**: Docker + Kubernetes
|
||
|
||
---
|
||
|
||
## 2. 系统架构图
|
||
|
||
### 2.1 整体架构
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 外部访问层 │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Nginx Ingress │ │
|
||
│ │ (负载均衡 / SSL 终止 / 路由) │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────┘ │
|
||
└────────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 应用服务层 │
|
||
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Namespace: cpte-wms │ │
|
||
│ │ │ │
|
||
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
|
||
│ │ │ Basic Service │ │Inbound Service │ │Outbound Service│ │ │
|
||
│ │ │ 基础服务 │ │ 入库服务 │ │ 出库服务 │ │ │
|
||
│ │ │ Port: 8001 │ │ Port: 8002 │ │ Port: 8003 │ │ │
|
||
│ │ │ /cpte-wms-basic│ │/cpte-wms-inbound│ │/cpte-wms-outbound│ │ │
|
||
│ │ └───────┬────────┘ └───────┬────────┘ └───────┬────────┘ │ │
|
||
│ │ │ │ │ │ │
|
||
│ │ │ ┌──────────────┼───────────────┐ │ │ │
|
||
│ │ │ │ │ │ │ │ │
|
||
│ │ ▼ ▼ ▼ ▼ ▼ │ │
|
||
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
|
||
│ │ │Inventory Service│ │Schedule Service│ │ System Service │ │ │
|
||
│ │ │ 库存服务 │ │ 调度服务 │ │ 系统服务 │ │ │
|
||
│ │ │ Port: 8004 │ │ Port: 8005 │ │ Port: 8000 │ │ │
|
||
│ │ │/cpte-wms-inventory│ │/cpte-wms-schedule│ │/cpte-wms │ │ │
|
||
│ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ cpte-wms-api (共享层) │ │ │
|
||
│ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │
|
||
│ │ │ │ Feign Client│ │ DTO │ │ 分布式锁 │ │ 工具类 │ │ │ │
|
||
│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │
|
||
│ │ └────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ └──────────────────────────────────────────────────────────────────────────┘ │
|
||
└────────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 基础设施层 │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ MySQL │ │ Redis │ │ MinIO │ │ Nacos │ │
|
||
│ │ 数据持久化 │ │ 缓存/锁/消息 │ │ 文件存储 │ │ 配置中心 │ │
|
||
│ │ Port: 53306 │ │ Port: 6379 │ │ │ │ │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
└────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 服务拓扑图
|
||
|
||
```
|
||
┌─────────────────┐
|
||
│ System Service │
|
||
│ 系统服务 │
|
||
│ Port: 8000 │
|
||
└────────┬────────┘
|
||
│
|
||
┌───────────────────────────┼───────────────────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ Basic Service │◄───────▶│Inbound Service │◄───────▶│Outbound Service │
|
||
│ 基础服务 │ Feign │ 入库服务 │ Feign │ 出库服务 │
|
||
│ Port: 8001 │ │ Port: 8002 │ │ Port: 8003 │
|
||
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
||
│ │ │
|
||
│ Feign │ Feign │ Feign
|
||
│ │ │
|
||
└──────────────┬────────────┴────────────┬──────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐
|
||
│Inventory Service│ │Schedule Service │
|
||
│ 库存服务 │ │ 调度服务 │
|
||
│ Port: 8004 │ │ Port: 8005 │
|
||
└─────────────────┘ └─────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 服务清单
|
||
|
||
### 3.1 核心服务
|
||
|
||
| 服务名称 | 服务标识 | 端口 | Context Path | 职责 |
|
||
|---------|---------|------|-------------|------|
|
||
| 基础服务 | cpte-wms-basic | 8001 | /cpte-wms-basic | 物料、库区、点位、容器等基础数据管理 |
|
||
| 入库服务 | cpte-wms-inbound | 8002 | /cpte-wms-inbound | ASN 管理、收货、上架等入库业务 |
|
||
| 出库服务 | cpte-wms-outbound | 8003 | /cpte-wms-outbound | 拣货、发货、波次等出库业务 |
|
||
| 库存服务 | cpte-wms-inventory | 8004 | /cpte-wms-inventory | 库存查询、盘点、移库等库存业务 |
|
||
| 调度服务 | cpte-wms-schedule | 8005 | /cpte-wms-schedule | AGV 调度、输送线控制、定时任务 |
|
||
| 系统服务 | cpte-wms | 8000 | /cpte-wms | 用户、权限、系统管理等 |
|
||
|
||
### 3.2 共享模块
|
||
|
||
| 模块名称 | Artifact ID | 职责 |
|
||
|---------|-------------|------|
|
||
| 公共 API | cpte-wms-api | Feign Client、DTO、分布式锁、工具类 |
|
||
| 基础核心 | cpte-boot-base-core | 公共组件、配置、异常处理 |
|
||
| 系统业务 | cpte-system-biz | 用户权限、字典、日志等 |
|
||
|
||
---
|
||
|
||
## 4. 服务通信架构
|
||
|
||
### 4.1 通信方式
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 服务通信方式 │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 1. 同步通信 (OpenFeign) │
|
||
│ ┌─────────┐ HTTP/REST ┌─────────┐ │
|
||
│ │ Service │ ──────────────▶ │ Service │ │
|
||
│ │ A │ │ B │ │
|
||
│ └─────────┘ └─────────┘ │
|
||
│ │
|
||
│ 2. 异步通信 (Redis Pub/Sub) │
|
||
│ ┌─────────┐ Publish ┌───────┐ Subscribe ┌─────────┐
|
||
│ │ Service │ ─────────────▶ │ Redis │ ──────────────▶ │ Service │
|
||
│ │ A │ │ │ │ B │
|
||
│ └─────────┘ └───────┘ └─────────┘
|
||
│ │
|
||
│ 3. 分布式锁 (Redisson) │
|
||
│ ┌─────────┐ Lock/Unlock ┌───────┐ │
|
||
│ │ Service │ ◄────────────────▶ │ Redis │ │
|
||
│ │ A │ │ │ │
|
||
│ └─────────┘ └───────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.2 OpenFeign 配置
|
||
|
||
```yaml
|
||
feign:
|
||
client:
|
||
wms-basic:
|
||
url: http://cpte-wms-basic:8001/cpte-wms-basic
|
||
config:
|
||
default:
|
||
connectTimeout: 5000 # 连接超时 5 秒
|
||
readTimeout: 10000 # 读取超时 10 秒
|
||
loggerLevel: INFO # 日志级别
|
||
```
|
||
|
||
**Feign 核心配置**:
|
||
- HTTP 客户端: OkHttp
|
||
- 连接超时: 5 秒
|
||
- 读取超时: 10 秒
|
||
- 重试策略: 初始间隔 100ms,最大间隔 1 秒,最多重试 3 次
|
||
|
||
### 4.3 服务调用关系
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 服务调用依赖关系 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Inbound Service (入库服务) │
|
||
│ ├── Feign → Basic Service (获取物料、库区信息) │
|
||
│ ├── Feign → Inventory Service (更新库存) │
|
||
│ └── Feign → Schedule Service (触发 AGV 任务) │
|
||
│ │
|
||
│ Outbound Service (出库服务) │
|
||
│ ├── Feign → Basic Service (获取物料、点位信息) │
|
||
│ ├── Feign → Inventory Service (扣减库存、锁定库存) │
|
||
│ └── Feign → Schedule Service (触发拣货任务) │
|
||
│ │
|
||
│ Inventory Service (库存服务) │
|
||
│ ├── Feign → Basic Service (获取物料、容器信息) │
|
||
│ └── Redisson → 分布式锁 (库存操作锁) │
|
||
│ │
|
||
│ Schedule Service (调度服务) │
|
||
│ ├── Feign → Basic Service (获取点位信息) │
|
||
│ ├── Feign → Inventory Service (库存校验) │
|
||
│ └── Quartz → 定时任务调度 │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 数据架构
|
||
|
||
### 5.1 数据存储架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 数据存储架构 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ MySQL (主数据库) │ │
|
||
│ │ cpte-wms 数据库 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ base_item │ │ base_area │ │ base_point │ 基础数据 │ │
|
||
│ │ │ 物料表 │ │ 库区表 │ │ 点位表 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ data_asn │ │asn_detail │ │receive_record│ 入库数据 │ │
|
||
│ │ │ 入库单 │ │ 入库明细 │ │ 收货记录 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ sys_user │ │ sys_role │ │ sys_permission│ 系统数据 │ │
|
||
│ │ │ 用户表 │ │ 角色表 │ │ 权限表 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Redis (缓存/消息) │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Session │ │ 数据缓存 │ │ 分布式锁 │ │ │
|
||
│ │ │ 会话存储 │ │ 热点数据 │ │ Redisson │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Pub/Sub │ │ 消息队列 │ │ │
|
||
│ │ │ 事件发布 │ │ 异步任务 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.2 数据库连接池
|
||
|
||
```yaml
|
||
Druid 连接池配置:
|
||
initial-size: 5 # 初始连接数
|
||
min-idle: 5 # 最小空闲连接
|
||
maxActive: 1000 # 最大活跃连接
|
||
maxWait: 60000 # 最大等待时间 60s
|
||
validationQuery: SELECT 1 # 验证 SQL
|
||
```
|
||
|
||
### 5.3 Redis 部署模式
|
||
|
||
支持多种部署模式:
|
||
- **STANDALONE**: 单机模式
|
||
- **MASTER_SLAVE**: 主从模式
|
||
- **SENTINEL**: 哨兵模式
|
||
- **CLUSTER**: 集群模式
|
||
|
||
---
|
||
|
||
## 6. 部署架构
|
||
|
||
### 6.1 Kubernetes 部署架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ Kubernetes Cluster │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌───────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Namespace: cpte-wms │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ Workload (Deployment) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐│ │ │
|
||
│ │ │ │ Pod │ │ Pod │ │ Pod │ │ Pod │ │ Pod ││ │ │
|
||
│ │ │ │ Basic │ │ Inbound │ │Outbound │ │Inventory│ │Schedule ││ │ │
|
||
│ │ │ │ :8001 │ │ :8002 │ │ :8003 │ │ :8004 │ │ :8005 ││ │ │
|
||
│ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘│ │ │
|
||
│ │ │ │ │ │ │ │ │ │ │
|
||
│ │ └───────┼───────────┼───────────┼───────────┼───────────┼──────┘ │ │
|
||
│ │ │ │ │ │ │ │ │
|
||
│ │ ┌───────┴───────────┴───────────┴───────────┴───────────┴──────┐ │ │
|
||
│ │ │ Service (ClusterIP) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │
|
||
│ │ │ │cpte-wms │ │cpte-wms │ │cpte-wms │ │inventory│ │schedule │ │ │ │
|
||
│ │ │ │ -basic │ │ -inbound│ │ -outbound│ │ -service│ │ -service│ │ │ │
|
||
│ │ │ │ :8001 │ │ :8002 │ │ :8003 │ │ :8004 │ │ :8005 │ │ │ │
|
||
│ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │
|
||
│ │ └───────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌───────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ ConfigMap & Secret │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ ConfigMap: application.yml, 环境变量 │ │ │
|
||
│ │ │ Secret: DB_PASSWORD, REDIS_PASSWORD, SIGNATURE_SECRET │ │ │
|
||
│ │ └───────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌───────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ PersistentVolumeClaim │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ cpte-wms-basic-data (10Gi) - 文件上传存储 │ │ │
|
||
│ │ │ cpte-wms-inbound-data (10Gi) - 文件上传存储 │ │ │
|
||
│ │ └───────────────────────────────────────────────────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌───────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 基础设施服务 │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
||
│ │ │ MySQL │ │ Redis │ │ Nginx │ │ MinIO │ │ │
|
||
│ │ │ Service │ │ Service │ │ Ingress │ │ OSS │ │ │
|
||
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
|
||
│ └───────────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 6.2 服务资源配置
|
||
|
||
| 服务 | CPU Request | CPU Limit | Memory Request | Memory Limit | 副本数 |
|
||
|-----|-------------|-----------|----------------|--------------|--------|
|
||
| Basic | 500m | 2000m | 1Gi | 2Gi | 1 |
|
||
| Inbound | 500m | 2000m | 1Gi | 2Gi | 1 |
|
||
| Outbound | 100m | 500m | 256Mi | 1Gi | 1 |
|
||
| Inventory | 100m | 500m | 256Mi | 1Gi | 1 |
|
||
| Schedule | 100m | 500m | 256Mi | 1Gi | 1 |
|
||
|
||
### 6.3 健康检查配置
|
||
|
||
```yaml
|
||
探针配置:
|
||
livenessProbe:
|
||
path: /{context}/actuator/health/liveness
|
||
initialDelaySeconds: 90-180
|
||
periodSeconds: 20
|
||
timeoutSeconds: 10
|
||
failureThreshold: 3
|
||
|
||
readinessProbe:
|
||
path: /{context}/actuator/health/readiness
|
||
initialDelaySeconds: 45-120
|
||
periodSeconds: 10-15
|
||
timeoutSeconds: 5-10
|
||
failureThreshold: 3
|
||
|
||
startupProbe:
|
||
path: /{context}/actuator/health/liveness
|
||
initialDelaySeconds: 0-30
|
||
periodSeconds: 10
|
||
failureThreshold: 30-90
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 安全架构
|
||
|
||
### 7.1 认证授权架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 认证授权架构 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ Client │─────▶│ Nginx │─────▶│ Service │ │
|
||
│ │ │ │ Ingress │ │ Instance │ │
|
||
│ └─────────┘ └─────────────┘ └──────┬──────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────┐ │
|
||
│ │ JwtFilter │ │
|
||
│ │ - Token 解析 │ │
|
||
│ │ - Token 验证 │ │
|
||
│ │ - Token 刷新 │ │
|
||
│ └──────────┬──────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────┐ │
|
||
│ │ ShiroRealm │ │
|
||
│ │ - 用户认证 │ │
|
||
│ │ - 角色校验 │ │
|
||
│ │ - 权限校验 │ │
|
||
│ └──────────┬──────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────┐ │
|
||
│ │ Business Logic │ │
|
||
│ └─────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 7.2 敏感信息管理
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ Kubernetes Secret 管理 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Secret 类型: Opaque │
|
||
│ │
|
||
│ 存储的敏感信息: │
|
||
│ ├── MYSQL_HOST # MySQL 主机地址 │
|
||
│ ├── MYSQL_PORT # MySQL 端口 │
|
||
│ ├── MYSQL_DATABASE # 数据库名称 │
|
||
│ ├── MYSQL_USERNAME # 数据库用户名 │
|
||
│ ├── MYSQL_PASSWORD # 数据库密码 │
|
||
│ ├── REDIS_HOST # Redis 主机地址 │
|
||
│ ├── REDIS_PORT # Redis 端口 │
|
||
│ ├── REDIS_PASSWORD # Redis 密码 │
|
||
│ ├── MAIL_HOST # 邮件服务器地址 │
|
||
│ ├── MAIL_USERNAME # 邮件用户名 │
|
||
│ ├── MAIL_PASSWORD # 邮件密码 │
|
||
│ └── SIGNATURE_SECRET # 接口签名密钥 │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 7.3 服务间认证
|
||
|
||
```java
|
||
// Feign Token 拦截器
|
||
public class FeignTokenInterceptor implements RequestInterceptor {
|
||
@Override
|
||
public void apply(RequestTemplate template) {
|
||
// 从当前上下文获取 Token 并传递给下游服务
|
||
String token = getCurrentToken();
|
||
template.header("Authorization", "Bearer " + token);
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 可观测性架构
|
||
|
||
### 8.1 监控架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 监控架构 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Prometheus 采集层 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
||
│ │ │ Basic │ │ Inbound │ │Outbound │ │Inventory│ │Schedule │ │ │
|
||
│ │ │ :8001 │ │ :8002 │ │ :8003 │ │ :8004 │ │ :8005 │ │ │
|
||
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │
|
||
│ │ │ │ │ │ │ │ │
|
||
│ │ └───────────┴───────────┴───────────┴───────────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ /actuator/prometheus │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Prometheus Server │ │
|
||
│ │ - 指标采集 │ │
|
||
│ │ - 数据存储 │ │
|
||
│ │ - 告警规则 │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Grafana 可视化 │ │
|
||
│ │ - 仪表盘展示 │ │
|
||
│ │ - 告警通知 │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 8.2 Actuator 端点
|
||
|
||
| 端点 | 路径 | 说明 |
|
||
|-----|------|------|
|
||
| health | /actuator/health | 健康状态 |
|
||
| info | /actuator/info | 应用信息 |
|
||
| prometheus | /actuator/prometheus | Prometheus 指标 |
|
||
| metrics | /actuator/metrics | JVM 指标 |
|
||
|
||
### 8.3 日志架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 日志架构 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
||
│ │ Pod │ │ Pod │ │ Pod │ │ Pod │ │ Pod │ │
|
||
│ │ stdout │ │ stdout │ │ stdout │ │ stdout │ │ stdout │ │
|
||
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
|
||
│ │ │ │ │ │ │
|
||
│ └───────────┴───────────┴───────────┴───────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 日志收集器 (Filebeat/Fluentd) │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Elasticsearch │ │
|
||
│ │ - 日志存储 │ │
|
||
│ │ - 全文检索 │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Kibana │ │
|
||
│ │ - 日志查询 │ │
|
||
│ │ - 可视化分析 │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 高可用架构
|
||
|
||
### 9.1 服务高可用
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 服务高可用设计 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 1. 多副本部署 │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Deployment (replicas: N) │ │
|
||
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
||
│ │ │ Pod 1 │ │ Pod 2 │ │ Pod N │ │ │
|
||
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 2. 滚动更新 │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ strategy: │ │
|
||
│ │ type: RollingUpdate │ │
|
||
│ │ rollingUpdate: │ │
|
||
│ │ maxSurge: 1 # 最多多 1 个 Pod │ │
|
||
│ │ maxUnavailable: 0 # 最少可用 Pod 数 │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 3. 健康检查 │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ livenessProbe → 存活检查 (失败则重启) │ │
|
||
│ │ readinessProbe → 就绪检查 (失败则从 Service 移除) │ │
|
||
│ │ startupProbe → 启动检查 (慢启动保护) │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 4. 服务降级 │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ @FeignClient(fallbackFactory = BasicServiceFallbackFactory)│ │
|
||
│ │ → 服务不可用时返回默认响应 │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 9.2 数据高可用
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 数据高可用设计 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ MySQL 高可用: │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Master │ ───▶ │ Slave │ │ │
|
||
│ │ │ (读写) │ │ (只读) │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ Redis 高可用: │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Master │ ───▶ │ Slave │ ◀─── │ Sentinel │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ │ (监控) │ │ │
|
||
│ │ └─────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 10. 技术栈清单
|
||
|
||
### 10.1 核心框架
|
||
|
||
| 组件 | 版本 | 用途 |
|
||
|-----|------|------|
|
||
| Spring Boot | 3.5.5 | 应用框架 |
|
||
| Spring Cloud | 2025.0.0 | 微服务治理 |
|
||
| JDK | 17 | 运行环境 |
|
||
|
||
### 10.2 数据层
|
||
|
||
| 组件 | 版本 | 用途 |
|
||
|-----|------|------|
|
||
| MyBatis Plus | 3.5.12 | ORM 框架 |
|
||
| Druid | 1.2.24 | 连接池 |
|
||
| MySQL | 8.0.27 | 关系数据库 |
|
||
| Redis | - | 缓存/分布式锁 |
|
||
|
||
### 10.3 服务通信
|
||
|
||
| 组件 | 版本 | 用途 |
|
||
|-----|------|------|
|
||
| OpenFeign | 4.2.0 | 服务调用 |
|
||
| OkHttp | - | HTTP 客户端 |
|
||
| Redisson | 3.27.0 | 分布式锁 |
|
||
|
||
### 10.4 容器化
|
||
|
||
| 组件 | 用途 |
|
||
|-----|------|
|
||
| Docker | 容器运行时 |
|
||
| Kubernetes | 容器编排 |
|
||
| KubeSphere | 容器平台 |
|
||
|
||
### 10.5 其他组件
|
||
|
||
| 组件 | 版本 | 用途 |
|
||
|-----|------|------|
|
||
| Knife4j | 4.5.0 | API 文档 |
|
||
| Quartz | - | 定时任务 |
|
||
| Shiro | 2.0.4 | 安全框架 |
|
||
| JWT | 4.5.0 | Token 认证 |
|
||
|
||
---
|
||
|
||
## 11. 服务依赖关系图
|
||
|
||
```
|
||
┌─────────────────┐
|
||
│ System Service │
|
||
│ (用户/权限) │
|
||
└────────┬────────┘
|
||
│
|
||
│ 认证
|
||
│
|
||
┌──────────────────────────────┼──────────────────────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ Basic Service │◄───────────│Inbound Service │───────────▶│Outbound Service │
|
||
│ (基础数据) │ Feign │ (入库业务) │ Feign │ (出库业务) │
|
||
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
||
│ │ │
|
||
│ Feign │ Feign │ Feign
|
||
│ │ │
|
||
│ ┌────────────────────┼────────────────────┐ │
|
||
│ │ │ │ │
|
||
▼ ▼ ▼ ▼ ▼
|
||
┌─────────────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐
|
||
│ Inventory Service │◄───│Schedule Service │───▶│ 基础设施 │
|
||
│ (库存业务) │ │ (调度任务) │ │ ┌─────┐ ┌─────┐ │
|
||
└─────────────────────────┘ └─────────────────┘ │ │MySQL│ │Redis│ │
|
||
│ └─────┘ └─────┘ │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 附录
|
||
|
||
### A. 服务端口汇总
|
||
|
||
| 服务 | 容器端口 | Service 端口 | ClusterIP |
|
||
|-----|---------|-------------|-----------|
|
||
| cpte-wms-basic | 8001 | 8001 | 10.233.42.190 |
|
||
| cpte-wms-inbound | 8002 | 8002 | 10.233.51.195 |
|
||
| cpte-wms-outbound | 8003 | 8003 | - |
|
||
| inventory-service | 8004 | 8004 | - |
|
||
| outbound-service | 8003 | 8003 | - |
|
||
|
||
### B. Context Path 汇总
|
||
|
||
| 服务 | Context Path |
|
||
|-----|-------------|
|
||
| Basic | /cpte-wms-basic |
|
||
| Inbound | /cpte-wms-inbound |
|
||
| Outbound | /cpte-wms-outbound |
|
||
| Inventory | /cpte-wms-inventory |
|
||
| Schedule | /cpte-wms-schedule |
|
||
|
||
### C. 关键配置项
|
||
|
||
| 配置项 | 说明 |
|
||
|-------|------|
|
||
| spring.application.name | 服务名称 |
|
||
| server.port | 服务端口 |
|
||
| server.servlet.context-path | 上下文路径 |
|
||
| feign.client.wms-basic.url | 基础服务地址 |
|
||
| jeecg.redisson.address | Redis 地址 |
|