字节青训营笔记 day3(4)

36 阅读2分钟

性能调优案例

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

业务服务优化

基本概念

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

流程

建立服务性能评估手段(对系统整体性能进行评估和优化)

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

压测展示

image.png

分析性能数据,定位性能瓶颈(pprof)

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

image.png

重点优化项改造(抓住重点)

  • 正确性是基础
  • 响应数据 diff
  1. 线上请求数据录制回放
  2. 新旧逻辑接口数据 diff(正确性测试)

优化效果验证(充分测试)

  • 重复压测验证

  • 上线评估优化效果

  1. 关注服务监控
  2. 逐步放量
  3. 收集性能数据

image.png

  • 进一步优化,服务整体链路分析
  1. 规范上游服务调用接口,明确场景需求
  2. 分析链路,通过业务流程优化提升服务性能(清除重复调用链路)

基础库优化

AB 实验 SDK 的优化

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

image.png

Go 语言优化

编译器&运行时优化

  • 优化内存分配策略

  • 优化代码编译流程,生成更高效的程序

  • 内部压测验证

  • 推广业务服务落地验证

  • 优点

  1. 接入简单,只需要下载新的 sdk 后调整编译配置
  2. 通用性强(适用于几乎所有 go 程序)

image.png

总结

  • 性能调优原则:要靠数据而不是猜测
  • 性能分析工具 pprof
  • 性能调优:保证正确性,要抓住主要瓶颈进行优化