“最佳並發用戶數”和“最大並發用戶數”


我們事先做了如下的假設:

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小時。

通過上面這個場景我們可以發現,對於理發店來說,都是每小時服務三位顧客——第1個小時是A、B、C,第二個小時是D、E、F;但是對於顧客D、E、F來說,“響應時間”延長了。如果你可以理解上面的這些場景,就可以繼續往下看了。

在新的場景中,我們假設這次理發店里一次來了9位顧客,根據我們上面的場景,相信你不難推斷,這9位顧客中有3位的“響應時間”為1小時,有3位的“響應時間”為2小時(等待1小時+剪發1小時),還有3位的“響應時間”為3小時(等待2小時+剪發1小時)——已經到達用戶所能忍受的極限。假如在把這個場景中的顧客數量改為10,那么我們已經可以斷定,一定會有1位顧客因為“響應時間”過長而無法忍受,最終離開理發店走了。

這些場景跟性能測試掛上鈎了。

 

 

這張圖中展示的是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個發了。

 

進一步理解“最佳並發用戶數”和“最大並發用戶數”

前面詳細的描述了並發用戶數同資源占用情況、吞吐量以及響應時間的關系,並且提到了兩個新的概念——“最佳並發用戶數(The Optimum Number of Concurrent Users)”和“最大並發用戶數(The Maximum Number of Concurrent Users)”。在這一節中,將對“最佳並發用戶數”和“最大並發用戶數”的定義做更加清晰和明確的說明。

一個確定的被測系統,在某個具體的軟硬件環境下,它的“最佳並發用戶數”和“最大並發用戶數”都是客觀存在。以“最佳並發用戶數”為例,假如一個系統的最佳並發用戶數是50,那么一旦並發量超過這個值,系統的吞吐量和響應時間必然會 “此消彼長”;如果系統負載長期大於這個數,必然會導致用戶的滿意度降低並最終達到一種無法忍受的地步。所以我們應該 保證最佳並發用戶數要大於系統的平均負載。

要補充的一點是,當我們需要對一個系統長時間施加壓力——例如連續加壓3-5天,來驗證系統的可靠性或者說穩定性時,我們所使用的並發用戶數應該等於或小於“最佳並發用戶數”——大家也可以結合上面的討論想想這是為什么 ^_^

而對於最大並發用戶數的識別,需要考慮和鑒別一下以下兩種情況:

1.當系統的負載達到最大並發用戶數后,響應時間超過了用戶可以忍受的最大限度——這個限度應該來源於性能需求,例如:在某個級別的負載下,系統的響應時間應該小於5秒。這里容易疏忽的一點是,不要把顧客因為無法忍受而離開時店內的顧客數量作為理發店的“最大並發用戶數”,因為這位顧客是在3小時前到達的,也就是說3小時前理發店內的顧客數量才是我們要找的“最大並發用戶數”。而且,這位顧客的離開只是一個開始,可能有會更多的顧客隨后也因為無法忍受超長的等待時間而離開;

2.在響應時間還沒有到達用戶可忍受的最大限度前,有可能已經出現了用戶請求的失敗。以理發店模型為例,如果理發店只能容納6位顧客,那么當7位顧客同時來到理發店時,雖然我們可以知道所有顧客都能在可容忍的時間內剪完頭發,但是因為理發店容量有限,最終只好有一位顧客打道回府,改天再來。

對一個系統來說,我們應該確保系統的最大並發用戶數要大於系統需要承受的峰值負載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM