性能调优原则:
- 要依据数据而不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化,系统可能要继续开发,任意产生不兼容的情况
学习使用性能调优优化工具pprof
性能优化调优案例:
-
业务服务优化
-
基本概念
- 服务:能单独部署,承载一定功能的程序
- 依赖:ServiceA的功能实现依赖于ServiceB的相应结果,称为ServiceA依赖于serviceB
- 调用链路:能支持一个接口请求的相关服务集合极其相互之间的依赖关系
- 基础库:公共的工具包,中间件
-
流程:
-
建立服务性能的评估手段
-
服务性能评估方式
- 单独的benchmark无法满足复杂逻辑分析
- 不同负载情况下性能表现差异
-
请求流浪构造
- 不同请求参数覆盖逻辑不同
- 线上真实流量情况
-
压测范围
- 单机器压测
- 集群压测
-
性能数据采集
- 单机性能数据
- 集群性能数据
-
-
分析性能数据,定位性能瓶颈,可以使用性能评估工具进行
- 使用库不规范,日志等使用不规范占用过多资源
- 高并发场景优化不足,在高并发情况下会出现什么问题
-
重点优化项改造
-
正确是基础:把线上的流量和返回值和优化后的进行对比,差别不大说明优化后并没有产生错误
-
响应数据diff
- 线上请求数据录制回放
- 新旧逻辑接口数据diff
-
-
优化效果验证
-
重复压测验证
-
上线评估优化效果
- 关注服务监控
- 逐步放量
- 收集性能数据
-
-
进一步优化,服务整体的链路分析
- 规范上游服务调用接口,明确场景需求
- 分析链路,通过业务流程优化提升服务性能
-
-
-
基础库优化
AB实验SDK的优化
-
分析基础库核心逻辑和性能瓶颈
- 设计完善改造方案
- 数据按需获取
- 数据序列化协议优化
-
内部压测验证
-
推广业务服务落地验证,整体上节省资源
-
-
Go语言优化(使用最广的优化)
-
编译器和运行时优化
-
优化内存分配策略
-
优化代码编译流程,生成更高效的程序
-
内部压测验证
-
退管业务服务落地
-
优点
- 接入简单,只需要调整编译配置
- 通用性强
-
-
总结:
- 性能调优原则:要依靠数据而不是依靠猜测
- 性能分析工具pprof要熟练使用
- 性能调优要保证正确性,定位到主要瓶颈