首页 > 其他分享 >建立性能基线的实践方法

建立性能基线的实践方法

时间:2023-10-26 11:26:42浏览次数:29  
标签:展示 可以 实践 基线 测试 变化 性能

前几天语雀服务宕机了,我写了一篇关于服务稳定性保障的文章,分享到知识星球内部群后,群里很多同学分享了各自公司关于线上服务稳定性保障的实践案例,其中有个词提到的频率很高,那就是:性能基线。

相比于性能测试中的其他名词比如并发、TPS等,性能基线很少被提及到,在能搜到的资料里,性能基线也往往被解读为基准测试,或者基准监控。从我个人的实践经验来说,这样的解读是存在一定偏差的。

这篇文章,我会结合自己的实践经验,分享一些我对于性能基线的理解,以及建立性能基线的实践方法。

 

如何理解性能基线

基线的英文为baseline,翻译过来就是基准线,简单理解它的意思即:假设我们做了某种实验,实验的结果得到了提升,这个提升的对比对象就是所谓的基线,在数学上基线可以理解为参照物。

基线评估方法是一种基础的科学评价方法,主要用来评估目标及其相关内容的发展变化情况,这个方法有四个特点:

  • 能直观反应需要解决的问题;
  • 用有限的几个指标跟踪反应目标进展情况;
  • 进展情况反应的变化应该是连续的,且容易通过测试得到具体数值;
  • 数值所代表的变化在测试阶段应较为明显,为得到结论提供比较判断的基础;

在软件研发领域,基线代表软件在某个阶段的稳定状态,是进入下一个环节的准入基础(质量门禁)。因此当基线形成后,可以视为当前软件状态较为稳定,可以通知相关同学进行评估判断,进入下一个环节(冒烟测试通过正式提测)。

基线可以看作是比较正式的标准,建立初始的基线后,后续的每次测试得到的数据都需要进行记录(存在差值),直到这些数据在统计区间内(一个大版本或一个季度)形成新的基线。因此在性能测试领域,性能基线具备这几个特点:

  • 性能基线可以直接表示当前阶段的性能表现(高了还是低了);
  • 性能基线的指标应该可以直接反映出性能的变化趋势(趋势变化取决于数据统计区间);
  • 性能基线展现出来的变化趋势应该是连续的,且指标容易通过测试得到(指标需要是大家都认可的);
  • 性能基线只是数据展示,变化趋势需要通过分析得到结论(测量数据存在误差,应该有合理区间的正负值);

 

性能基线解决了什么问题

在项目管理和软件研发工作中,我们会经常听到检查点、里程碑这两个词。检查点(按先后顺序制定)可以看作是最小模块的准入准出标准,里程碑(按关键成果制定)则是比较重要的检查点,而基线(按一组关键成果制定),则可以看做是重要的里程碑。

传统的性能测试,往往是项目制的,即把每次性能测试实施看作一个项目,评估性能测试结果是否符合预期指标,达标后出一份性能测试报告。下一次有性能需求,重新开始分析需求,写脚本,准备测试数据,重复之前的动作。

这样做的好处是工作量很好衡量,按项目和接口数量度量产出,简单粗暴。但不足之处是对系统整体性能变化没有直观的连贯性的展示,且对系统性能的认知往往是局部的,没有全局视角,自然线上的稳定性保障会出现各种挑战。

性能基线的优势在于,一方面提供了直观和连续的系统性能变化趋势,便于对系统长期的性能变化快速了解;另一方面则是代表性能基线的指标更通用,即形成了一种标准,这种标准化体系的建立可以降低管理和沟通的成本,为系统整体的稳定性保障提供了很好的基础

 

建立性能基线的实践方法

按照建立性能基线的先后顺序,下面是我自己的实践方法:

1、选择较为稳定和核心的业务模块(比如电商的导购搜索商品库存订单支付物流业务);

2、测试场景的覆盖范围按照优先级分批覆盖(比如优先P0场景,然后P1/P2场景逐步覆盖);

3、选取能直观表示性能变化结果的指标并在团队内达成共识(比如QPS、TPS、99RT及对应服务的资源使用率);

4、覆盖场景对应的脚本和数据应跟随迭代实时更新(在编码阶段跟进变化,并及时进行联调并更新对应的测试数据);

5、性能测试的执行动作尽量做到自动定时执行(自动执行时出问题或者测试结果异常可以手动执行并实时观察,异常数据和日志也应该快速记录下来,便于后续的排查和优化);

6、性能测试执行的结果数据最好通过自动记录+手动调整来记录并展示(展示可以通过饼图/折线图/柱状图等形式来展示,并提供分组筛选和对比功能);

7、每次性能测试结果都会存在一定误差(假设一切条件不变,每次执行的结果也存在误差,误差正负值可以取1%-5%);

