背景
我负责的系统在去年初就完成了功能上的建设,然后开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。
刚刚收到吐槽的时候,我们的心情是这样的:
当越来越多对性能的吐槽反馈到我们这里的时候,我们意识到,接口性能的问题的优先级必须提高了。
然后我们就跟踪了 1 周的接口性能监控,这个时候我们的心情是这样的:
有 20 多个慢接口,5 个接口响应时间超过 5s,1 个超过 10s,其余的都在 2s 以上,稳定性不足 99.8%。
作为一个优秀的后端程序员,这个数据肯定是不能忍的,我们马上就进入了漫长的接口优化之路。本文就是对我们漫长工作历程的一个总结。
哪些问题会引起接口性能问题
这个问题的答案非常多,需要根据自己的业务场景具体分析。
这里做一个不完全的总结:
-
数据库慢查询
-
业务逻辑复杂
-
线程池设计不合理
-
锁设计不合理
-
机器问题(fullGC,机器重启,线程打满)
-
万金油解决方式
问题解决
| 慢查询(基于 mysql)
①深度分页
所谓的深度分页问题,涉及到 mysql 分页的原理。通常情况下,mysql 的分页是这样写的: