高质量编程与性能调优实战|青训营

50 阅读3分钟

1 性能优化建议

  • 避免常见的性能陷阱可以保证大部分程序的性能
  • 普通应用代码,不要一味地追求程序的性能
  • 越高级的性能优化手段越容易出现问题
  • 在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能

2 性能分析工具 pprof

  • 掌握常用 pprof 工具功能
  • 灵活运用 pprof 工具分析解决性能问题
  • 了解 pprof 的采样过程和工作原理

3 性能调优案例

简介

介绍实际业务服务性能优化的案例

对逻辑相对复杂的程序如何进行性能调优

  • 业务服务优化
  • 基础库优化
  • Go 语言优化

3.1 性能调优案例-业务服务优化

3.1.1 基本概念

  • 服务: 能单独部署,承载一定功能的程序
  • 依赖: Service A 的功能实现依赖 Service B 的响应结果,称为 Service A 依赖 Service B
  • 调用链路: 能支持一个接口请求的相关服务集合及其相互之间的依赖关系
  • 基础库: 公共的工具包、中间件

3.1.2 流程

  • 建立服务性能评估手段
  • 分析性能数据,定位性能瓶颈
  • 重点优化项改造
  • 优化效果验证

3.1.3 建立服务性能评估手段

  • 服务性能评估方式
    • 单独 benchmark 无法满足复杂逻辑分析
    • 不同负载情况下性能表现差异
  • 请求流量构造
    • 不同请求参数覆盖逻辑不同
    • 线上真实流量情况
  • 压测范围
    • 单机器压测
    • 集群压测
  • 性能数据采集
    • 单机性能数据
    • 莱群任能数据

3.1.4 分析性能数据,定位性能瓶颈

  • 使用库不规范
  • 高并发场景优化不足

3.1.5 重点优化项改造

  • 正确性是基础
  • 响应数据 diff
    • 线上请求数据录制回放
    • 新旧逻辑接口数据 diff

3.1.6 优化效果验证

  • 重复压测验证
  • 上线评估优化效果
    • 关注服务监控
    • 逐步放量
    • 收集性能数据

3.1.7 进一步优化,服务整体链路分析

  • 规范上游服务调用接口,明确场景需求
  • 分析链路,通过业务流程优化提升服务性能

3.2 性能调优案例-基础库优化

AB 实验 SDK 的优化

  • 分析基础库核心逻辑和性能瓶颈
    • 设计完善改造方案
    • 数据按需获取
    • 数据序列化协议优化
  • 内部压测验证
  • 推广业务服务落地验证

3.3 性能调优案例- Go 语言优化

编译器 & 运行时优化

  • 优化内存分配策略
  • 优化代码编译流程,生成更高效的程序
  • 内部压测验证
  • 推广业务服务落地验证

优点

  • 接入简单,只需要调整编译配置
  • 通用性强

3.4 总结

  • 性能调优原则
    • 要依靠数据不是猜测
  • 性能分析工具 pprof
    • 熟练使用 pprof 工具排查性能问题并了解其基本原理
  • 性能调优
    • 保证正确性
    • 定位主要瓶颈