这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
了解工程中性能优化的原则和流程
服务量特别大的时候,每优化一个百分点都能减少很多资源开销。对逻辑相对复杂的程序如何进行性能调优。
- 业务服务优化
- 基础库优化
- Go 语言优化
业务服务优化
基本概念
- 服务:能单独部署,承载一定功能的程序
- 依赖:Service A 的功能实现依赖Service B的响应结果,成为Service A依赖Service B
- 调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系。
- 基础库:公共的工具包、中间件。
流程
- 建立服务性能评估手段
- 分析性能数据,定位性能瓶颈
- 重点优化项改造
- 优化效果验证
建立服务性能评估手段
-
服务性能评估方式
- 单独 benchmark 无法满足复杂逻辑分析
- 不同负载情况下性能表现差异
-
请求流量构造
- 不同请求参数覆盖逻辑不同
- 线上真实流量情况
-
压测范围
- 单机器压测
- 集群压测
-
性能数据采集
- 单机性能数据
- 集群性能数据
分析性能数据,定位性能瓶颈
- 使用库不规范
- 高并发场景优化不足
重点优化项改造
-
正确性是基础
-
响应数据 diff
- 线上请求数据录制回放
- 新旧逻辑接口数据 diff
优化效果验证
-
重复压测验证
-
上线评估优化效果
- 关注服务监控
- 逐步放量
- 收集性能数据
基础库优化
AB实验SDK的优化
-
分析基础库核心逻辑和性能瓶颈
- 设计完善改造方案
- 数据按需获取
- 数据序列化协议优化
-
内部压测验证
-
推广业务服务落地验证
Go 语言优化
编译器&运行时优化
-
优化内存分配策略
-
优化代码编译流程,生成更高效的程序
-
内部压测验证
-
推广业务服务落地验证
-
优点
- 接入简单,只需要调整编译配置
- 通用性强