51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4375|回复: 18
打印 上一主题 下一主题

[原创] 《LoadRunner 没有告诉你的》之三——理发店模型

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-11-20 00:44:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
版权声明:本文可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途。本人保留对本文的一切权利。如需转载,请在转载是保留此版权声明,并保证本文的完整性。也请转贴者理解创作的辛劳,尊重作者的劳动成果。
作者:陈雷 (Jackei)
邮箱:jackeichan@gmail.com
Bloghttp://jackei.cnblogs.com



大概在一年前的一次讨论中,我的好友陈华第一次提到了这个模型的最初版本,经过几次讨论后,我们发现经过完善和扩展的“理发店模型”可以用来帮助我们理解很多性能测试的概念和理论,以及一些测试中遇到的问题。在最近的一次讨论后,我决定撰写一篇文章来专门讲述一下这个模型,希望可以帮助大家更好的理解性能测试有关的知识。
不过,在这篇文章中,我将会尽量的只描述模型本身以及相关的一些扩展,而具体如何将这个模型完全同性能测试关联起来,我不会全部说破,留下足够的空间让大家继续思考和总结,最好也一起来对这个模型做进一步的完善和扩展^_^ 我相信,当大家在思考的过程中有所收获并有所突破时,那种快感和收获的喜悦才真的是让人倍感振奋而且终生难忘的 ^_^
当然,我要说明的是,这个模型仅仅是1个模型,它与大家实际工作中遇到的各式各样的情况未必都可以一一对应,但是大的方向和趋势应该是一致的。

理发店模型相信大家都进过或见过理发店,一间或大或小的铺面,1个或几个理发师,几张理发用的椅子和供顾客等待的长条板凳。


在我们的这个理发店中,我们事先做了如下的假设:

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小时。不过即使根据这个假设,虽然随着顾客数量的增多,每位顾客的服务时间有所延长,但是这个时间始终还被控制在顾客可接受的范围之内,并且顾客是不需要等待的。
不过随着理发店的生意越来越好,顾客也越来越多,新的场景出现了。假设有一次顾客ABC刚进理发店准备剪发,外面一推门又进来了顾客DEF。因为ABC三位顾客先到,所以DEF三位只好坐在长板凳上等着。1小时后,ABC三位剪完头发走了,他们每个人这次剪发所花费的时间均为1小时。可是DEF三位就没有这么好运,因为他们要先等ABC三位剪完才能剪,所以他们每个人这次剪发所花费的时间均为2小时——包括等待1小时和剪发1小时。
通过上面这个场景我们可以发现,对于理发店来说,都是每小时服务三位顾客——第1个小时是ABC,第二个小时是DEF;但是对于顾客DEF来说,“响应时间”延长了。如果你可以理解上面的这些场景,就可以继续往下看了。
在新的场景中,我们假设这次理发店里一次来了9位顾客,根据我们上面的场景,相信你不难推断,这9位顾客中有3位的“响应时间”为1小时,有3位的“响应时间”为2小时(等待1小时+剪发1小时),还有3位的“响应时间”为3小时(等待2小时+剪发1小时)——已经到达用户所能忍受的极限。假如在把这个场景中的顾客数量改为10,那么我们已经可以断定,一定会有1位顾客因为“响应时间”过长而无法忍受,最终离开理发店走了。


