假設(shè)一個(gè)系統(tǒng)的業(yè)務(wù)有登錄辖众、瀏覽帖子卓起、發(fā)送新帖、回復(fù)帖子凹炸,訪問(wèn)高峰是上午10點(diǎn)戏阅,日訪問(wèn)高峰PV約5208(含登錄1300、瀏覽2706啤它、發(fā)帖526奕筐、回帖676)。系統(tǒng)響應(yīng)時(shí)間要求小于3秒变骡,試計(jì)算此系統(tǒng)的TPS以及并發(fā)數(shù)离赫。
如果分析業(yè)務(wù)量的數(shù)據(jù)是以PV來(lái)統(tǒng)計(jì)的,我們需要把PV轉(zhuǎn)化為T(mén)PS锣光。
實(shí)際上一個(gè)PV即一次對(duì)服務(wù)器的客戶請(qǐng)求笆怠,可能還包含了很多資源請(qǐng)求铝耻,比如圖片誊爹、樣式、JS信息瓢捉、文字等频丘。而瀏覽器具有資源緩存功能,下次訪問(wèn)同樣資源將不會(huì)再?gòu)倪h(yuǎn)程服務(wù)器上下載泡态,這大大加快了響應(yīng)速度搂漠。如果我們使用代理服務(wù)器訪問(wèn)外網(wǎng)資源時(shí),多數(shù)代理服務(wù)器也會(huì)緩存這些靜態(tài)數(shù)據(jù)某弦。也就是說(shuō)瀏覽器與服務(wù)器之間的動(dòng)態(tài)數(shù)據(jù)的 Size 會(huì)小于靜態(tài)數(shù)據(jù)桐汤。
所以瀏覽器是否緩存了靜態(tài)數(shù)據(jù)對(duì)性能測(cè)試影響明顯。我們?cè)谧鲂阅軠y(cè)試時(shí)靶壮,其中就有許多用戶可能是新用戶怔毛,在他們的瀏覽器上還沒(méi)有緩存這些靜態(tài)數(shù)據(jù),為了更準(zhǔn)確的模擬用戶請(qǐng)求腾降,我們有必要不緩存這些靜態(tài)內(nèi)容拣度。所以性能測(cè)試中是否緩存訪問(wèn)的靜態(tài)資源要根據(jù)業(yè)務(wù)情況而定。
本例中螃壤,我們把一個(gè)請(qǐng)求放在一個(gè)事務(wù)中來(lái)統(tǒng)計(jì)服務(wù)器的響應(yīng)時(shí)間抗果。這么說(shuō),一個(gè)PV即是一個(gè)事務(wù)(每秒的PV量并不直接等同于TPS奸晴,因?yàn)橐淮慰蛻粽?qǐng)求可能包含了很多資源請(qǐng)求冤馏。如果我們不關(guān)心頁(yè)面刷新時(shí)請(qǐng)求資源的耗時(shí),此時(shí)我們就把每秒PV數(shù)等同于TPS)寄啼。比如一個(gè)功能頁(yè)面(瀏覽帖子)每秒會(huì)有10個(gè)PV逮光,那么此功能的TPS即為10赘淮。
估算TPS
業(yè)務(wù)量一般要取系統(tǒng)業(yè)務(wù)高峰的值,才能代表系統(tǒng)的實(shí)際處理能力睦霎。系統(tǒng)在10點(diǎn)的訪問(wèn)高峰PV約5208梢卸,那么這個(gè)時(shí)段的TPS=5208/3600≈1.45嗎?
答案是否定的副女,因?yàn)樵谝恍r(shí)內(nèi)的吞吐量未必是平均的蛤高。
如果我們采集到的業(yè)務(wù)量數(shù)據(jù)能夠細(xì)分到每分鐘,TPS就越準(zhǔn)確碑幅。如果不能戴陡,可以按照二八原則。即80%的業(yè)務(wù)在20%的時(shí)間內(nèi)完成沟涨,TPS=(520880%)/(360020%)≈5.8恤批。
估算并發(fā)數(shù)
- 由TPS進(jìn)行估算
- 由在線活動(dòng)用戶數(shù)估算
- 根據(jù)經(jīng)驗(yàn)估算
這里我們采用第一種方法。
因?yàn)門(mén)PS=事務(wù)數(shù)/時(shí)間裹赴,假設(shè)所有的事務(wù)都來(lái)自不同的用戶喜庞,那么并發(fā)數(shù)=事務(wù)數(shù)=TPS*時(shí)間。具體如下:
Vu(業(yè)務(wù)名稱)=TPS(業(yè)務(wù)名稱)*(Runtime+ThinkTime)
其中棋返,Vu(業(yè)務(wù)名稱)表示此業(yè)務(wù)的虛擬用戶數(shù)延都,即并發(fā)數(shù)。RunTime是測(cè)試程序/腳本運(yùn)行一次所消耗的時(shí)間睛竣,包括事務(wù)時(shí)間+非事務(wù)時(shí)間晰房。ThinkTime是模擬用戶思考或者填寫(xiě)表單消耗的時(shí)間。
下面是發(fā)帖動(dòng)作的測(cè)試腳本偽代碼(T射沟、TT殊者、AT表示時(shí)間,單位為秒验夯。AT一般都是非常小的猖吴,包含在事務(wù)時(shí)間中,可以忽略)簿姨。Runtime=T1+···+T7距误;ThinkTime=TT1+TT2。
業(yè)內(nèi)一般把 Think Time 設(shè)為3秒扁位。測(cè)試需求中要求響應(yīng)時(shí)間小于3秒准潭,我們就以3秒為閥值(為什么只有事務(wù)頁(yè)面是3秒,非事務(wù)時(shí)間是0.2秒域仇?刑然??)暇务∑寐樱可得Vu=TPS(RunTime+ThinkTime)=5.8(T1+TT1+T2+T3+T4+T5+TT2+T6+T7)≈76怔软。
如果只計(jì)算事務(wù)時(shí)間,Vu=TPST2=5.82≈12择镇。
可以看到兩者之間的Vu數(shù)量相差巨大挡逼。由于一次迭代的時(shí)間會(huì)大于事務(wù)的響應(yīng)時(shí)間,如果在估算時(shí)不把非事務(wù)消耗的時(shí)間加入進(jìn)去腻豌,計(jì)算出來(lái)的12個(gè)并發(fā)用戶在測(cè)試執(zhí)行時(shí)很有可能無(wú)法達(dá)到TPS=5.8的目標(biāo)家坎。
由于我們計(jì)算Vu時(shí),使用的是系統(tǒng)TPS(登錄吝梅、瀏覽虱疏、發(fā)帖、回帖合計(jì))苏携,其中又以發(fā)帖業(yè)務(wù)消耗時(shí)間最長(zhǎng)做瞪,所以計(jì)算出來(lái)的76個(gè)并發(fā)數(shù)實(shí)際上是系統(tǒng)業(yè)務(wù)的總并發(fā)數(shù),需要按比例分配到各個(gè)業(yè)務(wù)右冻。
業(yè)務(wù)名稱 | 高峰業(yè)務(wù)量 | TPS | 并發(fā)數(shù) | 響應(yīng)時(shí)間 | 事務(wù)成功率 |
---|---|---|---|---|---|
登錄 | 1300 | 1.44 | 20 | <3秒 | >99% |
瀏覽 | 2706 | 3.0 | 40 | <3秒 | >99% |
發(fā)帖 | 526 | 0.58 | 7??? | <3秒 | >99% |
回帖 | 676 | 0.75 | 10 | <3秒 | >99% |
合計(jì) | 5208 | 5.8 | 77 | - | - |
實(shí)際上分配時(shí)由于有小數(shù)點(diǎn)装蓬,向上取整(是合計(jì)向上取整,還是單個(gè)業(yè)務(wù)向上取整国旷?矛物??)跪但,所以76個(gè)并發(fā)用戶分配后是77個(gè)。
并發(fā)數(shù)的計(jì)算說(shuō)到底還是一個(gè)估算峦萎,在性能測(cè)試執(zhí)行時(shí)需要根據(jù)實(shí)際情況調(diào)整屡久。衡量性能的指標(biāo)還是要參考TPS實(shí)際達(dá)到了多少,響應(yīng)時(shí)間是多少爱榔,系統(tǒng)硬件(CPU被环、內(nèi)存等)指標(biāo)是否在限定范圍內(nèi)等要求。