性能工程

通过分析业务逻辑和技术架构,创建性能模型,制定性能方案,准备应用环境,设计并实施性能部署监控,实现符合真实业务逻辑的压力,通过监控手段获取性能数据,分析性能数据,查找出性能瓶颈的根本原因并优化,最后通过环比生产环境的性能数据修正场景

性能指标

基准场景下的性能需求指标:

业务名称 TPS TPS方差 响应时间 响应时间方差 90% 95% 99% 成功率
业务1 500 5% 100ms 5% 150ms 300ms 500ms 100%

对于性能来说,当平均值是一个比较优秀的值时,有可能会出现非常抖动的情况,标准方差是为了描述一条曲线的上下浮动范围有多大,而响应时间百分比是为了描述一条曲线的上下浮动范围有多大

容量场景下的性能需求指标:最重要的就是业务比例

业务名称 比例 TPS TPS方差 响应时间 响应时间方差 90% 95% 99% 成功率
业务1 50% 500 5% 100ms 5% 150ms 300ms 500ms 100%

稳定性场景下的性能需求指标:要合理判断稳定性场景需要运行多长时间,同时也要合理判断稳定性场景应该用多大的压力执行

异常场景下的性能需求指标:针对系统的架构,先分析异常场景中的需求点,再设计相应的案例来覆盖

性能方案

2023223155139

业务模型

抽取真实业务模型:

  1. 抽取生产日志
  2. 梳理业务流程
stateDiagram-v2
  统计生产业务量 --> 统计业务场景峰值TPS
  统计业务场景峰值TPS --> 得到各接口请求比例
  得到各接口请求比例 --> 梳理业务流程
  梳理业务流程 --> 在测试中实现业务比例

定律与数理基础

点估计指标

分布模型

排队论

2022728163048

测试数据准备

系统铺底数据:系统底库数据

参数化数据:发起测试请求的数据

性能数据分析

目的:正不正常、趋势预测、问题排查

分析需要注意的:

  1. 数据分析可以证实数据的相关性,但是还需要其他知识才能更准确地判断谁是因、谁是果
  2. 数据的大小与趋势解读与业务强相关
  3. 垃圾数据进垃圾数据出
  4. 理解各个性能指标的关系

性能数据展示

难点:数据量大、数据复杂、背后问题复杂、牵扯模块多

在展示时,以不同视图体现不同重点,给足上下文信息

  1. 表格:理解各个性能指标的关系
  2. 线图:显示一段时间内这个变量的变化或趋势
  3. PDF图、CDF图:一个变量的概率数据,较为特殊的线图
  4. 面积图
  5. 柱状图:用于比较不同类别的数量
  6. 散点图:用于展示数据的分布情况
  7. 饼图:需要显示比例数据或者百分比时
  8. 树形图:对于显示类别和子类别之间的层次结构和比较值非常有用
  9. 热力图:使用颜色反映数据的重要情况

PDF、CDF

性能分析

stateDiagram-v2
  剖析 --> 猜测
  猜测 --> 剖析
  剖析 --> 解决

202282101324

方法论

  1. 从压力场景中获取 TPS 和响应时间曲线
  2. 分析架构,看压力流量的路径
  3. 分析各个链路节点,拆分响应时间,分析主要瓶颈
  4. 全局监控所需要的性能数据
  5. 定向监控分析:通过全局监控判断分析,知道哪个方向上有问题后,再去做定向的监控,辅助全局数据,得到性能问题的证据链
  6. 根据证据链判断性能瓶颈点
  7. 根据具体问题确定解决方案

性能优化

原则

过早优化是万恶之源、不要进行头痛医头的表层优化,没有理解底层运行机制,任何优化方案都很难达到最好的优化效果

策略