线上接口很慢怎么办?

大彬
大约 2 分钟

线上接口很慢怎么办?

首先需要明确一个问题,是只有一个接口变慢,还是多个接口变慢。

如果系统中有多个服务的接口都变慢,那可能是系统共用的资源不足导致的。比如数据库连接数太多、数据库有大量慢查询、共同依赖的下游服务性能问题等。

可以查看系统中调用量突然增多的服务,它的调用量是否导致数据库的并发达到了瓶颈,是不是共同调用的下游服务出现了性能问题,数据库中是不是有大量这个服务引起的慢查询等。

可以有以下针对性优化:

  • 如果数据库并发达到瓶颈,可以考虑用读写分离、分库分表、加读缓存等方式来解决
  • 如果下游接口出现性能问题,需要通知下游服务做优化,同时要加降级开关
  • 如果数据库中有大量慢查询,需要优化sql加索引

如果是只有一个服务的接口变慢,那就要针对这个服务做分析,查看它的cpu占用率和gc频率是不是异常,做针对性的优化。

  1. 比如在循环里获取远程数据,可以改成只调用一次,批量获取数据
  2. 比如在链路中多次调用同一个远程接口获取相同数据,可以第一次调用之后就把数据缓存起来,后续直接从缓存中获取
  3. 比如如果多个比较耗时的操作是串行执行的,但它们又没有依赖关系,就可以把串行改成并行,可以用countDownLatch
  4. 还有如果实在无法再缩短请求处理耗时的话,也可以考虑从产品逻辑上进行优化,比如把原来的同步请求改为异步的,前端再去轮询请求处理结果
  5. 比如为了得到一个复杂的model,需要调多个接口获取信息,但当前接口只需要其中部分比较简单的数据,那么需要根据实际情况,重新写一个简单model的获取方法

参考链接:https://juejin.cn/post/7064140627578978334open in new window

Loading...