51Testing软件测试论坛

标题: “理发店模型”看性能测试的概念和理论 [打印本页]

作者: 阿七    时间: 2008-12-24 17:02
标题: “理发店模型”看性能测试的概念和理论
在我们的这个理发店中,我们事先做了如下的假设:
1. 理发店共有3名理发师;

2. 每位理发师剪一个发的时间都是1小时;

3. 我们顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时,而且等待时间越长,顾客的满意度越低。如果3个小时还不能剪完头发,我们的顾客会立马生气的走人。



通过上面的假设我们不难想象出下面的场景:


  1. 当理发店内只有1位顾客时,只需要有1名理发师为他提供服务,其他两名理发师可能继续等着,也可能会帮忙打打杂。1小时后,这位顾客剪完头发出门走了。那么在这1个小时里,整个理发店只服务了1位顾客,这位顾客花费在这次剪发的时间是1小时;

  2. 当理发店内同时有两位顾客时,就会同时有两名理发师在为顾客服务,另外1位发呆或者打杂帮忙。仍然是1小时后,两位顾客剪完头发出门。在这1小时里,理发店服务了两位顾客,这两位顾客花费在剪发的时间均为1小时;

  3. 很容易理解,当理发店内同时有三位顾客时,理发店可以在1小时内同时服务三位顾客,每位顾客花费在这次剪发的时间仍然是均为1小时;


从上面几个场景中我们可以发现,在理发店同时服务的顾客数量从1位增加到3位的过程中,随着顾客数量的增多,理发店的整体工作效率在提高,但是每位顾客在理发店内所呆的时间并未延长。


当然,我们可以假设当只有1位顾客和2位顾客时,空闲的理发师可以帮忙打杂,使得其他理发师的工作效率提高,并使每位顾客的剪发时间小于1小时。不过即使根据这个假设,虽然随着顾客数量的增多,每位顾客的服务时间有所延长,但是这个时间始终还被控制在顾客可接受的范围之内,并且顾客是不需要等待的。


不过随着理发店的生意越来越好,顾客也越来越多,新的场景出现了。假设有一次顾客A、B、C刚进理发店准备剪发,外面一推门又进来了顾客D、E、F。因为A、B、C三位顾客先到,所以D、E、F三位只好坐在长板凳上等着。1小时后,A、B、C三位剪完头发走了,他们每个人这次剪发所花费的时间均为1小时。可是D、E、F三位就没有这么好运,因为他们要先等A、B、C三位剪完才能剪,所以他们每个人这次剪发所花费的时间均为2小时——包括等待1小时图舴?小时。


通过上面这个场景我们可以发现,对于理发店来说,都是每小时服务三位顾客——第1个小时是A、B、C,第二个小时是D、E、F;但是对于顾客D、E、F来说,“响应时间”延长了。如果你可以理解上面的这些场景,就可以继续往下看了。


在新的场景中,我们假设这次理发店里一次来了9位顾客,根据我们上面的场景,相信你不难推断,这9位顾客中有3位的“响应时间”为1小时,有3位的“响应时间”为2小时(等待1小时+剪发1小时),还有3位的“响应时间”为3小时(等待2小时+剪发1小时)——已经到达用户所能忍受的极限。假如在把这个场景中的顾客数量改为10,那么我们已经可以断定,一定会有1位顾客因为“响应时间”过长而无法忍受,最终离开理发店走了。

我想并不需要特别说明,大家也一定可以把上面的这些场景跟性能测试挂上钩了。如果你还是觉得比较抽象,继续看下面的这张图 ^_^

[attach]47978[/attach]  

这张图中展示的是1个标准的软件性能模型。在图中有三条曲线,分别表示资源的利用情况(Utilization,包括硬件资源和软件资源)、吞吐量(Throughput,这里是指每秒事务数)以及响应时间(Response Time)。图中坐标轴的横轴从左到右表现了并发用户数(Number of Concurrent Users)的不断增长。

    在这张图中我们可以看到,最开始,随着并发用户数的增长,资源占用率和吞吐量会相应的增长,但是响应时间的变化不大;不过当并发用户数增长到一定程度后,资源占用达到饱和,吞吐量增长明显放缓甚至停止增长,而响应时间却进一步延长。如果并发用户数继续增长,你会发现软硬件资源占用继续维持在饱和状态,但是吞吐量开始下降,响应时间明显的超出了用户可接受的范围,并且最终导致用户放弃了这次请求甚至离开。

    根据这种性能表现,图中划分了三个区域,分别是Light Load(较轻的压力)、Heavy Load(较重的压力)和Buckle Zone(用户无法忍受并放弃请求)。在Light Load和Heavy Load 两个区域交界处的并发用户数,我们称为“最佳并发用户数(The Optimum Number of Concurrent Users)”,而Heavy Load和Buckle Zone两个区域交界处的并发用户数则称为“最大并发用户数(The Maximum Number of Concurrent Users)”。


