15 KiB
15 KiB
WMS 微服务架构设计文档
1. 架构概述
1.1 架构目标
- 将单体 WMS 系统拆分为独立的微服务
- 实现业务解耦,提高系统可维护性
- 支持独立部署和扩展
- 保留原有业务代码作为参考
1.2 架构原则
- 单一职责: 每个服务只负责一个业务领域
- 自治性: 服务可独立开发、部署、扩展
- 轻量级通信: 使用 RESTful API 进行服务间通信
- 数据一致性: 保证最终一致性,支持补偿机制
2. 服务拆分
2.1 服务划分
┌─────────────────────────────────────────────────────────┐
│ WMS 微服务架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 基础服务 │ │ 入库服务 │ │ 出库服务 │ │
│ │ (8001) │ │ (8002) │ │ (8003) │ │
│ │ - 物品管理 │ │ - ASN 管理 │ │ - 拣货管理 │ │
│ │ - 区域管理 │ │ - 收货管理 │ │ - 拣货任务 │ │
│ │ - 点位管理 │ │ - 上架管理 │ │ - 下架管理 │ │
│ │ │ │ - MOM 对接 │ │ - MOM 对接 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 库存服务 │ │ 调度服务 │ │
│ │ (8004) │ │ (8005) │ │
│ │ - 库存管理 │ │ - AGV 调度 │ │
│ │ - 库存流水 │ │ - 海康 AGV │ │
│ │ - 盘点管理 │ │ - 特斯 AGV │ │
│ │ - 统计分析 │ │ - 输送线 │ │
│ │ - 序列号 │ │ - 定时任务 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
2.2 服务职责
2.2.1 基础服务 (cpte-wms-basic-service)
核心职责:
- 管理 WMS 系统的基础数据
主要功能:
- 物品信息管理(Item)
- 仓库区域管理(Area)
- 库位点位管理(Point)
对外接口:
/api/wms/basic/item/**- 物品管理/api/wms/basic/area/**- 区域管理/api/wms/basic/point/**- 点位管理
2.2.2 调度服务 (cpte-wms-schedule-service)
核心职责:
- 提供 AGV 和输送线调度能力
- 管理定时任务
主要功能:
- AGV 任务调度(AgvTask)
- 海康 AGV 对接(HikAgv)
- 特斯 AGV 对接(TesAgv)
- 输送线管理(ConveyorLine)
- 数据同步定时任务
对外接口:
/api/wms/schedule/agv-task/**- AGV 任务/api/wms/schedule/hik-agv/**- 海康 AGV/api/wms/schedule/tes-agv/**- 特斯 AGV/api/wms/schedule/conveyor/**- 输送线
依赖服务:
- 基础服务:获取物品、库位信息
- 库存服务:获取库存信息
2.2.3 入库服务 (cpte-wms-inbound-service)
核心职责:
- 处理所有入库业务流程
- 对接 MOM 系统入库接口
主要功能:
- ASN 单管理(Asn)
- ASN 明细管理(AsnDetail)
- 收货登记(Receive)
- 上架作业
- 收货记录(ReceiveRecord)
- MOM 入库对接
对外接口:
/api/wms/inbound/asn/**- ASN 管理/api/wms/inbound/receive/**- 收货管理/api/wms/inbound/sai-wms/**- MOM 对接
依赖服务:
- 基础服务:获取物品、库位信息
- 调度服务:生成 AGV 上架任务
- 库存服务:更新库存
2.2.4 出库服务 (cpte-wms-outbound-service)
核心职责:
- 处理所有出库业务流程
- 对接 MOM 系统出库接口
主要功能:
- 拣货单管理(Pick)
- 拣货明细管理(PickDetail)
- 拣货任务管理(Task)
- 任务分配
- 下架作业
- MOM 出库对接
对外接口:
/api/wms/outbound/pick/**- 拣货管理/api/wms/outbound/task/**- 任务管理/api/wms/outbound/sai-wms/**- MOM 对接
依赖服务:
- 基础服务:获取物品、库位信息
- 调度服务:生成 AGV 搬运任务
- 库存服务:扣减库存
2.2.5 库存服务 (cpte-wms-inventory-service)
核心职责:
- 管理库存核心业务
- 记录库存流水
- 提供库存查询和统计
主要功能:
- 库存管理(Inventory)
- 库存流水(InventoryLog)
- 盘点计划(CountPlan)
- 盘点明细(CountDetail)
- 数据看板(Dashboard)
- 序列号管理
对外接口:
/api/wms/inventory/**- 库存管理/api/wms/inventory/log/**- 库存流水/api/wms/inventory/count/**- 盘点管理/api/wms/inventory/dashboard/**- 数据看板
依赖服务:
- 调度服务:调用 AGV 任务
3. 服务间调用关系
3.1 调用矩阵
│ 基础 │ 调度 │ 入库 │ 出库 │ 库存 │
──────────────┼──────┼──────┼──────┼──────┼──────┤
基础服务 │ - │ │ → │ → │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
调度服务 │ ← │ - │ ← │ ← │ ← │
──────────────┼──────┼──────┼──────┼──────┼──────┤
入库服务 │ ← │ → │ - │ │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
出库服务 │ ← │ → │ │ - │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
库存服务 │ ← │ → │ ← │ ← │ - │
──────────────┴──────┴──────┴──────┴──────┴──────┘
图例:
→ 调用其他服务
← 被其他服务调用
3.2 典型业务流程
3.2.1 入库流程
1. 入库服务创建 ASN 单
2. 入库服务执行收货
3. 入库服务调用库存服务 → 增加库存
4. 库存服务记录库存流水
5. 入库服务调用调度服务 → 生成 AGV 上架任务
3.2.2 出库流程
1. 出库服务创建拣货单
2. 出库服务生成拣货任务
3. 出库服务调用库存服务 → 预占库存
4. 出库服务调用调度服务 → 生成 AGV 搬运任务
5. 拣货完成后调用库存服务 → 扣减库存
6. 库存服务记录库存流水
3.2.3 盘点流程
1. 库存服务创建盘点计划
2. 库存服务执行盘点
3. 库存服务生成盘点差异
4. 库存服务调整库存
5. 库存服务记录库存流水
3.2.4 AGV 调度流程
1. 入库/出库服务调用调度服务 → 请求 AGV 任务
2. 调度服务调用基础服务 → 获取库位信息
3. 调度服务生成 AGV 任务
4. 调度服务对接 AGV 设备(海康/特斯)
5. AGV 执行任务并返回结果
4. 数据设计
4.1 数据库表归属
基础服务表
wms_basic_item -- 物品信息
wms_basic_item_key -- 物品关键信息
wms_basic_area -- 区域信息
wms_basic_point -- 点位信息
wms_basic_stock -- 库存(基础数据)
调度服务表
wms_agv_task -- AGV 任务
wms_hik_agv -- 海康 AGV
wms_tes_agv -- 特斯 AGV
wms_conveyor_line -- 输送线
入库服务表
wms_inbound_asn -- ASN 单
wms_inbound_asn_detail -- ASN 明细
wms_inbound_receive -- 收货记录
出库服务表
wms_outbound_pick -- 拣货单
wms_outbound_pick_detail -- 拣货明细
wms_outbound_task -- 拣货任务
库存服务表
wms_inventory -- 库存
wms_inventory_log -- 库存流水
wms_count_plan -- 盘点计划
wms_count_detail -- 盘点明细
4.2 数据一致性方案
方案一:本地事务(推荐初期)
- 所有服务共享数据库
- 使用本地事务保证一致性
- 优点:简单、可靠
- 缺点:数据库耦合
方案二:分布式事务(推荐后期)
- 每个服务独立数据库
- 使用 Seata 管理分布式事务
- 优点:服务解耦
- 缺点:复杂度高
方案三:最终一致性
- 使用消息队列
- 补偿机制保证最终一致性
- 优点:高性能、高可用
- 缺点:实现复杂
5. 接口设计
5.1 接口规范
统一响应格式
{
"code": 200,
"message": "success",
"data": {},
"timestamp": 1234567890
}
统一错误码
200 - 成功
400 - 参数错误
401 - 未授权
403 - 禁止访问
404 - 资源不存在
500 - 服务器内部错误
5.2 核心接口
基础服务接口
GET /api/wms/basic/item/{id} # 获取物品信息
POST /api/wms/basic/item/list # 分页查询物品
GET /api/wms/basic/area/{id} # 获取区域信息
GET /api/wms/basic/point/{id} # 获取点位信息
POST /api/wms/basic/agv-task/submit # 提交 AGV 任务
入库服务接口
POST /api/wms/inbound/asn/create # 创建 ASN 单
GET /api/wms/inbound/asn/{id} # 获取 ASN 详情
POST /api/wms/inbound/receive # 收货登记
出库服务接口
POST /api/wms/outbound/pick/create # 创建拣货单
GET /api/wms/outbound/pick/{id} # 获取拣货详情
POST /api/wms/outbound/task/allocate # 分配拣货任务
库存服务接口
GET /api/wms/inventory/query # 查询库存
POST /api/wms/inventory/increase # 增加库存
POST /api/wms/inventory/decrease # 扣减库存
GET /api/wms/inventory/log/list # 库存流水
POST /api/wms/inventory/count/execute # 执行盘点
6. 部署架构
6.1 开发环境
┌──────────────┐
│ Nginx │ (可选,统一入口)
└──────────────┘
│
┌──────┴──────┬──────────┬──────────┬──────────┬──────────┐
│ │ │ │ │ │
│ 基础服务 │ 调度服务 │ 入库服务 │ 出库服务 │ 库存服务 │
│ :8001 │ :8005 │ :8002 │ :8003 │ :8004 │
│ │ │ │ │ │
└─────────────┴──────────┴──────────┴──────────┴──────────┘
│
┌───────┴───────┐
│ │
MySQL Redis
6.2 生产环境(推荐)
┌──────────┐
│ Gateway │
└──────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌────┴────┐ ┌─────┴────┐ ┌─────┴────┐
│ 负载均衡 │ │ 负载均衡 │ │ 负载均衡 │
└────┬────┘ └─────┬────┘ └─────┬────┘
│ │ │
┌────┴────┐ ┌─────┴────┐ ┌─────┴────┐
│基础服务 1│ │入库服务 1│ │出库服务 1│
│基础服务 2│ │入库服务 2│ │出库服务 2│
└─────────┘ └──────────┘ └──────────┘
│
┌────┴────┐
│库存服务 1│
│库存服务 2│
└─────────┘
7. 监控和日志
7.1 健康检查
每个服务提供健康检查端点:
GET /actuator/health
7.2 指标监控
GET /actuator/metrics
7.3 日志规范
- 使用 SLF4J + Logback
- 按日期滚动保存
- 包含 traceId 便于链路追踪
8. 开发计划
阶段一:架构搭建(已完成)
- 设计微服务架构
- 创建项目结构
- 配置 pom.xml
- 创建配置文件
- 创建启动类
阶段二:代码迁移
- 迁移基础服务代码
- 迁移入库服务代码
- 迁移出库服务代码
- 迁移库存服务代码
阶段三:服务间接口
- 定义服务间接口
- 实现服务间调用
- 测试接口连通性
阶段四:集成测试
- 单元测试
- 集成测试
- 性能测试
阶段五:部署上线
- 编写部署文档
- 配置生产环境
- 灰度发布
- 正式上线
9. 风险管理
技术风险
- 服务间调用延迟: 优化网络调用,使用连接池
- 数据不一致: 实现补偿机制,保证最终一致性
- 单点故障: 服务集群部署,使用负载均衡
业务风险
- 业务中断: 灰度发布,逐步迁移流量
- 数据丢失: 完善备份机制,定期演练恢复
10. 总结
本架构设计将 WMS 系统拆分为四个独立的微服务,实现了:
- ✅ 业务解耦,职责清晰
- ✅ 独立部署,灵活扩展
- ✅ 保留原代码,便于参考
- ✅ 平滑迁移,降低风险
后续可根据业务发展,逐步引入服务治理、API 网关、链路追踪等能力。