news 2026/6/10 15:39:19

第十八课实战:后端性能优化实战——一个接口从 2 秒到 90ms 的全过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十八课实战:后端性能优化实战——一个接口从 2 秒到 90ms 的全过程

目标:
不是讲概念,而是演示一次真实的性能优化过程
如何从一个 2 秒接口,优化到 90ms,并且每一步都有依据。


场景设定

接口:

GET /users?page=1&size=20

表数据量:50 万条
技术栈:Spring Boot + MySQL + Redis

初始状态(问题版本)

初始代码问题点

1)SQL 问题

SELECT * FROM user;
  • 无索引
  • 全表扫描
  • 返回 50 万行

2)接口问题

  • DTO 字段 30+
  • 返回整个 List
  • 打印全部日志

3)RPC 问题

for(User u : list){ rpcService.getScore(u.getId()); }

典型N+1 调用

初始压测结果

指标数值
P50300ms
P901200ms
P992100ms
CPU35%
内存稳定

结论:不是资源打满,是逻辑慢。

第一步:SQL 优化(最大头)

动作

1)加索引

CREATE INDEX idx_user_status_time ON user(status, create_time);

2)分页 + 字段裁剪

SELECT id,name,status FROM user WHERE status=1 ORDER BY create_time DESC LIMIT 20;

3)Explain 对比

优化前优化后
type=ALLtype=ref
rows=500000rows=120

SQL 优化后压测

指标数值
P99

2100 →420ms

第二步:接口层优化

问题点

  • 返回字段过多

  • 日志拖慢

  • 序列化重

动作

DTO 裁剪

class UserDTO { Long id; String name; }

日志采样

if(random()<0.01){ log.info("users:{}", list.size()); }

接口层优化后

指标数值
P99420 →180ms

第三步:RPC 优化(N+1 问题)

原始

for(User u : list){ rpc.getScore(u.id); }

改为批量

rpc.batchGetScore(ids);

RPC 优化后

指标数值
P99180 →130ms

第四步:JVM 优化

观察指标

  • Minor GC 频繁

  • 对象创建多

动作

  • 复用集合

  • 减少字符串拼接

  • 调整线程池

JVM 优化后

指标数值
P99130 →90ms
GC 次数-40%

全过程对比

阶段P99
初始2100ms
SQL 优化420ms
接口优化180ms
RPC 优化130ms
JVM 优化90ms

优化核心逻辑总结

先 SQL 再 接口 再 RPC 最后 JVM

实战中的关键判断

现象判断
CPU 不高却慢逻辑慢
P99 高极端请求问题
SQL rows 巨大索引问题
GC 多对象创建问题

工程经验总结

不要一上来做的事

  • 不要先加缓存

  • 不要先调 JVM 参数

  • 不要先加 MQ

应该先做的事

  • 看 P99

  • Explain SQL

  • 拆链路

  • 再优化

最终一句话

性能优化不是“调参”,而是“定位 → 分层 → 验证”的工程流程。

当你能把一个 2 秒接口优化到 90ms,
你就已经具备中高级后端工程师的实战能力了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:45:17

iOS WKWebView 安全机制:跨域隔离绕过与内存破坏漏洞

前言 技术背景 WKWebView 是苹果自 iOS 8 引入的现代化网页渲染组件&#xff0c;取代了安全性较差的 UIWebView。它采用多进程架构&#xff08;WebContent 进程独立于 App 主进程&#xff09;&#xff0c;并逐步引入站点隔离&#xff08;Site Isolation&#xff09;机制&#x…

作者头像 李华
网站建设 2026/6/10 11:39:23

BXMya 560CMU05 1KGT012700R0002 中央通信模块

560CMU05 1KGT012700R0002是瑞士ABB公司旗下的RTU中央通信模块&#xff0c;隶属于ABB RTU560系列远程终端单元模块系列&#xff0c;是工业自动化控制系统、RTU远程终端单元、SCADA系统及远程监控设备的核心通信与控制组件及备件&#xff0c;适配ABB RTU560系列远程终端单元系统…

作者头像 李华
网站建设 2026/6/10 13:33:26

照着用就行:千笔写作工具,全网顶尖的AI论文网站

你是否曾为论文选题发愁&#xff0c;绞尽脑汁却毫无头绪&#xff1f;是否在深夜面对空白文档无从下笔&#xff0c;反复修改却总对表达不满意&#xff1f;论文写作不仅是学术能力的考验&#xff0c;更是时间与精力的挑战。对于大多数本科生来说&#xff0c;文献查找、框架搭建、…

作者头像 李华
网站建设 2026/6/10 11:37:10

横评后发现!领军级的降AIGC平台 —— 千笔·降AIGC助手

在AI技术迅速渗透学术写作领域的当下&#xff0c;越来越多的学生开始借助AI工具提升论文撰写效率。然而&#xff0c;随着知网、维普、万方等查重系统对AI生成内容的识别能力不断提升&#xff0c;以及Turnitin等国际平台对AIGC的严格审查&#xff0c;论文中的“AI率超标”问题逐…

作者头像 李华
网站建设 2026/5/31 1:32:33

索引OFDM系统像是个自带导航的快递员,每个子载波都能携带数据包和地址标签。这次咱们直接撸代码,看看这玩意儿在AWGN和瑞利信道下到底抗不抗揍

索引OFDM调制解调系统的性能仿真分析先搞个最简单的系统模型练手。假设系统有64个子载波&#xff0c;用QPSK调制&#xff0c;循环前缀长度16。代码里最带劲的部分是索引映射&#xff0c;这里用随机打乱的方式模拟动态分配&#xff1a; import numpy as npN 64 # 子载波总数 C…

作者头像 李华
网站建设 2026/6/10 14:24:16

控制单元4PFXA 401S-3BSE024388R2

孙13665068812控制单元 4PFXA 401S-3BSE024388R2 详解在现代工业自动化系统中&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;或分布式控制系统&#xff08;DCS&#xff09;是核心的大脑&#xff0c;负责执行控制逻辑、处理数据并与现场设备通信。而作为这些系统的关…

作者头像 李华