理解性能测试理发店模型

  之前有看到博文:《LoadRunner 没有告诉你的》之三——理发店模型,主要在讨论性能测试中的理发店模型,通过对理发店模型的理解来深入理解性能测试中对应的场景和性能指标的关系。当时对文中提到的两个观点不是很理解,或者不能很清晰的理解,观点如下:

保证最佳并发用户数要大于系统的平均负载

确保系统的最大并发用户数要大于系统需要承受的峰值负载。

       为什么要有这样保证?Why?今天带着对这两个观点的思考,再次重温了下理发店模型并通过详细分析文中的几个性能指标数据,已经比较清晰的理解文中提到的这两个观点了。以下是分析过程。

为了更贴近真实的性能测试中系统的行为,不妨对理发店模型描述如下:

1、理发店共有3名理发师;
2、每位理发师剪一个发的时间都是1小时;
3、理发店设有等待区,当顾客来到理发店发现没有理发师空闲而为他理发时,顾客就在等待区排队等待,每次理发师要为下一个顾客理发时就从等待区队列的最前面喊一个顾客为其理发,等待区可供排队的长度为无穷大;
4、顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时,而且等待时间越长,顾客的满意度越低。如果3个小时还不能剪完头发,顾客就会极度的不满意而无法容忍(注意这里是一种极度不满意的状态,顾客虽然无法容忍但并不会立马生气的走人,你可以理解为他无可奈何,只能接受,可能下次就再也不会光顾这个理发店了,并且超过3小时的时间越长,不满意程度越深)

指标定义:
资源的利用情况(Utilization):理发店中正在忙于理发的理发师数量
吞吐量(Throughput):这里更准确的说是TPS,即单位时间(1小时)内完成理发的次数
响应时间(ResponseTime):这里包括顾客等待开始理发的时间与理发所花时间之和

 

    设一次来理发店的顾客的数量为n,这里不考虑时间维度,那么可以得到如下顾客数量与三个指标的关系(最后一列响应时间数据分别对应每个用户的响应时间):

 UtilizationThroughputResponseTime
1111
2221 1
3331 1 1
4331 1 1 2
5331 1 1 2 2
6331 1 1 2 2 2
7331 1 1 2 2 2 3
8331 1 1 2 2 2 3 3
9331 1 1 2 2 2 3 3 3
10331 1 1 2 2 2 3 3 3 4
11331 1 1 2 2 2 3 3 3 4 4
12331 1 1 2 2 2 3 3 3 4 4 4
13331 1 1 2 2 2 3 3 3 4 4 4 5
33

    对应到性能测试中,这里一次来理发店的顾客的数量可以理解为一次并发的用户数,或者是系统承受的负载(一次并发的用户数越多,系统承受的负载越大),因为是模型,所以我们不考虑当系统负载达到某个程度时,系统的资源利用率和吞吐量可能反而会下降。 观察数据可以看到,当一次并发的用户数n<=3时,响应时间始终稳定不变;而当一次并发的用户数3<n<=9时,响应时间(平均)有增加的趋势,但始终在可以忍受的程度之内(<=3);当并发用户数n>9时,响应时间继续增加,已经开始有部分用户的响应时间达到了极度不满意状态了;可以预测,如果继续将以上数据往下列的话,并发用户数n必然会在达到某个值时,所有的用户的响应时间都将达到极度不满意状态。

    将以上分析对应到标准的软件性能模型(以上三个指标随负载的变化曲线)上,可以得出对于以上模型,最佳并发用户数为3,最大并发用户数为9。那么为什么需要保证最佳并发用户数要大于系统的平均负载呢?不是保证最大并发用户数大于系统的平均负载就可以了吗?

     以上数据没有考虑时间维度,所以让我们产生了错觉(感觉只要系统的平均负载n不大于最大并发用户数9,响应时间就在可容忍度3内),如果我们增加时间维度,来观察时间抽每个时刻t(单位是1小时)上的并发用户数与三个指标的关系,就能看清答案了。我们还是用(多个)二维的表格来展示这个三维关系,再次重申这里的并发用户数可以理解为负载或请求系统处理的数量,并发用户数n=4意味着单位时间内都让系统接受4个待处理的请求,L为等待区队列长度,也即是在该时刻没有被处理而等待处理的请求。(响应时间数据分别对应该时刻被系统处理的用户的响应时间)

n=1:
t UtilizationThroughputResponseTimeL
11110
21110
31110
41110
51110
61110
71110
81110
91110
101110
1110
     
n=2:
t UtilizationThroughputResponseTimeL
1221 10
2221 10
3221 10
4221 10
5221 10
6221 10
7221 10
8221 10
9221 10
10221 10
221 10
     
n=3:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 10
7331 1 10
8331 1 10
9331 1 10
10331 1 10
331 1 10
     
n=4:
t UtilizationThroughputResponseTimeL
1331 1 11
2332 1 12
3332 2 13
4332 2 24
5332 2 25
6333 2 26
7333 3 27
8333 3 38
9333 3 39
10334 3 310
33
     
