在性能测试中 蓝色的线为并发数与响应时间的关系,是条曲线,很多时候我们希望知道比如 100ms平均响应时间时支持的最大并发数是多少,我们可以通过性能测试得出,但是在环境不允许或者说需要估算的系统较为庞大的时候,实际测试就无法进行,那么这时候就需要进行估算,这里在实际工作中总结出一种线性估算方法。
我们可以假设并发数与平均响应时间是正比关系,设T=kX T(平均响应时间) X(最大并发数)
只需要求出这条线上的一个点即可
设这个点为 t x 这个t x为系统刚好能够承载最大TPS时的响应时间和并发数
举个例子,接口平均响应时间10ms,对于一个线程一秒最多访问1000/10=100次 也就是一个并发数最大TPS为100/s
如果我们知道系统最大能够承载的TPS和最小的平均响应时间,就能够得出此时最大承载的并发数x,可以肯定的是,超出这个并发数,平均响应时间必然增加(因为每秒处理能力已经到达上限,超出的请求需要等待),那么得出公式
TPSmax/(1000/t)=x 这个t是和 TPSmax都是可以测量和计算的,比如下图
上述公式可以化简,k=1000/TPSmax
这里的TPSmax=4772/s
得出 k=0.2127 T=0.2127X
我们随意带入一组数据验证一下 比如 T=269ms时 x=269/0.2127=1264 实际为1410
或者 x=874时 T=0.2127*874=186ms 实际为160ms
如果我们希望数据更精确一些,可以设 T=kX+b 将一组数据作为另一个点带入,另一组数据为最小响应时间的并发数,这里avgTmin可以测量,并发数TPSmax/(1000/t)=x 这个公式求出
得出二元一次方程组
16=75k+b 269=1410k+b 求出 k=0.1895 b=1.7875
再次带入 x=874时 T=0.1895*874+1.7875=167ms 实际为 160ms 误差就缩小一些
那么它有什么用呢
1、帮助我们评估测试时的并发数设置
2、给出并发 求出平均响应时间,给出响应时间,求出最大并发
3、基于上面这点,我们可以估算系统的并发数,因为平均响应时间是知道的,TPS通过单机测试可以知道,乘上服务器数量为最大TPS,求出一个点后得出k值,
通过我们目前接口的平均响应时间即可估算出目前接口承载的并发数
结合以下计算,我们可以评估一个目标系统的各个指标
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数
(X*0.8)/(24*60*60*0.2)=N 系统日访问量X=N*21600
反推TPS
若达到1亿日访问量 需要系统整体TPS>100000000/21600=4629 TPS
那么就可以给出这样一个问题的估算答案:
我需要一个1亿日访问量,平均响应时间不超过50ms的系统,至少应满足多少TPS,这时能够支持多少并发(不考虑思考时间)?