8、性能基线的展示和统计区间可以按照版本号和季度等不同维度来展示(如果业务复杂且团队大,可以加上业务域甚至BU的的展示和筛选项);

9、性能基线的初始版本可以选取某个大的版本迭代或者标志性项目的结果为基准,后续性能基线的更新则根据具体情况来变更调整(比如业务需求大幅度变化/系统重构);

10、切记:性能基线一定要在独立稳定的环境开展,且环境的服务硬件配置最好和线上环境保持等配等比缩容!

 

标签:展示,可以,实践,基线,测试,变化,性能
From: https://www.cnblogs.com/imyalost/p/17788964.html

相关文章

  • 数据平面的故障排查-《Istio最佳实践》第19章
    https://blog.csdn.net/qq_36073886/article/details/1311169791、krew是一个可以轻松使用kubectl插件的工具,类似于apt、dnf或brew等工具。安装过程见链接1。wgethttps://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gztar-zxvfkrew-linux......
  • ATGM336H-5N一款高性能BDS/GNSS全星座定位导航模块
    功能概述ATGM336H-5N系列模块是9.7X10.1尺寸的高性能BDS/GNSS全星座定位导航模块系列的总称。该系列模块产品都是基于中科微第四代低功耗GNSSSOC单芯片--AT6558,支持多种卫星导航系统,包括中国的BDS(北斗卫星导航系统),美国的GPS,俄罗斯的GLONASS,欧盟的GALILEO,日本的QZSS以及......
  • TCP Socket性能优化秘籍
    一、引言1.1、TCPSocket在网络通信中的重要性TCPSocket在网络通信中的重要性体现在其提供了可靠的数据传输、连接性、多路复用等特性,是实现各种网络应用的基础,同时具有广泛的兼容性。它的存在使得网络通信更加可靠、高效和方便。其重要性如下:可靠性:TCP(传输控制协议)是一种可......
  • Benchmark 测试字符串拼接的性能
    funcBenchmarkStringf(b*testing.B){ b.ResetTimer() fori:=0;i<b.N;i++{ varstrstring forj:=0;j<numbers;j++{ str=fmt.Sprintf("%s%d",str,j) } } b.StopTimer()}funcBenchmarkStringAdd(b*testing.B){ b.R......
  • MapReduce性能优化秘籍
    1.MapReduce跑的慢的原因MapReduce程序效率的瓶颈在于两点:计算机性能CPU、内存、磁盘、网络I/O操作数据倾斜map和reduce数设置不合理map运行时间太长,导致reduce等待过久小文件过多大量的不可分块的超大文件(例:通过gzip压缩后的文件)spill(溢写)次数过多merge(map端合并......
  • 选择工业交换机时,需要关注哪些方面的性能?
       在工业自动化、能源、交通等领域的网络通信中,工业交换机是一种非常重要的网络设备。它的性能和可靠性直接影响到整个网络的稳定性和安全性。因此,在选择工业交换机时,我们需要关注以下几个方面的性能:   1.抗干扰性能:工业交换机具有很强的抗干扰功用,比如在防雷、防水......
  • sql高级实践
    sql高级实践情景还原:在企业中心中,开通岗位风控的企业一共有13个,要在数据大屏中统计这13个企业的单元,事件,管控措施,任务数。难点解析:device表,risk_unit表,risk_event表,risk_measure只有device表有company_id。重点在于13个企业不是每个企业都有从装置往下的一个完整的数数据树的......
  • (512M位)W25Q512JVFIM、W25Q512JVBIQ、W25Q512JVFIQ、W25Q512JVEIQ串行闪存提供更高的灵
    描述W25Q512JV(512M位)串行闪存为空间、引脚和电源有限的系统提供了存储解决方案。25Q系列提供超越普通串行闪存设备的灵活性和性能。它们非常适合将代码映射到RAM、直接从双通道/四通道SPI(XIP)执行代码以及存储语音、文本和数据。该器件采用2.7V至3.6V单电源供电,省电模式下功耗低至......
  • 数据库系列:使用高区分度索引列提升性能
    数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更1背景我们常常在创建组合索引的时候,会纠结一个问题,组合索引包含多个索引字段,它的顺序应该怎么放,怎样能达到更大的性能利用。正确的索引字段顺序应该取决于使用该索......
  • Go命令大全:全面解析与实践
    本文详尽地探讨了Go语言的内建命令集,包括但不限于gobuild、gorun、goget等。文章首先列举了所有常用的Go命令,并用表格形式简洁地解释了它们的功能。随后,我们逐一深入讲解了每个命令的使用说明、应用场景,以及实际操作中可能遇到的输出结果。关注【TechLeadCloud】,分享互联网......