前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >API接口性能优化总结

API接口性能优化总结

作者头像
方丈的寺院
发布2022-05-25 09:23:19
5420
发布2022-05-25 09:23:19
举报
文章被收录于专栏:方丈的寺院方丈的寺院

摘要

在web开发过程中,经常会遇到接口RT高的情况,除了通过监控事后优化的方式,我们还需要掌握一些常用的手段,避免写出慢的接口。从前端发起调用到后端一般经过网关层、应用层、存储层。每一层都可以优化,本篇文章主要是应用层优化。

常见性能优化思路

从理论上分析,性能优化手段通常有

批量

  1. 请求数据库,我们一般会用in,提高数据库查询效率
  2. 调用外部服务,我们也需要要求依赖方提供批量接口,避免多次网络请求
  3. 批量查询的id数量也不宜过多

之前在sql IN一文中分析过,IN 的数量太多时,性能会下降。同样服务间调用,数据量过大,带宽占用大。所以这时候需要分批调用。

代码语言:javascript
复制
 List<String> res=  Lists.partition(ids, 200).parallelStream()
 .flatMap(batch -> mServiceA.batchGetA(batch).stream())
 .collect(Collectors.toList());

并行/并发处理,利用多线程可以提高效率

比如接口中需要请求多个外部接口/数据库,相互之间无依赖,因为这种操作都是IO操作,可以由顺序执行改为并行执行,充分利用cpu处理能力,如

代码语言:javascript
复制
CompletableFuture<String> a = CompletableFuture.supplyAsync(() -> mServiceA.getA());
CompletableFuture<String> b = CompletableFuture.supplyAsync(() -> mServiceB.getB());
CompletableFuture.allOf(a,b).join();

异步,非强依赖的调用可以通过异步化处理

异步,分为读写。比如写是弱依赖,可以用@Async或者其他操作。

如果是读,不是必须的数据,也需要加上超时处理,因为外部调用有网络原因,都是不可靠的

代码语言:javascript
复制
CompletableFuture<String> a = CompletableFuture.supplyAsync(() -> mServiceA.getA());

CompletableFuture<String> b = CompletableFuture.supplyAsync(() -> mServiceB.getB());
try {
    CompletableFuture.allOf(a, b).get(1000, TimeUnit.MILLISECONDS);
} catch (Exception ex) {
    if (!a.isDone()) {
        
    }
    if (!b.isDone()) {
        
    }
}

减少数据处理量

eg. 拉取外部数据,全量的循环去拉,增量的使用事件通知机制,这样可以减少数据处理量

避免深度分页

数据库的深度分页性能比较差,需要在业务上避免深度分页

缓存

缓存本质上就是从读取速度快的设备中直接获取数据。通过空间来换时间。对于DB中的数据可以缓存,对于外部服务的数据同样可以缓存

使用多级缓存,可以最大限度提升性能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 方丈的寺院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 常见性能优化思路
    • 批量
      • 并行/并发处理,利用多线程可以提高效率
        • 异步,非强依赖的调用可以通过异步化处理
          • 减少数据处理量
            • 避免深度分页
              • 缓存
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档