当系统的负载等于最佳并发用户数时,系统的整体效率最高,没有资源被浪费,用户也不需要等待;当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃;而当系统负载大于最大并发用户数时,将注定会导致某些用户无法忍受超长的响应时间而放弃。



对应到我们上面理发店的例子,每小时3个顾客就是这个理发店的最佳并发用户数,而每小时9个顾客则是它的最大并发用户数。当每小时都有3个顾客到来时,理发店的整体工作效率最高;而当每小时都有9个顾客到来时,前几个小时来的顾客还可以忍受,但是随着等待的顾客人数越来越多,等待时间越来越长,最终还是会有顾客无法忍受而离开。同时,随着理发店里顾客人数的增多和理发师工作时间的延长,理发师会逐渐产生疲劳,还要多花一些时间来清理环境和维持秩序,这些因素将最终导致理发师的工作效率随着顾客人数的增多和工作的延长而逐渐的下降,到最后可能要1.5小时甚至2个小时才能剪完1个发了。



当然,如果一开始就有10个顾客到来,则注定有1位顾客剪不到头发了。



进一步理解“最佳并发用户数”和“最大并发用户数”





对于一个确定的被测系统来说,在某个具体的软硬件环境下,它的“最佳并发用户数”和“最大并发用户数”都是客观存在。以“最佳并发用户数”为例,假如一个系统的最佳并发用户数是50,那么一旦并发量超过这个值,系统的吞吐量和响应时间必然会 “此消彼长”;如果系统负载长期大于这个数,必然会导致用户的满意度降低并最终达到一种无法忍受的地步。所以我们应该 保证最佳并发用户数要大于系统的平均负载。



要补充的一点是,当我们需要对一个系统长时间施加压力——例如连续加压3-5天,来验证系统的可靠性或者说稳定性时,我们所使用的并发用户数应该等于或小于“最佳并发用户数”——大家也可以结合上面的讨论想想这是为什么 ^_^



而对于最大并发用户数的识别,需要考虑和鉴别一下以下两种情况:



1.
当系统的负载达到最大并发用户数后,响应时间超过了用户可以忍受的最大限度——这个限度应该来源于性能需求,例如:在某个级别的负载下,系统的响应时间应该小于5秒。这里容易疏忽的一点是,不要把顾客因为无法忍受而离开时店内的顾客数量作为理发店的“最大并发用户数”,因为这位顾客是在3小时前到达的,也就是说3小时前理发店内的顾客数量才是我们要找的“最大并发用户数”。而且,这位顾客的离开只是一个开始,可能有会更多的顾客随后也因为无法忍受超长的等待时间而离开;


2.
在响应时间还没有到达用户可忍受的最大限度前,有可能已经出现了用户请求的失败。以理发店模型为例,如果理发店只能容纳6位顾客,那么当7位顾客同时来到理发店时,虽然我们可以知道所有顾客都能在可容忍的时间内剪完头发,但是因为理发店容量有限,最终只好有一位顾客打道回府,改天再来。


对于一个系统来说,我们应该 确保系统的最大并发用户数要大于系统需要承受的峰值负载。



如果你已经理解了上面提到的全部的概念,我想你可以展开进一步的思考,回头看一下自己以往做过的性能测试,看看是否可以对以往的工作产生新的理解。也欢迎大家在这里提出自己的心得或疑惑,继续讨论下去。


理发店模型的进一步扩展


这一节中我会提到一些对理发店模型的扩展,当然,我依然是只讲述现实中的理发店的故事,至于如何将这些扩展同性能测试以及性能解决方案等方面关联起来,就留给大家继续思考了 ^_^




扩展场景1:有些顾客已经是理发店的老顾客,他们和理发师已经非常熟悉,理发师可以不用花费太多时间沟通就知道这位顾客的想法。并且理发师对这位顾客的脑袋的形状也很熟悉,所以可以更快的完成一次理发的工作。



