理發(fā)店模型 ——《LoadRunner 沒有告訴你的》之三
大概在一年前的一次討論中,我的好友陳華第一次提到了這個(gè)模型的最初版本,經(jīng)過幾次討論后,我們發(fā)現(xiàn)經(jīng)過完善和擴(kuò)展的“理發(fā)店模型”可以用來幫助我們理解很多性能測試的概念和理論,以及一些測試中遇到的問題。在最近的一次討論后,我決定撰寫一篇文章來專門講述一下這個(gè)模型,希望可以幫助大家更好的理解性能測試有關(guān)的知識。
不過,在這篇文章中,我將會盡量的只描述模型本身以及相關(guān)的一些擴(kuò)展,而具體如何將這個(gè)模型完全同性能測試關(guān)聯(lián)起來,我不會全部說破,留下足夠的空間讓大家繼續(xù)思考和總結(jié),最好也一起來對這個(gè)模型做進(jìn)一步的完善和擴(kuò)展^_^ 我相信,當(dāng)大家在思考的過程中有所收獲并有所突破時(shí),那種快感和收獲的喜悅才真的是讓人倍感振奮而且終生難忘的 ^_^
當(dāng)然,我要說明的是,這個(gè)模型僅僅是1個(gè)模型,它與大家實(shí)際工作中遇到的各式各樣的情況未必都可以一一對應(yīng),但是大的方向和趨勢應(yīng)該是一致的。
相信大家都進(jìn)過或見過理發(fā)店,一間或大或小的鋪面,1個(gè)或幾個(gè)理發(fā)師,幾張理發(fā)用的椅子和供顧客等待的長條板凳。
在我們的這個(gè)理發(fā)店中,我們事先做了如下的假設(shè):
1. 理發(fā)店共有3名理發(fā)師;
2. 每位理發(fā)師剪一個(gè)發(fā)的時(shí)間都是1小時(shí);
3. 我們顧客們都是很有時(shí)間觀念的人而且非常挑剔,他們對于每次光顧理發(fā)店時(shí)所能容忍的等待時(shí)間+剪發(fā)時(shí)間是3小時(shí),而且等待時(shí)間越長,顧客的滿意度越低。如果3個(gè)小時(shí)還不能剪完頭發(fā),我們的顧客會立馬生氣的走人。
通過上面的假設(shè)我們不難想象出下面的場景:
1. 當(dāng)理發(fā)店內(nèi)只有1位顧客時(shí),只需要有1名理發(fā)師為他提供服務(wù),其他兩名理發(fā)師可能繼續(xù)等著,也可能會幫忙打打雜。1小時(shí)后,這位顧客剪完頭發(fā)出門走了。那么在這1個(gè)小時(shí)里,整個(gè)理發(fā)店只服務(wù)了1位顧客,這位顧客花費(fèi)在這次剪發(fā)的時(shí)間是1小時(shí);
2. 當(dāng)理發(fā)店內(nèi)同時(shí)有兩位顧客時(shí),就會同時(shí)有兩名理發(fā)師在為顧客服務(wù),另外1位發(fā)呆或者打雜幫忙。仍然是1小時(shí)后,兩位顧客剪完頭發(fā)出門。在這1小時(shí)里,理發(fā)店服務(wù)了兩位顧客,這兩位顧客花費(fèi)在剪發(fā)的時(shí)間均為1小時(shí);
3. 很容易理解,當(dāng)理發(fā)店內(nèi)同時(shí)有三位顧客時(shí),理發(fā)店可以在1小時(shí)內(nèi)同時(shí)服務(wù)三位顧客,每位顧客花費(fèi)在這次剪發(fā)的時(shí)間仍然是均為1小時(shí);
從上面幾個(gè)場景中我們可以發(fā)現(xiàn),在理發(fā)店同時(shí)服務(wù)的顧客數(shù)量從1位增加到3位的過程中,隨著顧客數(shù)量的增多,理發(fā)店的整體工作效率在提高,但是每位顧客在理發(fā)店內(nèi)所呆的時(shí)間并未延長。
當(dāng)然,我們可以假設(shè)當(dāng)只有1位顧客和2位顧客時(shí),空閑的理發(fā)師可以幫忙打雜,使得其他理發(fā)師的工作效率提高,并使每位顧客的剪發(fā)時(shí)間小于1小時(shí)。不過即使根據(jù)這個(gè)假設(shè),雖然隨著顧客數(shù)量的增多,每位顧客的服務(wù)時(shí)間有所延長,但是這個(gè)時(shí)間始終還被控制在顧客可接受的范圍之內(nèi),并且顧客是不需要等待的。
不過隨著理發(fā)店的生意越來越好,顧客也越來越多,新的場景出現(xiàn)了。假設(shè)有一次顧客A、B、C剛進(jìn)理發(fā)店準(zhǔn)備剪發(fā),外面一推門又進(jìn)來了顧客D、E、F。因?yàn)锳、B、C三位顧客先到,所以D、E、F三位只好坐在長板凳上等著。1小時(shí)后,A、B、C三位剪完頭發(fā)走了,他們每個(gè)人這次剪發(fā)所花費(fèi)的時(shí)間均為1小時(shí)。可是D、E、F三位就沒有這么好運(yùn),因?yàn)樗麄円鹊華、B、C三位剪完才能剪,所以他們每個(gè)人這次剪發(fā)所花費(fèi)的時(shí)間均為2小時(shí)——包括等待1小時(shí)和剪發(fā)1小時(shí)。
通過上面這個(gè)場景我們可以發(fā)現(xiàn),對于理發(fā)店來說,都是每小時(shí)服務(wù)三位顧客——第1個(gè)小時(shí)是A、B、C,第二個(gè)小時(shí)是D、E、F;但是對于顧客D、E、F來說,“響應(yīng)時(shí)間”延長了。如果你可以理解上面的這些場景,就可以繼續(xù)往下看了。
在新的場景中,我們假設(shè)這次理發(fā)店里一次來了9位顧客,根據(jù)我們上面的場景,相信你不難推斷,這9位顧客中有3位的“響應(yīng)時(shí)間”為1小時(shí),有3位的“響應(yīng)時(shí)間”為2小時(shí)(等待1小時(shí)+剪發(fā)1小時(shí)),還有3位的“響應(yīng)時(shí)間”為3小時(shí)(等待2小時(shí)+剪發(fā)1小時(shí))——已經(jīng)到達(dá)用戶所能忍受的極限。假如在把這個(gè)場景中的顧客數(shù)量改為10,那么我們已經(jīng)可以斷定,一定會有1位顧客因?yàn)?#8220;響應(yīng)時(shí)間”過長而無法忍受,最終離開理發(fā)店走了。
我想并不需要特別說明,大家也一定可以把上面的這些場景跟性能測試掛上鉤了。如果你還是覺得比較抽象,繼續(xù)看下面的這張圖 ^_^
這張圖中展示的是1個(gè)標(biāo)準(zhǔn)的軟件性能模型。在圖中有三條曲線,分別表示資源的利用情況(Utilization,包括硬件資源和軟件資源)、吞吐量(Throughput,這里是指每秒事務(wù)數(shù))以及響應(yīng)時(shí)間(Response Time)。圖中坐標(biāo)軸的橫軸從左到右表現(xiàn)了并發(fā)用戶數(shù)(Number of Concurrent Users)的不斷增長。
在這張圖中我們可以看到,最開始,隨著并發(fā)用戶數(shù)的增長,資源占用率和吞吐量會相應(yīng)的增長,但是響應(yīng)時(shí)間的變化不大;不過當(dāng)并發(fā)用戶數(shù)增長到一定程度后,資源占用達(dá)到飽和,吞吐量增長明顯放緩甚至停止增長,而響應(yīng)時(shí)間卻進(jìn)一步延長。如果并發(fā)用戶數(shù)繼續(xù)增長,你會發(fā)現(xiàn)軟硬件資源占用繼續(xù)維持在飽和狀態(tài),但是吞吐量開始下降,響應(yīng)時(shí)間明顯的超出了用戶可接受的范圍,并且最終導(dǎo)致用戶放棄了這次請求甚至離開。
根據(jù)這種性能表現(xiàn),圖中劃分了三個(gè)區(qū)域,分別是Light Load(較輕的壓力)、Heavy Load(較重的壓力)和Buckle Zone(用戶無法忍受并放棄請求)。在Light Load和Heavy Load 兩個(gè)區(qū)域交界處的并發(fā)用戶數(shù),我們稱為“最佳并發(fā)用戶數(shù)(The Optimum Number of Concurrent Users)”,而Heavy Load和Buckle Zone兩個(gè)區(qū)域交界處的并發(fā)用戶數(shù)則稱為“最大并發(fā)用戶數(shù)(The Maximum Number of Concurrent Users)”。
當(dāng)系統(tǒng)的負(fù)載等于最佳并發(fā)用戶數(shù)時(shí),系統(tǒng)的整體效率最高,沒有資源被浪費(fèi),用戶也不需要等待;當(dāng)系統(tǒng)負(fù)載處于最佳并發(fā)用戶數(shù)和最大并發(fā)用戶數(shù)之間時(shí),系統(tǒng)可以繼續(xù)工作,但是用戶的等待時(shí)間延長,滿意度開始降低,并且如果負(fù)載一直持續(xù),將最終會導(dǎo)致有些用戶無法忍受而放棄;而當(dāng)系統(tǒng)負(fù)載大于最大并發(fā)用戶數(shù)時(shí),將注定會導(dǎo)致某些用戶無法忍受超長的響應(yīng)時(shí)間而放棄。
對應(yīng)到我們上面理發(fā)店的例子,每小時(shí)3個(gè)顧客就是這個(gè)理發(fā)店的最佳并發(fā)用戶數(shù),而每小時(shí)9個(gè)顧客則是它的最大并發(fā)用戶數(shù)。當(dāng)每小時(shí)都有3個(gè)顧客到來時(shí),理發(fā)店的整體工作效率最高;而當(dāng)每小時(shí)都有9個(gè)顧客到來時(shí),前幾個(gè)小時(shí)來的顧客還可以忍受,但是隨著等待的顧客人數(shù)越來越多,等待時(shí)間越來越長,最終還是會有顧客無法忍受而離開。同時(shí),隨著理發(fā)店里顧客人數(shù)的增多和理發(fā)師工作時(shí)間的延長,理發(fā)師會逐漸產(chǎn)生疲勞,還要多花一些時(shí)間來清理環(huán)境和維持秩序,這些因素將最終導(dǎo)致理發(fā)師的工作效率隨著顧客人數(shù)的增多和工作的延長而逐漸的下降,到最后可能要1.5小時(shí)甚至2個(gè)小時(shí)才能剪完1個(gè)發(fā)了。
當(dāng)然,如果一開始就有10個(gè)顧客到來,則注定有1位顧客剪不到頭發(fā)了。
進(jìn)一步理解“最佳并發(fā)用戶數(shù)”和“最大并發(fā)用戶數(shù)”
在上一節(jié)中,我們詳細(xì)的描述了并發(fā)用戶數(shù)同資源占用情況、吞吐量以及響應(yīng)時(shí)間的關(guān)系,并且提到了兩個(gè)新的概念——“最佳并發(fā)用戶數(shù)(The Optimum Number of Concurrent Users)”和“最大并發(fā)用戶數(shù)(The Maximum Number of Concurrent Users)”。在這一節(jié)中,我們將對“最佳并發(fā)用戶數(shù)”和“最大并發(fā)用戶數(shù)”的定義做更加清晰和明確的說明。
對于一個(gè)確定的被測系統(tǒng)來說,在某個(gè)具體的軟硬件環(huán)境下,它的“最佳并發(fā)用戶數(shù)”和“最大并發(fā)用戶數(shù)”都是客觀存在。以“最佳并發(fā)用戶數(shù)”為例,假如一個(gè)系統(tǒng)的最佳并發(fā)用戶數(shù)是50,那么一旦并發(fā)量超過這個(gè)值,系統(tǒng)的吞吐量和響應(yīng)時(shí)間必然會 “此消彼長”;如果系統(tǒng)負(fù)載長期大于這個(gè)數(shù),必然會導(dǎo)致用戶的滿意度降低并最終達(dá)到一種無法忍受的地步。所以我們應(yīng)該 保證最佳并發(fā)用戶數(shù)要大于系統(tǒng)的平均負(fù)載。
要補(bǔ)充的一點(diǎn)是,當(dāng)我們需要對一個(gè)系統(tǒng)長時(shí)間施加壓力——例如連續(xù)加壓3-5天,來驗(yàn)證系統(tǒng)的可靠性或者說穩(wěn)定性時(shí),我們所使用的并發(fā)用戶數(shù)應(yīng)該等于或小于“最佳并發(fā)用戶數(shù)”——大家也可以結(jié)合上面的討論想想這是為什么 ^_^
而對于最大并發(fā)用戶數(shù)的識別,需要考慮和鑒別一下以下兩種情況:
1. 當(dāng)系統(tǒng)的負(fù)載達(dá)到最大并發(fā)用戶數(shù)后,響應(yīng)時(shí)間超過了用戶可以忍受的最大限度——這個(gè)限度應(yīng)該來源于性能需求,例如:在某個(gè)級別的負(fù)載下,系統(tǒng)的響應(yīng)時(shí)間應(yīng)該小于5秒。這里容易疏忽的一點(diǎn)是,不要把顧客因?yàn)闊o法忍受而離開時(shí)店內(nèi)的顧客數(shù)量作為理發(fā)店的“最大并發(fā)用戶數(shù)”,因?yàn)檫@位顧客是在3小時(shí)前到達(dá)的,也就是說3小時(shí)前理發(fā)店內(nèi)的顧客數(shù)量才是我們要找的“最大并發(fā)用戶數(shù)”。而且,這位顧客的離開只是一個(gè)開始,可能有會更多的顧客隨后也因?yàn)闊o法忍受超長的等待時(shí)間而離開;
2. 在響應(yīng)時(shí)間還沒有到達(dá)用戶可忍受的最大限度前,有可能已經(jīng)出現(xiàn)了用戶請求的失敗。以理發(fā)店模型為例,如果理發(fā)店只能容納6位顧客,那么當(dāng)7位顧客同時(shí)來到理發(fā)店時(shí),雖然我們可以知道所有顧客都能在可容忍的時(shí)間內(nèi)剪完頭發(fā),但是因?yàn)槔戆l(fā)店容量有限,最終只好有一位顧客打道回府,改天再來。
對于一個(gè)系統(tǒng)來說,我們應(yīng)該 確保系統(tǒng)的最大并發(fā)用戶數(shù)要大于系統(tǒng)需要承受的峰值負(fù)載。
如果你已經(jīng)理解了上面提到的全部的概念,我想你可以展開進(jìn)一步的思考,回頭看一下自己以往做過的性能測試,看看是否可以對以往的工作產(chǎn)生新的理解。也歡迎大家在這里提出自己的心得或疑惑,繼續(xù)討論下去。
理發(fā)店模型的進(jìn)一步擴(kuò)展
這一節(jié)中我會提到一些對理發(fā)店模型的擴(kuò)展,當(dāng)然,我依然是只講述現(xiàn)實(shí)中的理發(fā)店的故事,至于如何將這些擴(kuò)展同性能測試以及性能解決方案等方面關(guān)聯(lián)起來,就留給大家繼續(xù)思考了 ^_^
擴(kuò)展場景1:有些顧客已經(jīng)是理發(fā)店的老顧客,他們和理發(fā)師已經(jīng)非常熟悉,理發(fā)師可以不用花費(fèi)太多時(shí)間溝通就知道這位顧客的想法。并且理發(fā)師對這位顧客的腦袋的形狀也很熟悉,所以可以更快的完成一次理發(fā)的工作。
擴(kuò)展場景2:理發(fā)店并不是只有剪發(fā)一種業(yè)務(wù),還提供了燙發(fā)染發(fā)之類的業(yè)務(wù),那么當(dāng)顧客提出新的要求時(shí),理發(fā)師服務(wù)一位顧客的時(shí)間可能會超過標(biāo)準(zhǔn)的1小時(shí)。而且這時(shí)如果要計(jì)算每位顧客的等待時(shí)間就變得復(fù)雜了很多,有些顧客的排隊(duì)時(shí)間會比原來預(yù)計(jì)的延長,并最終導(dǎo)致他們因?yàn)闊o法忍受而離開。
擴(kuò)展場景3:隨著燙發(fā)和染發(fā)業(yè)務(wù)的增加,理發(fā)師們決定分工,兩位專門剪發(fā),一位專門負(fù)責(zé)燙發(fā)和染發(fā)。
擴(kuò)展場景4:理發(fā)店的生意越來越好,理發(fā)師的數(shù)量和理發(fā)店的門面已經(jīng)無法滿足顧客的要求,于是理發(fā)店的老板決定在旁邊再開一家店,并招聘一些工作能力更強(qiáng)的理發(fā)師。
擴(kuò)展場景5:理發(fā)店的生意變得極為火爆了,兩家店都無法滿足顧客數(shù)量增長的需求,并且有些顧客開始反映到理發(fā)店的路途太遠(yuǎn),到了以后又因?yàn)闋C發(fā)和染發(fā)的人太多而等太久。可是理發(fā)店的老板也明白燙發(fā)和染發(fā)的收入要遠(yuǎn)遠(yuǎn)高于剪發(fā)阿,于是他腦筋一轉(zhuǎn),決定繼續(xù)改變策略,在附近的幾個(gè)大型小區(qū)租用小的鋪面開設(shè)分店,專職剪發(fā)業(yè)務(wù);再在市區(qū)的繁華路段開設(shè)旗艦店,專門為燙發(fā)、染發(fā)的顧客,以及VIP顧客服務(wù)。并增設(shè)800電話,當(dāng)顧客想要剪發(fā)時(shí),可以撥打這個(gè)電話,并由服務(wù)人員根據(jù)顧客的居住地點(diǎn),將其指引到距離最近的一家分店去。
這篇文章就先寫到這里了,希望大家在看完之后可以繼續(xù)思考一下,也寫出自己的心得體會或者新的想法,記下自己的不解和疑惑,讓我們在不斷的交流和討論中走的更遠(yuǎn) ^_^
性能測試相關(guān)術(shù)語的英文書寫方法(不斷更新ing)——知道了這些術(shù)語在英文中的正確書寫方法之后,可以通過 Google 更加高效的獲取到更多有用的資料。
posted on 2012-06-14 10:49 順其自然EVO 閱讀(224) 評論(0) 編輯 收藏 所屬分類: loadrunner 、性能測試