[ 本帖最后由 jackei 于 2006-11-22 16:22 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2006-11-20 00:45:21 | 只看该作者
我想并不需要特别说明,大家也一定可以把上面的这些场景跟性能测试挂上钩了。如果你还是觉得比较抽象,继续看下面的这张图 ^_^




这张图中展示的是1个标准的软件性能模型。在图中有三条曲线,分别表示资源的利用情况Utilization,包括硬件资源和软件资源)、吞吐量Throughput,这里是指每秒事务数)以及响应时间Response Time)。图中坐标轴的横轴从左到右表现了并发用户数Number of Concurrent Users)的不断增长。
在这张图中我们可以看到,最开始,随着并发用户数的增长,资源占用率和吞吐量会相应的增长,但是响应时间的变化不大;不过当并发用户数增长到一定程度后,资源占用达到饱和,吞吐量增长明显放缓甚至停止增长,而响应时间却进一步延长。如果并发用户数继续增长,你会发现软硬件资源占用继续维持在饱和状态,但是吞吐量开始下降,响应时间明显的超出了用户可接受的范围,并且最终导致用户放弃了这次请求甚至离开。
根据这种性能表现,图中划分了三个区域,分别是Light Load(较轻的压力)、Heavy Load(较重的压力)和Buckle Zone(用户无法忍受并放弃请求)。在Light LoadHeavy Load 两个区域交界处的并发用户数,我们称为“最佳并发用户数(The Optimum Number of Concurrent Users”,而Heavy LoadBuckle Zone两个区域交界处的并发用户数则称为“最大并发用户数(The Maximum Number of Concurrent Users”。
当系统的负载等于最佳并发用户数时,系统的整体效率最高,没有资源被浪费,用户也不需要等待;当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃;而当系统负载大于最大并发用户数时,将注定会导致某些用户无法忍受超长的响应时间而放弃。
对应到我们上面理发店的例子,每小时3个顾客就是这个理发店的最佳并发用户数,而每小时9个顾客则是它的最大并发用户数。当每小时都有3个顾客到来时,理发店的整体工作效率最高;而当每小时都有9个顾客到来时,前几个小时来的顾客还可以忍受,但是随着等待的顾客人数越来越多,等待时间越来越长,最终还是会有顾客无法忍受而离开。同时,随着理发店里顾客人数的增多和理发师工作时间的延长,理发师会逐渐产生疲劳,还要多花一些时间来清理环境和维持秩序,这些因素将最终导致理发师的工作效率随着顾客人数的增多和工作的延长而逐渐的下降,到最后可能要1.5小时甚至2个小时才能剪完1个发了。
当然,如果一开始就有10个顾客到来,则注定有1位顾客剪不到头发了。

进一步理解“最佳并发用户数”和“最大并发用户数”在上一节中,我们详细的描述了并发用户数同资源占用情况、吞吐量以及响应时间的关系,并且提到了两个新的概念——“最佳并发用户数(The Optimum Number of Concurrent Users”和“最大并发用户数(The Maximum Number of Concurrent Users”。在这一节中,我们将对“最佳并发用户数”和“最大并发用户数”的定义做更加清晰和明确的说明。
对于一个确定的被测系统来说,在某个具体的软硬件环境下,它的“最佳并发用户数”和“最大并发用户数”都是客观存在。以“最佳并发用户数”为例,假如一个系统的最佳并发用户数是50,那么一旦并发量超过这个值,系统的吞吐量和响应时间必然会“此消彼长”;如果系统负载长期大于这个数,必然会导致用户的满意度降低并最终达到一种无法忍受的地步。所以我们应该保证最佳并发用户数要大于系统的平均负载
要补充的一点是,当我们需要对一个系统长时间施加压力——例如连续加压3-5天,来验证系统的可靠性或者说稳定性时,我们所使用的并发用户数应该等于或小于“最佳并发用户数”——大家也可以结合上面的讨论想想这是为什么 ^_^
而对于最大并发用户数的识别,需要考虑和鉴别一下以下两种情况:
1.              当系统的负载达到最大并发用户数后,响应时间超过了用户可以忍受的最大限度——这个限度应该来源于性能需求,例如:在某个级别的负载下,系统的响应时间应该小于5秒。这里容易疏忽的一点是,不要把顾客因为无法忍受而离开时店内的顾客数量作为理发店的“最大并发用户数”,因为这位顾客是在3小时前到达的,也就是说3小时前理发店内的顾客数量才是我们要找的“最大并发用户数”。而且,这位顾客的离开只是一个开始,可能有会更多的顾客随后也因为无法忍受超长的等待时间而离开;
2.             在响应时间还没有到达用户可忍受的最大限度前,有可能已经出现了用户请求的失败。以理发店模型为例,如果理发店只能容纳6位顾客,那么当7位顾客同时来到理发店时,虽然我们可以知道所有顾客都能在可容忍的时间内剪完头发,但是因为理发店容量有限,最终只好有一位顾客打道回府,改天再来。
对于一个系统来说,我们应该确保系统的最大并发用户数要大于系统需要承受的峰值负载
如果你已经理解了上面提到的全部的概念,我想你可以展开进一步的思考,回头看一下自己以往做过的性能测试,看看是否可以对以往的工作产生新的理解。也欢迎大家在这里提出自己的心得或疑惑,继续讨论下去。

理发店模型的进一步扩展这一节中我会提到一些对理发店模型的扩展,当然,我依然是只讲述现实中的理发店的故事,至于如何将这些扩展同性能测试以及性能解决方案等方面关联起来,就留给大家继续思考了 ^_^
扩展场景1:有些顾客已经是理发店的老顾客,他们和理发师已经非常熟悉,理发师可以不用花费太多时间沟通就知道这位顾客的想法。并且理发师对这位顾客的脑袋的形状也很熟悉,所以可以更快的完成一次理发的工作。
扩展场景2:理发店并不是只有剪发一种业务,还提供了烫发染发之类的业务,那么当顾客提出新的要求时,理发师服务一位顾客的时间可能会超过标准的1小时。而且这时如果要计算每位顾客的等待时间就变得复杂了很多,有些顾客的排队时间会比原来预计的延长,并最终导致他们因为无法忍受而离开。
扩展场景3:随着烫发和染发业务的增加,理发师们决定分工,两位专门剪发,一位专门负责烫发和染发。
扩展场景4:理发店的生意越来越好,理发师的数量和理发店的门面已经无法满足顾客的要求,于是理发店的老板决定在旁边再开一家店,并招聘一些工作能力更强的理发师。
扩展场景5:理发店的生意变得极为火爆了,两家店都无法满足顾客数量增长的需求,并且有些顾客开始反映到理发店的路途太远,到了以后又因为烫发和染发的人太多而等太久。可是理发店的老板也明白烫发和染发的收入要远远高于剪发阿,于是他脑筋一转,决定继续改变策略,在附近的几个大型小区租用小的铺面开设分店,专职剪发业务;再在市区的繁华路段开设旗舰店,专门为烫发、染发的顾客,以及VIP顾客服务。并增设800电话,当顾客想要剪发时,可以拨打这个电话,并由服务人员根据顾客的居住地点,将其指引到距离最近的一家分店去。

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

参考资料性能测试相关术语的英文书写方法(不断更新ing)——知道了这些术语在英文中的正确书写方法之后,可以通过 Google
更加高效的获取到更多有用的资料。

点击这里了解整个系列的创作进度,查看文章目录,或浏览已经完成的文章。


[ 本帖最后由 jackei 于 2006-11-20 09:35 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-11-20 01:09:33 | 只看该作者
回复 支持 反对

使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-28 09:26
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2006-11-20 09:24:43 | 只看该作者
    很不错的文章,讲的很通俗很容易懂!且不失精华
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2006-11-20 09:25:56 | 只看该作者
    呵呵,原创的文章本来就少,无论如何都得支持。sdlkfj2
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2006-11-20 09:41:26 | 只看该作者

    写的不错

    看了一遍基本了解资源的利用率,吞吐量,响应时间这三个概念的关系了,说的简单易懂,不错顶一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2006-11-20 09:51:01 | 只看该作者
    很好啊,向楼主学习及致敬。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2006-11-20 11:32:15 | 只看该作者
    难得一见的好贴!绝对要支持!

    另:楼主的MSN我以前加过,但是已经满了,后来加你的QQ,好象也没被通过。
    有些问题可能需要在线和你交流,希望能通过。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2006-11-20 11:39:57 | 只看该作者
    不好意思,MSN 是有一个最大限制的。如果加QQ请注明测试同行或者来自 51testing 之类,以便于区分是否一些自动加 QQ 软件的骚扰 ^_^

    继续感谢楼上朋友们的支持,不过希望大家更多的支持是也写下自己的想法,或者不同的意见,或者疑惑,我们可以沿着这条路继续深入讨论下去 sdlkfj2
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2006-11-20 13:28:59 | 只看该作者

    转一位朋友在偶 blog 上的讨论

    by Eric Chu
    对理发店模型我有个疑问,微观上来说,在单CPU的情况下,并不存在真正意义上的并发响应(并发请求是可能的),那么3个理发师同时工作如何解释上述问题?

    接上。如果微观上系统处理每个请求都需要排队的原理正确的话。假设10个用户并发,系统处理1个用户的请求需要100毫秒,那么处理完这10个的话就需要 1秒,那么文中的吞吐量(Throughput,这里是指每秒事务数)就为10;假设20个用户并发,系统处理1个用户的请求仍然需要100毫秒,那么处理完这20个的话就需要2秒,吞吐量(Throughput,这里是指每秒事务数)仍为10,或者会下降(因为处理20个可能时间会长),和文中图的吞吐量上升矛盾, 请问如何解释?


    下面是偶的回复:
    第一个问题:
    说的对。操作系统实际上是分时处理的系统,CPU 时间被以时间片为单位轮流分配给不同的进程——但是操作系统的这种做法本身也是为了让每个进程都感觉到自己在独占 CPU。从这个角度来说,如果我们的理发师可以以极为快速(例如10ms一个间隔)的速度在三位顾客之间切换,而且这个切换是我们根本无法发现或者识别的,我们是否可以认为相当于有三位理发师同时在为顾客服务呢?

    第二个问题:
    如果10个用户并发时,系统处理1个用户的请求需要100毫秒,当20个用户并发时,系统处理1个用户的请求仍然需要100毫秒,那么这说明10 用户并发可能已经是系统的最佳并发量,而进一步增加负载,会进入第二个阶段,也就是“当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃”。


    如果大家有不同的意见和看法,请不吝赐教 ^_^
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2006-11-20 14:00:37 | 只看该作者
    分析5种扩展场景转换性能测试:

    1、客户端利用COOKIE文件,访问原来已经访问过的站点
    2、用户操作复杂业务,可能因为该业务占用服务器较大资源,从而影响到其他用户响应时间
    3、用户分布情况比例,根据实际业务出发,分配是否两位烫发和染发,一位剪发。
    4、采用负载均衡技术
    5、为了提供更出色的用户使用环境,搭建专用服务器,例如 image,log,DNS等服务器,
       用来分担WEB server 和DB SERVER压力,考虑该项目的重点使用对象大多在美国,可以在美国IDC设立站点

    不知道对不对,不对请指正,因为本人是做WEB测试的,别的不太清楚
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2006-11-20 15:17:13 | 只看该作者
    暂时还没用到.先谢谢LZ."理发店模型"能不能写成像《LoadRunner 没有告诉你的》----之一/之二那样的名字.
    为什么我看你的blog字都看不清,是我IE的原因?浏览别的网页就没问题....

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2006-11-20 16:05:10 | 只看该作者
    jackie,不错。
    绝对深入浅出
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2006-11-20 18:37:36 | 只看该作者

    to wuhuawu09

    你的问题应该是因为 IE 的字体设置的太小了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2006-11-20 20:04:20 | 只看该作者
    原帖由 cc_lion 于 2006-11-20 14:00 发表
    分析5种扩展场景转换性能测试:

    1、客户端利用COOKIE文件,访问原来已经访问过的站点
    2、用户操作复杂业务,可能因为该业务占用服务器较大资源,从而影响到其他用户响应时间
    3、用户分布情况比例,根据实际 ...


    呵呵,好见解。希望其他同行也可以继续 ^_^
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2006-11-21 11:39:33 | 只看该作者
    在你blog上留言的那位朋友所说的吞吐量(Throughput)在LoadRunner中究竟是代表什么意思,是代表网络上的吞吐量,还是每秒事务数啊?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2006-11-21 13:07:13 | 只看该作者
    原帖由 xingcyx 于 2006-11-21 11:39 发表
    在你blog上留言的那位朋友所说的吞吐量(Throughput)在LoadRunner中究竟是代表什么意思,是代表网络上的吞吐量,还是每秒事务数啊?


    这个吞吐量的确存在两个解释,在 LR 中是以字节/秒来计算的,而在 JMeter 是以事务数/秒来计算的,我们这这篇文章中用到的概念是后者。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2006-11-22 13:13:34 | 只看该作者

    很好的帖子

    深入浅出,很有意思
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2006-11-22 14:11:15 | 只看该作者
    向楼主表示感谢.........
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-10-8 13:33 , Processed in 0.093936 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表