扩展场景2:理发店并不是只有剪发一种业务,还提供了烫发染发之类的业务,那么当顾客提出新的要求时,理发师服务一位顾客的时间可能会超过标准的1小时。而且这时如果要计算每位顾客的等待时间就变得复杂了很多,有些顾客的排队时间会比原来预计的延长,并最终导致他们因为无法忍受而离开。



扩展场景3:随着烫发和染发业务的增加,理发师们决定分工,两位专门剪发,一位专门负责烫发和染发。



扩展场景4:理发店的生意越来越好,理发师的数量和理发店的门面已经无法满足顾客的要求,于是理发店的老板决定在旁边再开一家店,并招聘一些工作能力更强的理发师。



扩展场景5:理发店的生意变得极为火爆了,两家店都无法满足顾客数量增长的需求,并且有些顾客开始反映到理发店的路途太远,到了以后又因为烫发和染发的人太多而等太久。可是理发店的老板也明白烫发和染发的收入要远远高于剪发阿,于是他脑筋一转,决定继续改变策略,在附近的几个大型小区租用小的铺面开设分店,专职剪发业务;再在市区的繁华路段开设旗舰店,专门为烫发、染发的顾客,以及VIP顾客服务。并增设800电话,当顾客想要剪发时,可以拨打这个电话,并由服务人员根据顾客的居住地点,将其指引到距离最近的一家分店去。



这篇文章就先写到这里了,希望大家在看完之后可以继续思考一下,也写出自己的心得体会或者新的想法,记下自己的不解和疑惑,让我们在不断的交流和讨论中走的更远 ^_^


转自:http://jackei.cnblogs.com   


[ 本帖最后由 阿七 于 2009-11-25 11:25 编辑 ]
作者: 云层    时间: 2008-12-24 17:09
非常精彩的帖子,还没能力像楼主这样详细的写出来呢
作者: uChrist    时间: 2008-12-24 17:42
好帖啊

扩展5继承自扩展4吧?
作者: 超越自我    时间: 2008-12-25 09:24
绝对详细和精透..

支持..
作者: yuandjing    时间: 2008-12-26 14:31
嘿嘿,好像操作系统的经典的互斥等待临界区学过,叫什么来着,ipc还是rpc...都还给老师了
作者: GT.Haksimus    时间: 2009-2-5 22:57
::JFBQ00125080409b:::
写得真好,非常细致和全面,是偶崇拜的对象,佩服!
作者: liuyun3028    时间: 2009-2-6 14:05
标题: 厉害
比喻形象生动,并且说明问题!
作者: fishy    时间: 2009-2-13 16:51
写的很不错。。。
作者: fishy    时间: 2009-2-13 16:53
是节选自lr没有告诉你的那本书的吧。。。
作者: namisang    时间: 2009-2-16 11:14
不错
作者: jenvee    时间: 2009-2-18 17:32
标题: 回复 1# 的帖子

作者: lindawu    时间: 2009-2-26 18:02
楼主好历害呀。分析得这么透彻,学习中。
作者: mandytintin    时间: 2009-3-4 10:41
这个分析的不错,谢谢啦
作者: wen_tiger    时间: 2009-3-6 09:58

作者: RickyLuo    时间: 2009-3-9 14:56
参加过一次这样的培训,很成熟的模型
作者: xuyh    时间: 2009-3-22 12:17
比喻很透彻  谢谢楼主!
作者: huangkai    时间: 2009-4-21 09:26
强悍
作者: meiguishijun    时间: 2009-5-14 18:11
  这就是差距。
作者: kojywu    时间: 2009-6-30 10:01
分析的很到位
作者: tianshilan    时间: 2009-7-3 17:09
标题: 回复 1# 的帖子
楼主太牛啦!呵呵
作者: 金铃    时间: 2009-7-22 13:32
比喻的好!
作者: LIV    时间: 2009-8-2 13:05

作者: shanxi    时间: 2009-8-2 13:43
都是用来骗不懂开发的测试入门人员看的,普及型知识。

作者就为了名罢了。
作者: 蜗牛吃橘子    时间: 2009-8-12 15:34
理发店模型是非常经典的性能测试模型
对于熟悉性能测试的一些参数概念还是不错的
作者: siriusbb    时间: 2009-8-20 16:16
不错,学习了
作者: 南翔塞燕    时间: 2009-9-18 16:17
佩服!!顶!!
作者: shiyuchen    时间: 2009-10-7 15:08
好厉害哦,写的好好
作者: shiyuchen    时间: 2009-10-7 15:55

作者: shiyuchen    时间: 2009-10-7 17:02

