一、整体压测优化思路
本次性能优化严格遵循 由简到繁、先本地后线上、分层定位、逐点根治 的迭代思路,规避线上环境干扰、精准收敛性能瓶颈,整体推进步骤:
压测迭代流程:初始线上性能差 → 本地全链路打底优化 → 线上分层排查调优 → 全接口性能达标
二、全流程瓶颈与优化总览
| 阶段 | 核心问题 | 优化动作 | 阶段成果 |
|---|---|---|---|
| 初始线上压测 | 线上单库查询接口并发极低,仅支持几十并发 | 切换优化策略:优先本地闭环优化,再上线验证 | 明确优化基线,规避线上环境干扰 |
| 本地空接口优化 | 基础接口性能薄弱 | 优化空接口基础响应逻辑 | 空接口QPS提升至2万+,夯实基础性能 |
| Token认证优化 | JWT每次全量解析、重复查库,并发暴跌 | 重构认证逻辑,搭建多级缓存冷热路径 | 消除CPU与IO重复开销,认证性能大幅提升 |
| 数据库性能优化 | Druid参数不合理,本地DB查询吞吐低 | 调整Druid连接池核心参数 | 本地数据库查询吞吐量达标 |
| 日志IO优化 | 同步日志阻塞业务线程,高并发拖垮吞吐 | Logback全局改为异步日志输出 | 解除磁盘IO阻塞,线程利用率最大化 |
| 线上网关优化 | 双层NG(华为NG/imom赛意NG)默认配置不支持高并发 | Nginx全维度高并发参数迭代升级 | 网关层并发瓶颈彻底解决 |
| 线上配置修复 | Druid配置文件位置错误,线上不生效 | 迁移Druid配置至Mybatis配置中 | 数据库连接池线上正常生效,全量接口吞吐达标 |
三、核心模块详细优化对比
1. Token JWT 认证缓存重构(核心代码优化)
| 优化维度 | 旧版问题 | 新版优化方案 | 收益 |
|---|---|---|---|
| 缓存体系 | 无规范分层缓存,重复计算、重复查库 | L1 Caffeine本地缓存+ L2 Redis分布式缓存 | 热路径纳秒级响应 |
| JWT解析 | 每请求全量解析,CPU开销大 | 缓存命中直接跳过JWT解析 | 大幅降低CPU占用 |
| 用户/租户查询 | 高频重复远程查询、重复创建租户 | 用户、租户独立缓存,原子回填防重复 | 消除无效远程IO |
| Redis写入 | 同Token高并发重复写Redis | 本地缓存去重,1小时仅写一次 | 减轻Redis压力 |
| 并发安全 | 直接复用缓存对象,存在脏读风险 | UserInfo深拷贝,隔离缓存与业务对象 | 保障高并发线程安全 |
2. Logback 日志异步化优化
| 优化维度 | 旧同步日志问题 | 新异步日志方案 | 优化效果 |
|---|---|---|---|
| 线程模型 | 业务线程阻塞等待磁盘写盘 | 业务线程仅投递队列,异步线程批量落盘 | 彻底解除日志IO阻塞 |
| 高并发IO | 海量日志频繁刷盘,磁盘IO飙升 | 队列缓冲、批量写入,减少磁盘交互 | 降低机器IO负载 |
| 吞吐稳定性 | 日志量大导致线程堆积、吞吐暴跌 | 解耦业务与日志IO,队列平滑缓冲 | 高并发吞吐平稳无抖动 |
3. Nginx 双层网关高并发优化
服务线上存在两层网关:华为NG + imom赛意NG,旧配置为通用默认配置,无法支撑高并发,新版全量适配高并发场景。
| 优化维度 | 旧版缺陷 | 新版优化配置 |
|---|---|---|
| 系统并发资源 | 连接数10240、文件句柄受限、存在锁竞争 | 连接数、文件句柄扩容至65535,关闭连接锁,开启epoll高效模型 |
| 后端连接复用 | 无长连接池,频繁新建销毁TCP连接 | 所有业务路由配置upstream长连接池,支持万次请求复用 |
| 配置规范 | 跨域、请求头分散冗余,易出错 | 全局统一跨域、OPTIONS拦截、代理头配置 |
| 超时与IO | 默认超时、日志刷盘压力大 | 精细化超时、日志缓冲批量刷盘 |
| 特殊业务 | WebSocket长连接易断连 | 单独配置协议升级+24h超长读写超时 |
4. Druid 数据库配置关键修复
| 项目 | 内容说明 |
|---|---|
| 问题根因 | Druid连接池常规配置文件在线上环境不生效,导致数据库并发能力弱 |
| 解决方案 | 将Druid连接池配置迁移至Mybatis配置文件 中,线上正常加载生效 |
| 最终效果 | 线上数据库连接池参数正常生效,DB查询接口吞吐量彻底达标 |
四、线上问题排查链路(标准复盘流程)
完整排查步骤(线性递进):
1. 本地所有优化完成、性能基线达标;
2. 功能上线后,线上接口整体响应缓慢、吞吐低;
3. 采用 NodePort直连后端 方式排查,排除业务代码本身问题;
4. 逐层优化两层NG网关高并发参数,解决网关层瓶颈;
5. 优化后空接口、单库查询接口性能恢复正常;
6. 剩余部分接口吞吐依旧偏低,深度定位配置问题;
7. 修复Druid配置加载位置,迁移至Mybatis;
8. 全量接口线上吞吐量达标,优化完成。
五、经验总结(精简核心)
- 优化方法论:先本地基线、后线上排查,分层解耦,快速收敛性能瓶颈。
- 代码层关键:JWT认证、用户租户查询属于高频热路径,必须做多级缓存+冷热分离。
- IO优化关键:高并发场景必须异步化日志,杜绝同步磁盘IO阻塞业务线程。
- 网关层关键:多层NG网关需统一做高并发适配,默认配置无法支撑压测流量。
- 配置坑点:Druid等中间件配置存在环境差异,线上需严格验证配置加载位置与生效性。
(Note: May contain AI-generated content.)