比“快速”更糟?如何定義性能需求
摘要:面對(duì)“快速”等模糊化性能需求應(yīng)該如何去處理?本文旨在拋磚引玉,在遇到模糊定義的性能需求時(shí),會(huì)有一系列的問(wèn)題擴(kuò)展這些模糊的需求。當(dāng)然與業(yè)務(wù)者的溝通有助于你發(fā)現(xiàn)可衡量的、特定的目標(biāo)。
上面的引用應(yīng)該會(huì)讓任何有經(jīng)驗(yàn)的工程師感到脊背發(fā)涼。這里的“快速”的具體含義是什么?
除非你對(duì)“快速”部分有一個(gè)定義,否則你將永遠(yuǎn)陷入優(yōu)化周期,因?yàn)槊總€(gè)應(yīng)用都可以不斷的被創(chuàng)建的更快一些。然而在現(xiàn)實(shí)生活中,性能并不是唯一一個(gè)需要我們完成的要求。所以為了能提供最大的價(jià)值,我們應(yīng)該知道什么時(shí)候該停止性能優(yōu)化?;蛘吒匾氖?,引導(dǎo)我們的性能目標(biāo)應(yīng)該是什么樣的。
功能以外的需求
企業(yè)已經(jīng)越來(lái)越好的表達(dá)軟件的功能需求。但是考慮到功能需求以外的事情,比如可用性、兼容性或者性能,這個(gè)時(shí)候企業(yè)主的描述常常是相當(dāng)于一片空白。而這片空白最常見(jiàn)的形式就是“確保它快”或“有沒(méi)有更好的情況”,你對(duì)此會(huì)有類(lèi)似于一下的處理方式:
相比較“確保它快”來(lái)說(shuō),以上兩種方式咋一看并不壞,畢竟它讓你有了一個(gè)明確的引導(dǎo)目標(biāo),不是嗎?事實(shí)上,上面的比“快”更糟糕。因?yàn)樗艘恍┛雌饋?lái)可以用作終極目標(biāo)的數(shù)字。
實(shí)際上,這些數(shù)字充其量只能作為基礎(chǔ)使用。你可以從這兩個(gè)出發(fā)擴(kuò)充需求。
95%實(shí)施在系統(tǒng)內(nèi)的業(yè)務(wù)的響應(yīng)時(shí)間必須在5秒內(nèi)
剩下的5%是什么?響應(yīng)時(shí)間變?yōu)?0秒或更多可以嗎?所以在設(shè)定的時(shí)候不要固定單一的目標(biāo),應(yīng)該有一個(gè)可接受的延遲分布:
對(duì)于上面兩種情況我們?cè)O(shè)定的目標(biāo)應(yīng)該是不同的,第一種響應(yīng)要求要比5秒短,而第二種則可以適當(dāng)?shù)姆艑捯蟆?p/>
當(dāng)使用到測(cè)量值時(shí)系統(tǒng)的負(fù)載是什么?有多少其他操作可以同時(shí)進(jìn)行?這些都是你應(yīng)該連接潛在相關(guān)的加載/吞吐量需求的地方。
響應(yīng)時(shí)間是在終端用戶(hù)環(huán)境中測(cè)量的嗎(如瀏覽器響應(yīng)或Android應(yīng)用更新結(jié)果)?或者測(cè)量是按照最后一個(gè)字節(jié)從服務(wù)器端發(fā)出時(shí)算的?為了避免含糊不清的定義測(cè)量標(biāo)準(zhǔn),在這里我們需要對(duì)延遲測(cè)量精確化。
批量處理作業(yè)/異步流程?每個(gè)月批量處理計(jì)算最終信用卡余額的延遲時(shí)間是兩小時(shí)還是5秒鐘?對(duì)于大型業(yè)務(wù)完整的財(cái)務(wù)報(bào)表異步的存入到CSV中并在10分鐘后通過(guò)郵件的方式發(fā)送?所以,明確一件事的操作延時(shí)是否要緊也是重要的。
通過(guò)以上幾段的分析,我們可以將第一種方式的性能描述細(xì)分為:
系統(tǒng)必須支持100個(gè)并發(fā)用戶(hù)
100個(gè)用戶(hù)通過(guò)CDN每10秒點(diǎn)擊一次你網(wǎng)站的靜態(tài)圖片,我想你閉著眼睛就可以構(gòu)建這樣的一個(gè)系統(tǒng)。100個(gè)用戶(hù)同時(shí)在你的網(wǎng)站上編碼4K視頻文件,這時(shí)候就難以想象了。
當(dāng)考慮到真正的并發(fā)性時(shí)事情從模糊轉(zhuǎn)向了毫無(wú)意義。比如將“100個(gè)并發(fā)用戶(hù)”理解為“100個(gè)操作并發(fā)的被100個(gè)線(xiàn)程處理”。假設(shè)每個(gè)這樣的操作過(guò)程需要10秒,然后系統(tǒng)的吞吐量為10ops/sec。如果你現(xiàn)在縮短10倍的操作時(shí)間,即每個(gè)操作過(guò)程需要1秒,系統(tǒng)的吞吐量將提高到100ops/sec。但是你會(huì)發(fā)現(xiàn)前一種并不滿(mǎn)足“100個(gè)真正的并發(fā)用戶(hù)”需求,只同時(shí)處理10個(gè)操作。這是一個(gè)失敗的需求
取代“并發(fā)用戶(hù)”或其他類(lèi)似的條款,這類(lèi)需求應(yīng)該更清楚的表達(dá)某些用戶(hù)的行為。將這些描述轉(zhuǎn)化為潛在的負(fù)載測(cè)試,以允許你模擬所需要的負(fù)載。
在這里不推薦測(cè)量吞吐量,現(xiàn)實(shí)生活中的應(yīng)用往往是多功能的并被用于動(dòng)態(tài)情況。這使得很難通過(guò)吞吐量來(lái)表達(dá)性能目標(biāo)。但是如果是特定的只用于某件事的應(yīng)用,如發(fā)票支付,吞吐量就成了衡量特定目標(biāo)的好方法。
產(chǎn)能計(jì)劃
結(jié)論
以上所列的描述是不完整的。舉例來(lái)說(shuō),當(dāng)涉及到可伸縮性和可用性時(shí),你會(huì)面臨一個(gè)全新的要求。本文旨在拋磚引玉,在你下次遇到模糊定義的性能需求時(shí),你會(huì)有一系列的問(wèn)題擴(kuò)展這些模糊的需求。
與業(yè)務(wù)者的溝通有助于你發(fā)現(xiàn)可衡量的、特定的目標(biāo)。從企業(yè)者來(lái)看,自然是希望所有操作的“超快速”。而為了實(shí)現(xiàn)這一目標(biāo),無(wú)外乎還是要?dú)w結(jié)到成本上。