文章目录
前言
Spring Cloud 项目性能优化的意义在于提高系统的并发处理能力(简单的说就是花小钱办大事),保证系统的稳定性和可靠性。要做到高并发,需要做不少的优化,本文分成几个方面分布说明
持续更新,敬请关注
springcloud 项目优化方式:
一.mysql优化(索引、减少返回字段)
-
SQL语句优化:
1)使用精确查询,避免模糊查询;
2)使用联表查询,避免使用子查询;
3)使用最少字段返回,避免使用select *; -
字段类型选择最适合的类型
-
合理创建索引、联合索引
-
热点数据使用缓存
-
不要使用游标,不要使用存储过程
-
配置主从、读写分离
-
分库分表
-
硬件优化:
1)将机械硬盘换为SSD;
2)增加CPU的核数;
3(增大内存。 -
参数配置优化:
1)例如增加innodb_buffer_pool_size的大小;
2)增大 redo log,减少落盘次数:innodb_log_file_size 设置为 0.25 * innodb_buffer_pool_size;
3)关闭不必要的日志:通用查询日志、慢查询日志可以不开 ,binlog 可开启;
4)写 redo log 策略 innodb_flush_log_at_trx_commit 设置为 0 或 2:对于不需要强一致性的业务,可以设置为 0 或 2
0:每隔 1 秒写日志文件和刷盘操作(写日志文件 LogBuffer --> OS cache,刷盘 OS cache --> 磁盘文件),最多丢失 1 秒数据
1:事务提交,立刻写日志文件和刷盘,数据不丢失,但是会频繁 IO 操作
2:事务提交,立刻写日志文件,每隔 1 秒钟进行刷盘操作
二.启用压缩(nginx与微服务调用压缩)
nginx启用gzip压缩可以极大提供传输效率,一个5m的数据可以压缩大原来的1/10。
查看是否启用gzip压缩步骤如下:
打开chrome f12开发者工具,勾选 content-encoding
勾选左上角 “使用大量请求行”,可以看到每一行压缩前后的体积:
三.代码优化(同步改成异步、缓存)
- 使用合适的数据结构和算法:选择合适的数据结构和算法可以显著提高程序的性能。例如,使用哈希表进行查找操作比使用数组或链表更高效。
- 减少对象创建和销毁:频繁的对象创建和销毁会导致内存碎片和性能下降。尽量重用对象或者使用对象池来减少对象的创建和销毁。
- 使用缓存:将经常访问的数据存储在缓存中,以减少对外部资源的访问次数。可以使用本地缓存(如HashMap)或者分布式缓存(如Redis)。
- 优化循环:避免在循环中进行不必要的计算,将循环不变量提取到循环外部。
- 使用位操作:对于整数类型的操作,使用位操作(如位移、按位与、按位或等)代替算术运算(如加、减、乘、除等),可以提高性能。
- 尽量使用短事务。
- 尽量避免随意使用静态变量:某个对象被定义为 static 变量所引用,那么 GC 通常是不会回收这个对象所占有的内存。
- 尽量避免使用二维数组:二维数据占用的内存空间比一维数组多得多,大概 10 倍以上。
- 对于常量字符串,用 ‘String’ 代替 ‘StringBuffer’
四.jvm调优
五.多线程并行计算减少响应时间
六.采用支持横向扩展的组件以集群提高服务
七.使用线程池提高资源的利用率
总结
部分内容参考文章:
https://mp.weixin.qq.com/s/t8WoujO5M8EnTLUsAP7Hkw
https://zhuanlan.zhihu.com/p/641812413