这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
go语言——性能调优实战
性能调优实战
性能调优案例简介
介绍实际业务服务性能优化的案例 对逻辑相对复杂的程序如何进行性能调优
- 业务服务优化
- 基础库优化
- Go语言优化
在实际工作中,当服务规模比较小的时候,可能不会触发很多性能问题,同时性能优化带来的效果也不明显,很难体会到性能调优带来的收益而当业务量逐渐增大,比如一个服务使用了几千台机器的时候,性能优化一个百分点,就能节省数百台机器,成本降低是非常可观的 接下来我们来了解下工程中进行性能调优的实际案例 程序从不同的应用层次上看,可以分为业务服务、基础库和Go语言本身三类,对应优化的适用范围也是越来越广业务服务一般指直接提供功能的程序,比如专门处理用户评论操作的程序 基础库一般指提供通用功能的程序,主要是针对业务服务提供功能,比如监控组件,负责收集业务服务的运行指标另外还有对Go语言本身进行的优化项
业务服务优化
基本概念
- 服务:能单独部署,承载一定功能的程序
- 依赖:Service A的功能实现依赖 Service B的响应结果,称为Service A依赖Service B
- 调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
- 基础库:公共的工具包、中间件
那么接下来就来看一下业务服务优化的主要流程,主要分四步,这些流程也是性能调优相对通用的流程,可以适用其他场景和上面评估代码优化效果的benchmark工具类似,对于服务的性能也需要一个评估手段和标准 优化的核心是发现服务性能的瓶颈,这里主要也是用pprof采样性能数据,分析服务的表现发现瓶颈后需要进行服务改造,重构代码,使用更高效的组件等 最后一步是优化效果验证,通过压测对比和正确性验证之后,服务可以上线进行实际收益评估整体的流程可以循环并行执行,每个优化点可能不同,可以分别评估验证。
建立服务性能评估手段
- 服务性能评估方式
- 单独benchmark无法满足复杂逻辑分析
- 不同负载情况下性能表现差异
- 请求流量构造
- 不同请求参数覆盖逻辑不同
- 线上真实流量情况
- 压测范围
- 单机器压测
- 集群压测
- 性能数据采集
- 单机性能数据
- 集群性能数据
分析性能数据,定位性能瓶颈
- 使用库不规范
有了服务优化前的性能报告和一些性能采样数据,我们可以进行性能瓶颈分析了。
业务服务常见的性能问题可能是使用基础组件不规范。