Springboot分布式项目优化策略
目录
调优概念
http接口响应时间优化
http发送时间优化:
服务器处理时间优化:
(1)、具体分析业务逻辑来看哪些地方可以优化
(2)、减少IO次数和循环调用
(3)、拆分业务,采用异步形式
(4)、底层优化
调优概念
调优是对系统性能进行优化的过程,可以提高系统的效率和稳定性。调优一般都是都是针对接口而言,比如http接口,dubbo接口等;一定是针对业务来的。
http接口响应时间优化
HTTP 接口的响应时间包括以下三个方面:
-
HTTP 发送时间:指客户端发送请求到服务器的时间。
-
服务器处理时间:指服务器处理请求的时间,主要包括数据库查询、逻辑处理等。
-
服务器传输参数时间:指服务器将处理后的参数返回到客户端的时间。
实例:
http发送时间优化:
在实际开发中,我们通常会使用实体类来传递参数,但是有些字段是无用的,这样会导致传递了无用的参数,从而降低系统性能。此时,我们可以定义一个新的类来接收参数,避免传递无用的参数。例如,例如在 Spring Boot 中定义 Param 和 VO 两个类,一个用于接收参数,一个用于输出结果。
服务器处理时间优化:
(1)、具体分析业务逻辑来看哪些地方可以优化
例如,在批量插入时,可以采用以下三种方式进行优化:
①.利用 for 循环进行操作:
for(int i = 0; i < list.size(); i++) {
userMapper.insert(list.get(i));
}
②. 在 Mapper.xml 中利用 foreach 进行操作:
<foreach collection="list" item="item" index="index" separator=";">
insert into user value(#{item.id}, #{item.name}, #{item.age})
</foreach>
③. 采用 sqlSession 去封装的批量插入:(性能最好)
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for(int i = 0; i < list.size(); i++) {
mapper.insert(list.get(i));
if (i != 0 && i % 1000 == 0) {
sqlSession.flushStatements();
}
}
sqlSession.flushStatements();
sqlSession.commit();
sqlSession.clearCache();
(2)、减少IO次数和循环调用
当进行批量操作时,牢记减少IO次数可以显著提升系统性能。同时,应该避免循环调用其他服务,除非绝对必要。
(3)、拆分业务,采用异步形式
对于复杂的业务逻辑,将其拆分成独立的模块,采用异步方式执行可以在保证准确性的情况下提高系统效率。这种模式可以避免阻塞线程池,从而提高整体系统的性能。
(4)、底层优化
①、数据库优化:
数据库优化可以极大提高系统性能。可以针对特定的查询进行具体优化,例如:避免使用自己写的连表查询,减少多次IO等。此外,使用MyBatis Plus等ORM框架可以大大减少手写SQL的复杂性。
②、Redis缓存:
缓存是优化系统性能的常见手段。使用Redis缓存可以大幅降低读写次数,提高系统的效率。
③、引入其他中间件:
引入其他中间件如ES可以实现更复杂的查询,解决了模糊查询的缺陷。
模糊查询的弊端:比如我的书名为java并发教程,可以根据java查到,也可以根据教程查到,但是根据java教程就查不到了
同时,将MySQL中的数据同步到ES中,可以有效减少数据库的负载。