性能优化原则与流程 | 青训营笔记

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

了解工程中性能优化的原则和流程

服务量特别大的时候,每优化一个百分点都能减少很多资源开销。对逻辑相对复杂的程序如何进行性能调优。

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

业务服务优化

基本概念

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

流程

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

建立服务性能评估手段

  • 服务性能评估方式

    • 单独 benchmark 无法满足复杂逻辑分析
    • 不同负载情况下性能表现差异
  • 请求流量构造

    • 不同请求参数覆盖逻辑不同
    • 线上真实流量情况
  • 压测范围

    • 单机器压测
    • 集群压测
  • 性能数据采集

    • 单机性能数据
    • 集群性能数据

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

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

重点优化项改造

  • 正确性是基础

  • 响应数据 diff

    • 线上请求数据录制回放
    • 新旧逻辑接口数据 diff

优化效果验证

  • 重复压测验证

  • 上线评估优化效果

    • 关注服务监控
    • 逐步放量
    • 收集性能数据

基础库优化

AB实验SDK的优化

  • 分析基础库核心逻辑和性能瓶颈

    • 设计完善改造方案
    • 数据按需获取
    • 数据序列化协议优化
  • 内部压测验证

  • 推广业务服务落地验证

Go 语言优化

编译器&运行时优化

  • 优化内存分配策略

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

  • 内部压测验证

  • 推广业务服务落地验证

  • 优点

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