架构师工具箱之性能测试:性能测试指标与指标关系理论梳理

缘起

最近在指导公司同事做压测,解决了一个项目上的性能问题。充分理解了所谓“书到用时方恨少”这个点。
还好之前看过一些性能测试相关的书籍,加之以前自己做开发人员的时候,也参与过几次性能调优,有过一些经验。
借着这次问题的排查,我将原来散乱的知识点,做了一个总结。这份总结是我对性能压测理论体系的一个理解,希望对大家有所帮助吧。

术语解释

为了方便对性能测试术语不熟系的小伙伴阅读,这里对术语以及指标之间的联系做一个简单的解释。
QPS,每秒查询,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
TPS,每秒事务,严格的定义就不抄了,网上很多,就说一下我的理解,如果一个事务里面只包含一个查询,那么TPS等同于QPS,如果有n个查询,那么TPS = QPS / n
RT,响应时间,很好理解,就是执行一个事务的耗时。
并发数,指同一时间,客户端请求系统的数量
吞吐量,指的是系统承受压力的能力,TPS指标可以很直接的表示一个系统的吞吐量。

压力测试指标关系总结

这里我整理了一套自己总结得出的方法论。可能有前辈提出过,但是这里至少我用自己的理解,把整个过程,给大家再讲一遍。
理解了上面几个要素的意义之后,就能推算出它们之间的关系:
QPS = 并发数 / RT
TPS = QPS / n (n为一个事务中的查询数量)
得出:TPS = 并发数 / (RT * n )

从数学角度上来说,并发与TPS成正比,响应时间与单个事务执行的查询数量成反比。
一般来说,针对某一项特定业务,一个事务中包含的查询数量n是固定的。因此,影响TPS的因素,就只有RT和并发。

系统轻负载区间

当系统处于轻负载情况下,他的RT是保持恒定的,因此可以简化系统在轻负载下的TPS函数为:

TPS = k * 并发, 其中: k = 1 / (RT * n) ≈ 常数 (系统轻负载)
这是一个典型的过原点的一次正比例函数。以函数图形表示,应该是这样的。
再次强调,这个模型的限制是:系统处于低负载在区间!!!
在这里插入图片描述

系统从轻负载趋近满负载区间

当系统性能从轻载趋于满载的区间,RT就不再是一个常数了,而是随着并发的上升而逐渐上升。这个时候,我们就可以得出一个压力系数α。
假设,并发以k1倍增长,RT以k2倍增长。那么α = k1 / k2;
举个例子,当并发上升2倍,响应事件增加1.5倍,则α = 2 / 1.5 = 1.33。
假设我们的轻负载和满负载区间的拐点并发与RT,作为我们的基准并发与基准RT。
根据我们上面的TPS = 并发 / (RT * n)的公式,得出满载区间内 TPS = 基准并发 * k1 / (基准RT * k2 * n)
结合α的定义,上述公式可以简化成 TPS = 基准并发 * α / (基准RT * n)
可以看到,影响我们TPS曲线斜率的唯一值就是α,换句话说,只要α > 1,系统总体TPS还是向上走的,我们就认为,系统还未达到满载,可以继续增加并发。

根据上面的公式,我们得到下面的函数图形:
在这里插入图片描述

系统满载

当系统达到满载以后,并发增长的速度就与RT同步了,因此得出α = 1。所有系数均为常数,函数图形斜率变为0,函数图形变成了一条平线(数学中称之为常数函数)此时再提高并发,系统的TPS并不会再提高达到饱和状态。因此,系统的性能图形,看起来就是这个样子的:
在这里插入图片描述

系统过载

当系统达到满载后继续施加压力提高并发的话,此时如果不对系统加以任何保护措施(这就是为什么我们要做限流的原因),会因为系统过载导致响应时间的增加速度会超过并发的增长速度,导致系数α < 1,函数图形的斜率会小于0,导致TPS反而下降。系统的性能图形会是这样的。
在这里插入图片描述
有的系统,如果不稳定的话,会出现断崖式的下跌,甚至直接跌零,系统直接压挂。
在这里插入图片描述

限流保护

为了避免系统过载后的系统异常,通常我们会在开发过程中,根据压力测试的评估,得到系统的极限TPS容量,在趋近满载的区间上,选取一个拐点,进行限流保护,一般根据我的项目经验,这个限流保护的值,应当取α = 1.1左右的位置。在图形上标识的话,大概是这么个位置。
在这里插入图片描述

写在最后的总结

本文总结了我在项目中结合书本上的理论知识给的实践经验,描述了系统从轻载->中等负载-满载->过载的性能曲线变化。也给出了限流保护的建议值。

从这里我们可以看到,如果有人直接问你,系统的dubbo线程数,MQ消费者线程数,TCP连接数调多少合适?那么我在这里可以很负责任的告诉你,每个系统对于这些参数的值都是不一样的,我们需要先采用一个默认值,进行系统性能测试,并且在性能测试中,不断调整这些参数,达到系统RT以及并发数比例的最大优化。
另外这个值并非一劳永逸,对系统关键节点的修改,或者接入新的下游系统,都会影响到系统的性能。所以,在一些重大调整以后,需要进行回归测试,重新测定最优参数。

这里,给出了压测理论的理解以及方法论的总结,并给出我在这方面的一些意见与建议,希望对正在做压测或者被压测性能调优困扰的大家能够有所帮助。

发布了7 篇原创文章 · 获赞 1 · 访问量 1293
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览