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

94 阅读2分钟

性能调优原则:

  • 要依据数据而不是猜测
  • 要定位最大瓶颈而不是细枝末节
  • 不要过早优化
  • 不要过度优化,系统可能要继续开发,任意产生不兼容的情况

学习使用性能调优优化工具pprof

性能优化调优案例:

  • 业务服务优化

    • 基本概念

      1. 服务:能单独部署,承载一定功能的程序
      2. 依赖:ServiceA的功能实现依赖于ServiceB的相应结果,称为ServiceA依赖于serviceB
      3. 调用链路:能支持一个接口请求的相关服务集合极其相互之间的依赖关系
      4. 基础库:公共的工具包,中间件
    • 流程:

      1. 建立服务性能的评估手段

        1. 服务性能评估方式

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

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

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

          • 单机性能数据
          • 集群性能数据
      2. 分析性能数据,定位性能瓶颈,可以使用性能评估工具进行

        1. 使用库不规范,日志等使用不规范占用过多资源
        2. 高并发场景优化不足,在高并发情况下会出现什么问题
      3. 重点优化项改造

        1. 正确是基础:把线上的流量和返回值和优化后的进行对比,差别不大说明优化后并没有产生错误

        2. 响应数据diff

          • 线上请求数据录制回放
          • 新旧逻辑接口数据diff
      4. 优化效果验证

        1. 重复压测验证

        2. 上线评估优化效果

          • 关注服务监控
          • 逐步放量
          • 收集性能数据
      5. 进一步优化,服务整体的链路分析

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

    AB实验SDK的优化

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

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

    3. 推广业务服务落地验证,整体上节省资源

  • Go语言优化(使用最广的优化)

    1. 编译器和运行时优化

      • 优化内存分配策略

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

      • 内部压测验证

      • 退管业务服务落地

      • 优点

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

总结:

  • 性能调优原则:要依靠数据而不是依靠猜测
  • 性能分析工具pprof要熟练使用
  • 性能调优要保证正确性,定位到主要瓶颈