作者: francais    时间: 2009-10-12 17:57
很好,很经典啊!顶一下
作者: opq133    时间: 2009-10-21 11:27
标题: 好强大
很好 很强大
作者: angela_51    时间: 2009-10-30 10:54
很有启发。。。谢谢分享~
作者: freedom_me    时间: 2009-11-19 12:05

作者: lovecogate    时间: 2010-1-8 14:19
真的很不错哦,我一下次就明白了性能的含义,楼主还写么?
作者: zhuxingchen    时间: 2010-2-26 10:57
真是经典啊
作者: 晴天LTVXQ    时间: 2010-4-28 15:26

作者: geniusky    时间: 2010-5-11 17:15
学习了 写的真好
作者: melodylzl    时间: 2010-6-9 11:27
楼主分析得真透彻,好想继续看下文、
作者: 806114786    时间: 2010-7-9 14:37
太牛了,楼主
作者: 806114786    时间: 2010-7-9 14:40
太牛了,楼主
作者: mazhimage    时间: 2010-7-26 22:59
详细透彻,慢慢看
作者: lavern    时间: 2010-9-20 11:59
楼主真强人!谢谢讲解
作者: Gasgoo    时间: 2010-9-21 15:28
很好。。。很精彩。。。
作者: flysnow129    时间: 2010-10-19 17:36
学习了,谢谢
作者: CathyMei    时间: 2010-12-30 14:25
要补充的一点是,当我们需要对一个系统长时间施加压力——例如连续加压3-5天,来验证系统的可靠性或者说稳定性时,我们所使用的并发用户数应该等于或小于“最佳并发用户数”——大家也可以结合上面的讨论想想这是为什么 ^_^
为什么是小于等于最佳并发用户数而不是最大用户数了?
如果用最大用户数测试将得到什么样的结果呢?
作者: hzjceshi2009    时间: 2011-2-22 15:30
比喻的很明确,写的很生动,很容易理解
作者: 青竹子    时间: 2011-3-15 11:18
很形象啊,一下就能理解了。
作者: 本来就很乖    时间: 2011-4-28 14:08
很形象
作者: 449180704    时间: 2011-5-26 14:15
强大
作者: ymqc0523    时间: 2011-6-4 17:49
好贴,学习了,我是菜鸟
作者: ananbo    时间: 2011-6-13 13:31
高人那高人~
作者: 061001    时间: 2011-6-27 09:14
非常形象啊
作者: Nitong    时间: 2011-6-27 18:40
好贴,顶一个~
作者: z3z3z3z3    时间: 2011-7-25 17:43
好长,先回复慢慢学习。。。
作者: lianwuguo    时间: 2011-9-30 15:47
到位,号东西
作者: CongJerry    时间: 2011-10-25 00:32
在吞吐量、响应时间、并发数等性能测试方面比喻得很形象
作者: maclehappy13    时间: 2011-11-29 12:37
不错,顶起来。
作者: liangxianquan85    时间: 2012-4-13 15:31
很形象,抛砖引玉贴啊~顶起
作者: miraclej    时间: 2012-4-16 15:49
这个上课好像老师讲过,顶了。
作者: 花与剑    时间: 2012-4-20 10:35
很不错的文章,操作系统里描述的...资源利用的死锁问题
作者: xuli107    时间: 2012-5-22 14:25
值得学习
作者: yiqian77    时间: 2012-7-5 09:34
喜欢……
作者: monica417    时间: 2012-7-11 17:35
很形象,后面应该是运维等都有关吧,还有后续帖吗?
作者: xiao_haozi    时间: 2012-7-14 13:40
有思想有创意
作者: 东东tony    时间: 2012-11-4 16:28
回复 1# 阿七


    灰常好  多谢
作者: lxh    时间: 2013-1-19 10:01
好贴
作者: 12qwsa    时间: 2013-2-18 11:00
这个写的很形象 呵呵
作者: cenxiaomai    时间: 2013-4-10 11:21
分析的很不错,谢谢楼主
作者: yimingzhang    时间: 2013-5-14 14:41
不错!
作者: 51dhy1014    时间: 2013-5-30 17:15
学习了,谢谢分享
作者: sy534806116    时间: 2013-12-16 10:48
很受用的帖,感谢lz分线
作者: likaihon    时间: 2014-6-9 11:49
楼主好厉害,写的很透彻,最近一直在学习楼主的文章
作者: zzgwww    时间: 2014-9-12 09:32
思维清晰,深入浅出
作者: ideas168    时间: 2015-1-26 16:36
学习了---




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2