# WMS 微服务 K8s 架构总览 ## 📐 架构设计 ### 整体架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 用户层 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Web │ │ App │ │ 第三方 │ │ MOM 系统 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 接入层 │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Nginx Ingress Controller │ │ │ │ • 统一入口 • SSL 终止 • 路由转发 │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Kubernetes Cluster │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 服务网格层 │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ wms-basic-service (基础服务) │ │ │ │ │ │ - 物品管理 • 区域管理 • 库位管理 │ │ │ │ │ │ - 副本数:2-10 (HPA 自动伸缩) │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ wms-inbound-service (入库服务) │ │ │ │ │ │ - ASN 管理 • 收货 • 上架 • MOM 对接 │ │ │ │ │ │ - 副本数:2-10 (HPA 自动伸缩) │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ wms-outbound-service (出库服务) │ │ │ │ │ │ - 拣货管理 • 下架 • 发货 • MOM 对接 │ │ │ │ │ │ - 副本数:2-10 (HPA 自动伸缩) │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ wms-inventory-service(库存服务) │ │ │ │ │ │ - 库存管理 • 盘点 • 流水 • 统计分析 │ │ │ │ │ │ - 副本数:2-10 (HPA 自动伸缩) │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ wms-schedule-service (调度服务) │ │ │ │ │ │ - AGV 调度 • 输送线 • 定时任务 │ │ │ │ │ │ - 副本数:2-10 (HPA 自动伸缩) │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 服务间调用 (OpenFeign) │ │ │ │ │ │ │ │ 入库服务 ──→ 基础服务 (验证物品/库位) │ │ │ │ 入库服务 ──→ 库存服务 (增加库存) │ │ │ │ 入库服务 ──→ 调度服务 (创建上架任务) │ │ │ │ │ │ │ │ 出库服务 ──→ 基础服务 (验证物品/库位) │ │ │ │ 出库服务 ──→ 库存服务 (扣减库存) │ │ │ │ 出库服务 ──→ 调度服务 (创建下架任务) │ │ │ │ │ │ │ │ 调度服务 ──→ 基础服务 (获取库位信息) │ │ │ │ 调度服务 ──→ 库存服务 (获取库存信息) │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 数据层 │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ MySQL Cluster │ │ Redis Cluster │ │ │ │ • 主从复制 │ │ • 哨兵模式 │ │ │ │ • 数据持久化 │ │ • 缓存/会话 │ │ │ └──────────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 🎯 核心特性 ### 1. 微服务拆分 | 服务 | 职责 | 数据库表 | 接口前缀 | |------|------|---------|---------| | **基础服务** | 物品、区域、库位管理 | wms_basic_* | /api/wms/basic | | **入库服务** | ASN、收货、上架 | wms_inbound_* | /api/wms/inbound | | **出库服务** | 拣货、下架、发货 | wms_outbound_* | /api/wms/outbound | | **库存服务** | 库存、盘点、流水 | wms_inventory_* | /api/wms/inventory | | **调度服务** | AGV、输送线调度 | wms_schedule_* | /api/wms/schedule | ### 2. K8s 原生能力 | 功能 | K8s 资源 | 说明 | |------|---------|------| | **服务发现** | Service + CoreDNS | 自动 DNS 解析 | | **负载均衡** | Service | 自动负载均衡 | | **配置管理** | ConfigMap | 统一配置管理 | | **密钥管理** | Secret | 敏感信息加密 | | **健康检查** | Liveness/Readiness Probe | 自动故障恢复 | | **弹性伸缩** | HPA | 自动扩缩容 | | **滚动更新** | Deployment | 零停机部署 | | **服务暴露** | Ingress | 统一入口 | ### 3. 服务间调用(OpenFeign) ```java // 声明式服务调用 @FeignClient( name = "wms-inventory-service", url = "http://wms-inventory-service:80", fallbackFactory = InventoryServiceFallbackFactory.class ) public interface InventoryServiceClient { @GetMapping("/api/wms/inventory/query") Result> queryInventory( @RequestParam("itemId") String itemId, @RequestParam("pointId") String pointId ); } // 使用示例 @Service public class InboundService { @Autowired private InventoryServiceClient inventoryServiceClient; public void inbound(String itemId, Integer qty) { // 直接调用,像本地方法一样 Result> result = inventoryServiceClient.queryInventory(itemId, null); } } ``` --- ## 📊 部署配置 ### 资源配置 ```yaml # 每个服务的资源配置 resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" cpu: "500m" ``` ### HPA 配置 ```yaml # 自动伸缩配置 minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 ``` ### 健康检查 ```yaml # 存活探针(判断容器是否存活) livenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 60 periodSeconds: 10 # 就绪探针(判断是否可接收流量) readinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 30 periodSeconds: 5 ``` --- ## 🔄 典型业务流程 ### 入库流程 ``` 1. 入库服务接收入库请求 ↓ 2. 调用基础服务验证物品和库位 ↓ 3. 调用库存服务增加库存 ↓ 4. 调用调度服务创建 AGV 上架任务 ↓ 5. AGV 执行上架任务 ↓ 6. 库存服务记录库存流水 ``` ### 出库流程 ``` 1. 出库服务接收出库请求 ↓ 2. 调用基础服务验证物品和库位 ↓ 3. 调用库存服务预占库存 ↓ 4. 调用调度服务创建 AGV 下架任务 ↓ 5. AGV 执行下架任务 ↓ 6. 库存服务扣减库存并记录流水 ``` --- ## 🛡️ 高可用设计 ### 1. 多副本部署 - 每个服务至少 2 个副本 - Pod 反亲和性,分散到不同节点 - PDB(Pod Disruption Budget)保证最小可用副本数 ### 2. 自动故障恢复 - Liveness Probe 检测容器健康 - 容器崩溃自动重启 - 节点故障自动迁移 ### 3. 服务降级 - Feign Fallback 提供降级逻辑 - 超时和重试机制 - 熔断保护(可集成 Sentinel) ### 4. 数据持久化 - MySQL 主从复制 - Redis 哨兵模式 - 定期备份 --- ## 📈 监控体系 ### 1. 应用监控 ```yaml # Actuator 端点 management: endpoints: web: exposure: include: health,info,metrics,prometheus ``` - **健康检查**: /actuator/health - **应用信息**: /actuator/info - **性能指标**: /actuator/metrics - **Prometheus**: /actuator/prometheus ### 2. 日志收集 ``` 应用日志 → Fluentd → Elasticsearch → Kibana ``` ### 3. 链路追踪(可选) ``` 应用 → SkyWalking Agent → SkyWalking OAP → UI ``` --- ## 🔒 安全设计 ### 1. 网络安全 - NetworkPolicy 限制 Pod 间通信 - Ingress TLS 加密 - 服务间 mTLS(可选 Istio) ### 2. 认证授权 - JWT Token 认证 - RBAC 权限控制 - API 签名验证 ### 3. 密钥管理 - Kubernetes Secret 加密存储 - 定期轮换密钥 - 最小权限原则 --- ## 🚀 部署流程 ### 开发环境 ```bash # 1. 构建镜像 ./deploy.sh build # 2. 部署到 K8s ./deploy.sh k8s # 3. 查看状态 kubectl get pods -n wms-system ``` ### 生产环境 ```bash # 1. 设置版本标签 export IMAGE_TAG=v1.0.0 # 2. 构建并推送 ./deploy.sh deploy # 3. 验证部署 kubectl rollout status deployment/wms-inbound-service -n wms-system # 4. 监控日志 kubectl logs -f deployment/wms-inbound-service -n wms-system ``` --- ## 📝 最佳实践 ### 1. 服务设计 - ✅ 单一职责原则 - ✅ 接口幂等性 - ✅ 完善的错误处理 - ✅ 统一的响应格式 ### 2. 配置管理 - ✅ 配置与代码分离 - ✅ 敏感信息使用 Secret - ✅ 环境隔离(Namespace) - ✅ 配置版本管理 ### 3. 日志规范 - ✅ 结构化日志(JSON) - ✅ 包含 TraceID - ✅ 合理的日志级别 - ✅ 敏感信息脱敏 ### 4. 性能优化 - ✅ 连接池配置 - ✅ HTTP 压缩 - ✅ 批量接口 - ✅ 合理使用缓存 --- ## 📖 相关文档 - [K8s 部署文档](K8S_DEPLOYMENT.md) - [Feign 使用指南](cpte-wms-service/FEIGN_USAGE.md) - [架构设计文档](cpte-wms-service/ARCHITECTURE.md) --- ## 📞 联系方式 - **技术支持**: cpte@163.com - **API 文档**: http://wms.yourcompany.com/doc.html