369 lines
19 KiB
Markdown
369 lines
19 KiB
Markdown
|
|
# 性能优化
|
|||
|
|
|
|||
|
|
<cite>
|
|||
|
|
**本文引用的文件**
|
|||
|
|
- [application.yml](file://nflg-wms-admin/src/main/resources/application.yml)
|
|||
|
|
- [application-dev.yml](file://nflg-wms-admin/src/main/resources/application-dev.yml)
|
|||
|
|
- [application-prod.yml](file://nflg-wms-admin/src/main/resources/application-prod.yml)
|
|||
|
|
- [MysqlDataSourceConfig.java](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java)
|
|||
|
|
- [SAPConfig.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java)
|
|||
|
|
- [RedisConfig.java](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java)
|
|||
|
|
- [BeanUtil.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java)
|
|||
|
|
- [UserUtil.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/UserUtil.java)
|
|||
|
|
- [SAPException.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java)
|
|||
|
|
- [NflgException.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java)
|
|||
|
|
- [PowerJobWorkerConfiguration.java](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/PowerJobWorkerConfiguration.java)
|
|||
|
|
- [InventoryCheckTaskProcessor.java](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/InventoryCheckTaskProcessor.java)
|
|||
|
|
- [SAPConfig.java (srm-receive)](file://nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/config/SAPConfig.java)
|
|||
|
|
- [SAPConfig.java (scheduled)](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SAPConfig.java)
|
|||
|
|
- [application-sit.yml (srm-receive)](file://nflg-wms-srm-receive/src/main/resources/application-sit.yml)
|
|||
|
|
- [application-dev.yml (srm-receive)](file://nflg-wms-srm-receive/src/main/resources/application-dev.yml)
|
|||
|
|
</cite>
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
1. [简介](#简介)
|
|||
|
|
2. [项目结构](#项目结构)
|
|||
|
|
3. [核心组件](#核心组件)
|
|||
|
|
4. [架构总览](#架构总览)
|
|||
|
|
5. [详细组件分析](#详细组件分析)
|
|||
|
|
6. [依赖分析](#依赖分析)
|
|||
|
|
7. [性能考虑](#性能考虑)
|
|||
|
|
8. [故障排查指南](#故障排查指南)
|
|||
|
|
9. [结论](#结论)
|
|||
|
|
10. [附录](#附录)
|
|||
|
|
|
|||
|
|
## 简介
|
|||
|
|
本指南面向NFLG WMS系统管理员与开发人员,聚焦于系统性能优化,覆盖数据库查询优化、缓存策略优化、网络延迟优化、并发处理优化、SAP系统集成优化、性能监控与指标分析、内存与GC优化、性能测试与基准测试方法,以及运维最佳实践与注意事项。文档基于仓库中实际配置与实现进行分析,并提供可操作的优化建议。
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
WMS采用多模块分层架构:网关、鉴权、管理端、仓储作业、SRM收货、定时调度、通用工具与基础设施等模块协同工作。管理端与仓储模块通过MyBatis-Plus访问MySQL;通用模块提供DTO、常量、工具类与异常定义;定时任务模块使用PowerJob;SAP集成通过JCo连接池配置;Redis用于缓存与分布式能力。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TB
|
|||
|
|
subgraph "应用层"
|
|||
|
|
ADMIN["管理端(nflg-wms-admin)"]
|
|||
|
|
SHIPMENT["发货(nflg-wms-shipment)"]
|
|||
|
|
SRM["SRM收货(nflg-wms-srm-receive)"]
|
|||
|
|
AUTH["鉴权(nflg-wms-auth)"]
|
|||
|
|
GATEWAY["网关(nflg-wms-gateway)"]
|
|||
|
|
end
|
|||
|
|
subgraph "业务与支撑"
|
|||
|
|
REPO["仓储(nflg-wms-repository)"]
|
|||
|
|
COMMON["通用(nflg-wms-common)"]
|
|||
|
|
STARTER["启动器(nflg-wms-starter)"]
|
|||
|
|
SCHEDULED["定时(nflg-wms-scheduled)"]
|
|||
|
|
end
|
|||
|
|
DB["MySQL"]
|
|||
|
|
REDIS["Redis"]
|
|||
|
|
SAP["SAP系统"]
|
|||
|
|
ADMIN --> REPO
|
|||
|
|
SHIPMENT --> REPO
|
|||
|
|
SRM --> REPO
|
|||
|
|
ADMIN --> STARTER
|
|||
|
|
SHIPMENT --> STARTER
|
|||
|
|
SRM --> STARTER
|
|||
|
|
ADMIN --> AUTH
|
|||
|
|
GATEWAY --> ADMIN
|
|||
|
|
GATEWAY --> SHIPMENT
|
|||
|
|
GATEWAY --> SRM
|
|||
|
|
GATEWAY --> AUTH
|
|||
|
|
REPO --> DB
|
|||
|
|
STARTER --> REDIS
|
|||
|
|
ADMIN --> SAP
|
|||
|
|
SRM --> SAP
|
|||
|
|
SCHEDULED --> SAP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [application.yml:1-48](file://nflg-wms-admin/src/main/resources/application.yml#L1-L48)
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
- [SAPConfig.java:24-51](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L24-L51)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [application.yml:1-48](file://nflg-wms-admin/src/main/resources/application.yml#L1-L48)
|
|||
|
|
|
|||
|
|
## 核心组件
|
|||
|
|
- 数据库连接与ORM
|
|||
|
|
- MyBatis-Plus配置启用驼峰映射、空值Setter、UTC时间类型处理器与分页插件。
|
|||
|
|
- HikariCP连接池在各环境配置了最大池大小、最小空闲、空闲超时、最大生命周期与泄漏检测阈值。
|
|||
|
|
- 缓存
|
|||
|
|
- RedisTemplate统一配置键值序列化策略,支持Object与String模板。
|
|||
|
|
- SAP集成
|
|||
|
|
- JCo目的地注册与连接池参数设置,包含峰值限制与池容量校验。
|
|||
|
|
- 并发与调度
|
|||
|
|
- PowerJob Worker配置,支持任务执行与存储策略选择。
|
|||
|
|
- 工具与异常
|
|||
|
|
- BeanUtil提供对象与JSON互转;UserUtil封装登录用户信息;NflgException与SAPException统一异常模型。
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [application-dev.yml:25-34](file://nflg-wms-admin/src/main/resources/application-dev.yml#L25-L34)
|
|||
|
|
- [application-sit.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-sit.yml#L11-L20)
|
|||
|
|
- [application-dev.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-dev.yml#L11-L20)
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
- [SAPConfig.java:67-96](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L67-L96)
|
|||
|
|
- [PowerJobWorkerConfiguration.java:22-33](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/PowerJobWorkerConfiguration.java#L22-L33)
|
|||
|
|
- [BeanUtil.java:17-27](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java#L17-L27)
|
|||
|
|
- [UserUtil.java:11-33](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/UserUtil.java#L11-L33)
|
|||
|
|
- [NflgException.java:12-16](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L12-L16)
|
|||
|
|
- [SAPException.java:12-16](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java#L12-L16)
|
|||
|
|
|
|||
|
|
## 架构总览
|
|||
|
|
下图展示WMS与外部系统的交互路径,重点标注数据库、缓存与SAP的关键链路,便于定位性能瓶颈。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Client as "客户端"
|
|||
|
|
participant Gateway as "网关"
|
|||
|
|
participant Admin as "管理端"
|
|||
|
|
participant Repo as "仓储(MyBatis-Plus)"
|
|||
|
|
participant DB as "MySQL"
|
|||
|
|
participant Redis as "Redis"
|
|||
|
|
participant SAP as "SAP系统"
|
|||
|
|
Client->>Gateway : 请求
|
|||
|
|
Gateway->>Admin : 转发
|
|||
|
|
Admin->>Repo : 查询/更新
|
|||
|
|
Repo->>DB : SQL执行
|
|||
|
|
DB-->>Repo : 结果集
|
|||
|
|
Admin->>Redis : 读取/写入缓存
|
|||
|
|
Redis-->>Admin : 缓存命中/未命中
|
|||
|
|
Admin->>SAP : RFC调用/JCo
|
|||
|
|
SAP-->>Admin : 返回数据
|
|||
|
|
Admin-->>Gateway : 响应
|
|||
|
|
Gateway-->>Client : 响应
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [application.yml:1-48](file://nflg-wms-admin/src/main/resources/application.yml#L1-L48)
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
- [SAPConfig.java:93-101](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L93-L101)
|
|||
|
|
|
|||
|
|
## 详细组件分析
|
|||
|
|
|
|||
|
|
### 数据库查询优化
|
|||
|
|
- ORM与SQL优化
|
|||
|
|
- 启用驼峰命名映射与空值Setter,减少字段映射差异导致的隐式开销。
|
|||
|
|
- 使用分页插件与乐观锁拦截器,避免全表扫描与并发写冲突。
|
|||
|
|
- 连接池配置
|
|||
|
|
- 最大池大小、最小空闲、空闲超时、最大生命周期与泄漏检测阈值需结合业务QPS与事务时长调优。
|
|||
|
|
- 开发/测试/生产环境分别配置不同池参数,避免资源争用与连接泄漏。
|
|||
|
|
- 索引与查询
|
|||
|
|
- 建议对高频过滤字段、关联字段与排序字段建立复合索引;定期分析慢查询日志与执行计划,剔除无效索引。
|
|||
|
|
- 避免SELECT *,仅取必要列;对大结果集分页或流式读取。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
Start(["开始"]) --> CheckPool["检查连接池配置<br/>最大池/空闲/超时/生命周期"]
|
|||
|
|
CheckPool --> TunePool{"是否满足QPS与RT?"}
|
|||
|
|
TunePool -- 否 --> Adjust["调整池参数/增加实例/拆分库表"]
|
|||
|
|
TunePool -- 是 --> EnablePlugins["启用分页/乐观锁插件"]
|
|||
|
|
EnablePlugins --> Analyze["分析慢查询与执行计划"]
|
|||
|
|
Analyze --> IndexOps["创建/优化索引/删除无效索引"]
|
|||
|
|
IndexOps --> End(["结束"])
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [application-dev.yml:25-34](file://nflg-wms-admin/src/main/resources/application-dev.yml#L25-L34)
|
|||
|
|
- [application-sit.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-sit.yml#L11-L20)
|
|||
|
|
- [application-dev.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-dev.yml#L11-L20)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [application-dev.yml:25-34](file://nflg-wms-admin/src/main/resources/application-dev.yml#L25-L34)
|
|||
|
|
- [application-sit.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-sit.yml#L11-L20)
|
|||
|
|
- [application-dev.yml (srm-receive):11-20](file://nflg-wms-srm-receive/src/main/resources/application-dev.yml#L11-L20)
|
|||
|
|
|
|||
|
|
### 缓存策略优化
|
|||
|
|
- Redis配置
|
|||
|
|
- 统一Key/Value序列化策略,降低序列化成本与跨语言兼容性问题。
|
|||
|
|
- 提供Object与String模板,按场景选择合适模板以减少装箱与转换。
|
|||
|
|
- 失效策略
|
|||
|
|
- 对热点数据设置合理TTL;对缓存穿透使用布隆过滤器或短命Key+后加载策略。
|
|||
|
|
- 对缓存击穿采用互斥锁或逻辑过期;对缓存雪崩采用随机TTL与分级缓存。
|
|||
|
|
- 命中率与内存
|
|||
|
|
- 监控key分布与内存占用,避免大Key与热点Key集中;定期清理过期Key。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
Req(["请求"]) --> GetKey["构造缓存Key"]
|
|||
|
|
GetKey --> GetCache["从Redis读取"]
|
|||
|
|
GetCache --> Hit{"命中?"}
|
|||
|
|
Hit -- 是 --> Return["返回缓存"]
|
|||
|
|
Hit -- 否 --> LoadDB["加载DB/下游接口"]
|
|||
|
|
LoadDB --> SetCache["写入缓存(TTL/互斥)"]
|
|||
|
|
SetCache --> Return
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
|
|||
|
|
### 并发处理优化
|
|||
|
|
- 线程池与异步
|
|||
|
|
- 对高延迟外部调用(如SAP)使用独立线程池隔离;对CPU密集型任务与IO密集型任务分离。
|
|||
|
|
- 异步回调与事件驱动减少阻塞等待;对批量任务采用分片与限速。
|
|||
|
|
- 锁优化
|
|||
|
|
- 减少锁粒度与持有时间;优先使用无锁容器与原子变量;避免死锁与超时重试。
|
|||
|
|
- 定时任务
|
|||
|
|
- PowerJob Worker存储策略按任务规模选择内存或磁盘;端口随机化避免冲突;协议HTTP稳定可靠。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Task as "任务"
|
|||
|
|
participant Pool as "线程池"
|
|||
|
|
participant SAP as "SAP"
|
|||
|
|
Task->>Pool : 提交异步任务
|
|||
|
|
Pool->>SAP : 发起RFC调用
|
|||
|
|
SAP-->>Pool : 返回结果
|
|||
|
|
Pool-->>Task : 回调通知
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [PowerJobWorkerConfiguration.java:22-33](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/PowerJobWorkerConfiguration.java#L22-L33)
|
|||
|
|
- [InventoryCheckTaskProcessor.java:22-31](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/InventoryCheckTaskProcessor.java#L22-L31)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [PowerJobWorkerConfiguration.java:22-33](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/PowerJobWorkerConfiguration.java#L22-L33)
|
|||
|
|
- [InventoryCheckTaskProcessor.java:22-31](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/InventoryCheckTaskProcessor.java#L22-L31)
|
|||
|
|
|
|||
|
|
### SAP系统集成性能优化
|
|||
|
|
- 连接复用与池化
|
|||
|
|
- 使用JCo目的地与池化连接,设置峰值限制与池容量,确保峰值不小于池容量。
|
|||
|
|
- 配置连接超时、语言与系统参数,避免频繁重建连接。
|
|||
|
|
- 批量处理
|
|||
|
|
- 将多次RFC调用合并为批量调用,减少网络往返;对大批量数据分批处理并设置批次上限。
|
|||
|
|
- 超时与重试
|
|||
|
|
- 明确RFC调用超时与重试策略,避免长时间阻塞;对SAP异常进行分类与熔断保护。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Admin as "管理端"
|
|||
|
|
participant Dest as "JCo目的地"
|
|||
|
|
participant Repo as "JCo仓库"
|
|||
|
|
participant SAP as "SAP系统"
|
|||
|
|
Admin->>Dest : 获取JCoDestination
|
|||
|
|
Dest-->>Admin : 返回Destination
|
|||
|
|
Admin->>Repo : 获取JCoRepository
|
|||
|
|
Repo-->>Admin : 返回Repository
|
|||
|
|
Admin->>SAP : RFC调用(批量/限流)
|
|||
|
|
SAP-->>Admin : 返回结果
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [SAPConfig.java:93-101](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L93-L101)
|
|||
|
|
- [SAPConfig.java (srm-receive):68-98](file://nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/config/SAPConfig.java#L68-L98)
|
|||
|
|
- [SAPConfig.java (scheduled):68-98](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SAPConfig.java#L68-L98)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [SAPConfig.java:67-96](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L67-L96)
|
|||
|
|
- [SAPConfig.java (srm-receive):68-98](file://nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/config/SAPConfig.java#L68-L98)
|
|||
|
|
- [SAPConfig.java (scheduled):68-98](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SAPConfig.java#L68-L98)
|
|||
|
|
|
|||
|
|
### 网络延迟优化
|
|||
|
|
- 本地化与就近部署
|
|||
|
|
- 将应用部署在数据库与SAP同地域,减少跨域网络时延。
|
|||
|
|
- 连接与协议
|
|||
|
|
- TCP参数优化、Keep-Alive配置;HTTP/2或更高效协议;压缩传输体。
|
|||
|
|
- DNS与负载均衡
|
|||
|
|
- 预热DNS、缩短解析时间;LB健康检查与快速摘除。
|
|||
|
|
|
|||
|
|
[本节为通用指导,无需引用具体文件]
|
|||
|
|
|
|||
|
|
### 内存管理与垃圾回收优化
|
|||
|
|
- JVM参数
|
|||
|
|
- 合理设置堆大小、新生代比例与元空间;开启逃逸分析与标量替换。
|
|||
|
|
- GC策略
|
|||
|
|
- 选择低停顿GC(如G1/工蜂),避免Full GC;控制晋升年龄与大对象直通老年代。
|
|||
|
|
- 对象与序列化
|
|||
|
|
- 使用对象池与轻量序列化;避免大对象频繁分配;及时释放大集合引用。
|
|||
|
|
- 监控
|
|||
|
|
- 观察GC频率与停顿、堆外内存、DirectBuffer;结合APM与GC日志定位问题。
|
|||
|
|
|
|||
|
|
[本节为通用指导,无需引用具体文件]
|
|||
|
|
|
|||
|
|
## 依赖分析
|
|||
|
|
- 模块耦合
|
|||
|
|
- 管理端、发货、SRM收货均依赖仓储模块与通用模块;定时模块依赖SAP配置与通用异常。
|
|||
|
|
- 外部依赖
|
|||
|
|
- MySQL、Redis、SAP;通过连接池与序列化配置降低外部依赖的性能损耗。
|
|||
|
|
- 循环依赖
|
|||
|
|
- 当前结构未见循环依赖迹象;若新增模块需避免双向依赖。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph LR
|
|||
|
|
ADMIN["管理端"] --> REPO["仓储"]
|
|||
|
|
SHIPMENT["发货"] --> REPO
|
|||
|
|
SRM["SRM收货"] --> REPO
|
|||
|
|
ADMIN --> COMMON["通用"]
|
|||
|
|
SHIPMENT --> COMMON
|
|||
|
|
SRM --> COMMON
|
|||
|
|
SCHEDULED["定时"] --> COMMON
|
|||
|
|
SCHEDULED --> SAPCFG["SAP配置"]
|
|||
|
|
ADMIN --> SAPCFG
|
|||
|
|
SRM --> SAPCFG
|
|||
|
|
STARTER["启动器"] --> REDIS["Redis"]
|
|||
|
|
REPO --> MYSQL["MySQL"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
- [SAPConfig.java:24-51](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L24-L51)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [MysqlDataSourceConfig.java:30-47](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/config/MysqlDataSourceConfig.java#L30-L47)
|
|||
|
|
- [RedisConfig.java:14-29](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L14-L29)
|
|||
|
|
- [SAPConfig.java:24-51](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L24-L51)
|
|||
|
|
|
|||
|
|
## 性能考虑
|
|||
|
|
- 数据库
|
|||
|
|
- 分库分表与读写分离;热点表分区;归档历史数据;批量写入与幂等设计。
|
|||
|
|
- 缓存
|
|||
|
|
- 多级缓存(本地缓存+Redis);预热与冷热分离;淘汰策略与TTL动态调整。
|
|||
|
|
- 并发
|
|||
|
|
- 限流与熔断;排队与背压;异步化与事件驱动。
|
|||
|
|
- SAP
|
|||
|
|
- 批量RFC、参数化查询、连接池峰值校验;异常降级与重试退避。
|
|||
|
|
- 监控
|
|||
|
|
- 指标:QPS、RT、错误率、连接池利用率、GC、Redis命中率;告警阈值分级。
|
|||
|
|
- 测试
|
|||
|
|
- 压测工具与脚本;基线RT与P99;回归对比;容量规划。
|
|||
|
|
|
|||
|
|
[本节为通用指导,无需引用具体文件]
|
|||
|
|
|
|||
|
|
## 故障排查指南
|
|||
|
|
- 异常模型
|
|||
|
|
- NflgException与SAPException统一状态码与消息,便于前端与监控识别。
|
|||
|
|
- 日志与追踪
|
|||
|
|
- 开启OTLP链路追踪与日志推送;结合TraceId定位端到端耗时。
|
|||
|
|
- 连接池问题
|
|||
|
|
- 连接泄漏:检查泄漏检测阈值与连接关闭;连接超时:增大超时或扩容池。
|
|||
|
|
- 缓存问题
|
|||
|
|
- 缓存穿透:布隆过滤器/短命Key+后加载;缓存击穿:互斥锁/逻辑过期;缓存雪崩:随机TTL。
|
|||
|
|
- SAP问题
|
|||
|
|
- RFC超时/报错:检查池容量与峰值、网络连通性、SAP端队列;批量失败:分片重试。
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [NflgException.java:12-16](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L12-L16)
|
|||
|
|
- [SAPException.java:12-16](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java#L12-L16)
|
|||
|
|
- [application.yml:31-48](file://nflg-wms-admin/src/main/resources/application.yml#L31-L48)
|
|||
|
|
- [application-dev.yml:13-14](file://nflg-wms-admin/src/main/resources/application-dev.yml#L13-L14)
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
通过合理的数据库索引与查询优化、连接池参数调优、Redis多级缓存与失效策略、SAP连接池与批量处理、并发线程池与异步化、以及完善的监控与测试体系,WMS可在高并发与复杂业务场景下保持稳定与高性能。建议以模块为单位持续迭代优化,并结合生产数据进行容量与性能回归验证。
|
|||
|
|
|
|||
|
|
## 附录
|
|||
|
|
- 关键配置要点
|
|||
|
|
- 数据库:驼峰映射、空值Setter、分页与乐观锁插件;HikariCP池参数按环境区分。
|
|||
|
|
- 缓存:统一序列化策略;对象/字符串模板按场景选择。
|
|||
|
|
- SAP:目的地注册、池容量与峰值校验、RFC超时与重试。
|
|||
|
|
- 监控:OTLP链路追踪、健康检查、Redis/DB健康探测。
|
|||
|
|
- 推荐工具
|
|||
|
|
- 数据库:Explain/慢查询分析;Redis:INFO/内存分析;SAP:ST05/交易记录分析;JVM:GC日志与APM。
|
|||
|
|
- 基准测试建议
|
|||
|
|
- 场景:并发读写、批量导入导出、SAP同步、缓存命中率;指标:QPS、RT、错误率、资源占用;对比:优化前后、不同参数组合。
|