项目接口性能优化方案

🧑‍💻作者名称:DaenCode

🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······

😎人生感悟:尝尽人生百味,方知世间冷暖。

📖所属专栏:项目实战经验



专栏推荐

  • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
  • SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。链接>>>>>>《SpringBoot实战》

文章目录

🌟前言

身为一个合格的开发者,在系统开发时不仅仅是要考虑功能的实现,还要考虑接口性能以此来提升用户体验、节省硬件成本。本文总结了系统开发中常见的接口性能优化手段。


🌟异步思想

在这之前先介绍一下同步和异步

  • 同步:用户请求时,逻辑中所有的操作完成之后才返回给用户信息。
  • 异步:用户请求时,逻辑中的部分操作可以另辟蹊径去完成,减少用户等待时间。

举个例子,比如说在采集用户日志时,见下图的同步操作:

在此接口经过一系列复杂逻辑操作耗时很长,那么怎么优化呢?是不是经过最后一个逻辑处理就可以响应给用户信息?于是可以采用异步思想的去解决,常见的解决方案据我经验有两类:

  1. 编程语言工具:Java中的Future和Callable、CompletableFuture、Spring框架中的@Async。
  2. 中间件 :消息队列中间件。比如说针对上述可以采用kafka进行异步。至于采用何种MQ根据业务需求选择即可。

🌟池化思想

在开发中见识过的比如说对象、连接、线程(统称为资源)都可以进行池化,以此来提升系统资源利用率。在优化时可以接口类型对资源进行池化,我在这里总结了两类:

  1. 网络请求:在对接第三方接口时需要发起http请求或者数据库连接,这时候我们可以采用对连接进行池化。比如基于Http实现请求调用常见的有HttpClient、OkHttp、Restemplate,我们可以对其进行池化提升接口性能。
  2. IO请求或者CPU操作:接口在涉及IO请求、CPU调度时就可以对内存或者线程进行池化,也就是我们常用的线程池ThreadPoolExecutor、ThreadPoolTaskExecutor(spring中)。

🌟缓存思想

在系统开发中缓存一共有两类:

  1. 本地缓存:
    • HashMap-线程非安全
    • ConcurrentHashMap-线程安全
    • LinkedHashMap-非线程安全
    • MyBatis二级缓存
    • 缓存框架:Guava、Caffeine
    • Nginx缓存
  2. 分布式缓存:
    • Redis
    • Memcached

注意:在使用分布式缓存时要注意缓存一致性问题。


🌟数据库优化

  1. SQL参数调整
    • innodb_buffer_pool_size:增大该参数值可以增加InnoDB存储引擎的缓冲池大小,提高查询性能。
    • max_connections:增大该参数值可以增加数据库的最大连接数,以支持更多的并发查询。
    • wait_timeout:减小该参数值可以释放空闲连接的资源,以提高连接的利用率。
    • slow_query_log:启用慢查询日志,以记录执行时间超过阈值的查询语句,便于优化。
    • log_queries_not_using_indexes:启用该参数可以记录未使用索引的查询语句,用于优化查询语句。
  2. 索引优化
  3. 数据库表结构优化
  4. SQL语句优化
  5. 分库分表优化(数据量大)

🌟组合优化

组合优化就是采用上述几种的组合了,或者说可以提高硬件性能。


🌟写在最后

有关于项目接口性能优化方案到此就结束了。感谢大家的阅读,就我目前个人经验而言只能提供这几种思路了,希望有大佬可以在评论区做出补充!


相关推荐
北城以北88888 小时前
RocketMQ简介
java·spring boot·后端·rocketmq
GoGeekBaird15 小时前
从 Prompt Engineering 到 Loop Engineering,我觉得 AI 开发这事儿终于开始变味了
后端·github
一条泥憨鱼15 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
爱喝水的鱼丶16 小时前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
Oneslide16 小时前
初始化微信小程序
后端
hboot17 小时前
AI工程师第一课 - Python
前端·后端·python
阿正的梦工坊17 小时前
【Rust】12-借用检查器与非词法生命周期
开发语言·后端·rust
飞天狗11118 小时前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web
梦@_@境19 小时前
面向 Spring Boot 的可观测业务流程编排引擎
java·spring boot·后端
JAVA面经实录91719 小时前
Netty 全套系统化学习文档(零基础到高阶面试完整版)
java·后端