性能调优案例|青训营笔记

138 阅读2分钟

2.3 性能调优案例

简介 介绍实际业务服务性能优化的案例 对逻辑相对复杂的程序如何进行性能调优 ●业务服务优化 ●基础库优化 ●Go语言优化

2.3.1性能调优案例业务服务优化

基本概念

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

Untitled

流程

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

建立服务性能评估手段

  • 服务性能评估方式

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

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

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

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

上面这个图1为单机压测结果,随着机器负载的升高,到达了某个瓶颈就算CPU再多也没用了

图2为线上的服务,非常的复杂

image (3).png

建立服务性能评估手段

关注了接口耗时等性能指标

image (4).png

分析性能数据,定位性能瓶颈 使用库不规范

image (5).png

Untitled

高并发场景优化不足

(可以针对性的优化某些库,与低峰期相比)

Untitled

重点优化项改造

  • 正确性是基础

  • 响应数据diff

    • 线上请求数据录制回放,进行记录
    • 再用新的接口进行相同方法的调用
    • 新旧逻辑接口数据diff

Untitled

优化效果验证

  • 重复压测验证

  • 上线评估优化效果

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

    image (6).png

进一步优化,服务整体链路分析 规范上游服务调用接口,明确场景需求 分析链路,通过业务流程优化提升服务性能(由单体到整体的提升) 例如是否需要实时,可以加缓存降低压力?是否更小的结果数据集就可以满足需求,这样响应速度会更快?是否会出现重复调用的情况,可以合并请求?