n=5:
t UtilizationThroughputResponseTimeL
1331 1 12
2332 2 14
3332 2 26
4333 2 28
5333 3 310
6333 3 312
7334 4 314
33
     
n=6:
t UtilizationThroughputResponseTimeL
1331 1 13
2332 2 26
3332 2 29
4333 3 312
5333 3 315
6334 4 418
33
     
n=7:
t UtilizationThroughputResponseTimeL
1331 1 14
2332 2 28
3333 2 212
4333 3 316
5334 4 320
33
     
n=8:
t UtilizationThroughputResponseTimeL
1331 1 15
2332 2 210
3333 3 215
4333 3 320
5334 4 425
33
     
n=9:
t UtilizationThroughputResponseTimeL
1331 1 16
2332 2 212
3333 3 318
4333 3 324
5334 4 430

     通过以上数据不难发现,当系统负载n<=3时,随着时间不断向前推进,响应时间始终稳定如一,且排队等待处理的负载数始终为0;当系统负载n=4时,随着时间的推进,响应时间(平均)在逐渐增大,且前9小时响应时间没有超出容忍程度3,在第10小时已经开始有部分用户的响应时间超出了容忍程度处于极度不满意状态,可以预测第10小时之后,不断的会有更多的用户响应时间超出容忍程度,并最终所有用户响应时间都会超出容忍程度,另外还发现排队等待的负载数L也不断增大;当n>4是基本规律与n=4时一致,且n越大,(部分用户或所有用户)超出容忍程度的时刻越靠前,排队等待的负载数L也增长越快。

     由此我们需要保证系统的最佳并发用户数要大于系统的平均负载,或者说系统的平均负载要小于最佳并发用户数,否则,必定会在某个时刻(该时刻到来的早还是迟,快还是慢,取决于系统承受负载的大小),响应时间会超出容忍程度,并最终至系统不可用。

      那为什么又需要确保系统的最大并发用户数要大于系统需要承受的峰值负载呢?不是只要系统承受的负载大于最佳并发用户数,响应时间就必定在某个时刻超出容忍程度并最终变得不可用吗?另外以上统计数据还会给我们一个错觉就是,排队等待的请求数不能大于0,即不能存在有排队等待的现象,否则最终系统也还是会变得不可用的。

      问题的关键就是上面这几个表格数据有一个隐含的条件--每个表格数据中系统承受的负载始终不变,比如n=4时,那么系统承受的负载始终为4(每小时都会承受4个待处理的请求)。而我们知道系统实际承受的负载不是稳定不变的,而是时刻可能会发生着变化的,变得比平均负载要大或小(上下波动),系统承受的峰值负载也就是系统承受的最大负载,这个承受最大负载持续的时间必定是某一段短暂的时间。因此我们改变上面的表格数据统计规则:因为最佳并发用户数为3,那么我们假设系统在第6小时这个时刻承受峰值负载(最大负载),在其他的时间承受的负载始终为最佳并发用户数负载,当然实际肯定是有某些时刻系统承受的负载要小于最佳并发用户数负载的,但这个我们并不关心。如下统计数据,nmax=4表示系统第6小时这个时刻承受的峰值负载为4。

nmax=4:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 11
7332 1 11
8332 1 11
9332 1 11
10332 1 11
33
     
nmax=5:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 12
7332 2 12
8332 2 12
9332 2 12
10332 2 12
33
     
nmax=6:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 13
7332 2 23
8332 2 23
9332 2 23
10332 2 23
33
     
nmax=7:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 14
7332 2 24
8333 2 24
9333 2 24
10333 2 24
33
     
nmax=8:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 15
7332 2 25
8333 3 25
9333 3 25
10333 3 25
33
     
nmax=9:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 16
7332 2 26
8333 3 36
9333 3 36
10333 3 36
33
     
nmax=10:
t UtilizationThroughputResponseTimeL
1331 1 10
2331 1 10
3331 1 10
4331 1 10
5331 1 10
6331 1 17
7332 2 27
8333 3 37
9334 3 37
10334 3 37
33

        通过以上表格数据,不难发现,只要系统承受的峰值负载nmax不大于最大并发用户数9,那么虽然已经有排队等待的现象发生,但是响应时间却始终都没有超出容忍程度3。而一但系统承受的峰值负载nmax大于最大并发用户数9(比如为10),那么必定会在某个时刻会有部分用户响应时间超出容忍程度。且系统承受的峰值负载超过最大并发用户数越多,响应时间超出容忍程度的用户数也越多,并最终至所有用户的响应时间超过容忍程度。即是要确保系统承受的峰值负载不大于系统的最大并发用户数,也就是要系统的最大并发用户数要大于系统需要承受的峰值负载。

         以上所有分析都是基于理想模型和一定假设条件的,不能代表系统的真实性能状况,在真实的情况中需要考虑更多的因素,比如用于排队的等待区长度是有限的等等。但是以上分析可以为我们分析真实的性能数据提供一定参考、依据和思路,然后根据真实的性能数据与以上分析基准的差别来找到更多的因素。

 

转载于:https://www.cnblogs.com/yezhaohui/p/3440320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值