写了一个慢接口,年终妥妥的325
一个项目要想抗住越大的压力,那么每个 API 都得在最短的时间内响应,这样吞吐量才高。
在很多时候,开发压根没有去做过优化,等到某天压力上来时,系统就扛不住了。
举一个最常见的例子:
大家上班都会做地铁(土豪可以开车哈)吧,地铁都有固定的几个入口,每个入口有几个固定的闸机可以扫码进入。
如果每个人扫码进站的时间都控制在 2 秒内,那么一个闸机一分钟可以过 30 个人。如果有一个人他在那磨蹭半天,花了 20 秒,也就是这个闸机这一分钟只能过 21 个人,吞吐量立马就下降了。
这种生活中的案例在程序的世界中也是同样适用的,而且是一个原理,只要有一个慢接口,就会影响整体的性能。总的来说就是队友都要很给力,不要有 Pig 队友。
下面看真实案例:
正在划水看美女的时候,突然收到告警,有几个接口响应时间超长,高达几十秒。慌得一批,估计哪里又出问题了。
赶紧上 Cat 看看详情情况,商品服务的一个 RPC 接口响应太慢了,而且也没啥调用量,泪奔。。。
仔细看其实并不是有很长的耗时操作,但是整体耗时却很长,肯定是请求被阻塞了。
然后去看对应机器的监控,发现 CPU 很高,几乎 100%的状态。
看了下 GC 情况,也挺正常的,后面看了线程池的情况才发现原因。
上面只是表面现象,告警的时候是有几个慢接口的,排查的时候就选了第一个在看,忽略了其他的接口,以为是同一个问题。
真正慢的是另一个慢接口被 Job 大量调用了,服务线程都被打满了。导致其他接口很慢。
优化方案:
定时任务时间调整,尽量在凌晨执行 单独提供一个服务,只对 Job 提供服务,连从库,影响降到最小 对慢接口进行性能优化
关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。
有收获,不要吝啬你的转发和在看。
后台回复 学习资料 领取学习视频
如有收获,点个在看,诚挚感谢