如何做好性能壓測(cè)(一):壓測(cè)環(huán)境的設(shè)計(jì)和搭建
01 性能環(huán)境要考慮的要素
系統(tǒng)邏輯架構(gòu),即組成系統(tǒng)的組件、應(yīng)用之間的結(jié)構(gòu)、交互關(guān)系的抽象。最簡(jiǎn)單最基本的就是這三層架構(gòu)。
三層邏輯結(jié)構(gòu)圖
客戶層:用戶請(qǐng)求端。
Web層:處理客戶端所有的業(yè)務(wù)請(qǐng)求邏輯和服務(wù)端數(shù)據(jù)。
數(shù)據(jù)庫(kù)層:維護(hù)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)。
更復(fù)雜的邏輯結(jié)構(gòu)
邏輯架構(gòu)中的任意一層,有可能是在獨(dú)立的物理集群機(jī)器上,也有可能跨多個(gè)物理機(jī)器或者跟其他邏輯層共享同一個(gè)物理集群。
邏輯架構(gòu)間的箭頭是數(shù)據(jù)流,不是物理網(wǎng)絡(luò)連接。
物理架構(gòu)圖
軟件:環(huán)境中涉及到哪些基礎(chǔ)軟件、中間件。
硬件:實(shí)體機(jī)/虛擬機(jī),單機(jī)配置(CPU、內(nèi)存、硬盤大小),集群規(guī)模。
網(wǎng)絡(luò):內(nèi)網(wǎng)還是外網(wǎng),網(wǎng)絡(luò)帶寬,是否有跨網(wǎng)段問(wèn)題,是否隔離。
軟件中對(duì)系統(tǒng)使用到的中間件有一個(gè)了解,不僅可以幫助設(shè)計(jì)更仿真的壓測(cè)環(huán)境,也有助于在壓測(cè)過(guò)程中,加快瓶頸、問(wèn)題的定位和解決。
02 不同性能壓測(cè)環(huán)境的優(yōu)缺點(diǎn)對(duì)比
我們通過(guò)表格的形式以下 4 個(gè)壓測(cè)環(huán)境方案在使用場(chǎng)景、優(yōu)缺點(diǎn)、成本、阿里云及其客戶的應(yīng)用情況做了對(duì)比。
從表格中,我們可以看待,不管是哪種壓測(cè)環(huán)境方案,在落地成本,滿足需求程度上都是有所區(qū)別的,接下來(lái),我們結(jié)合在阿里/阿里云客戶的應(yīng)用情況,對(duì)這 4 種壓測(cè)環(huán)境進(jìn)行介紹。
方案價(jià)值
既然是低配環(huán)境,壓出來(lái)的數(shù)據(jù)似乎完全不能用作生產(chǎn)環(huán)境運(yùn)行的參考,但實(shí)際上,這種環(huán)境下的壓測(cè),也是非常重要的一環(huán)。主要體現(xiàn)在項(xiàng)目研發(fā)階段的價(jià)值上。
新應(yīng)用上線前,應(yīng)用代碼本身的瓶頸發(fā)現(xiàn)。代碼本身的性能問(wèn)題,例如連接未釋放,線程數(shù)過(guò)多,通過(guò)低配的環(huán)境,一定時(shí)長(zhǎng)的壓測(cè)完全可以提前發(fā)現(xiàn)很多。
應(yīng)用維度基線數(shù)據(jù)。跑出來(lái)的數(shù)據(jù)不能給線上做參考,但是如果每次迭代,發(fā)布前,都在同一套低配環(huán)境運(yùn)行性能壓測(cè),跟低配基線數(shù)據(jù)進(jìn)行對(duì)比,也能起到衡量系統(tǒng)迭代的時(shí)候,性能是否有提升或者下降的參考。
幫助研發(fā)進(jìn)行快速的性能調(diào)優(yōu)。系統(tǒng)越復(fù)雜的時(shí)候,發(fā)生性能問(wèn)題后定位的難度會(huì)指數(shù)增加。進(jìn)行過(guò)性能調(diào)優(yōu)的研發(fā)都有體會(huì),有時(shí)候調(diào)優(yōu),就是改一個(gè)配置,然后重新部署,跑壓測(cè),看結(jié)果是不是改善了,直到找到最佳的配置。這個(gè)過(guò)程如果不能輕量起來(lái),對(duì)于研發(fā)調(diào)優(yōu)就是噩夢(mèng)。
存在的問(wèn)題:
構(gòu)建低配環(huán)境,可以是普通的測(cè)試環(huán)境,和線上完全隔離。但是要解決以下問(wèn)題:
壓測(cè)會(huì)影響測(cè)試環(huán)境的功能測(cè)試。這一點(diǎn)很容易理解。壓力大了,可能影響同一套測(cè)試環(huán)境的功能測(cè)試結(jié)果,所以性能壓測(cè)環(huán)境最好獨(dú)立。
依賴的基礎(chǔ)應(yīng)用在性能測(cè)試中沒(méi)有。例如要壓測(cè)的目標(biāo)業(yè)務(wù)是發(fā)貼,肯定會(huì)依賴到用戶相關(guān)的業(yè)務(wù),用戶中心就是一個(gè)基礎(chǔ)應(yīng)用(當(dāng)然很多小型公司可能沒(méi)獨(dú)立這塊業(yè)務(wù))。
研發(fā)階段無(wú)法快速部署要壓的分支。有一點(diǎn)規(guī)模的互聯(lián)網(wǎng)公司,一周的迭代,同一個(gè)應(yīng)用可能會(huì)有多個(gè)分支,需要支持快速部署指定的分支到性能環(huán)境。
阿里內(nèi)部有一套完整的系統(tǒng)用于支撐集團(tuán)每日成千上萬(wàn)的研發(fā)階段的性能壓測(cè)需求。
方案價(jià)值
容量規(guī)劃是一個(gè)持續(xù)的過(guò)程,如何減少人力投入,如何才能“無(wú)人值守”。
成本和效果平衡:盡量貼近線上運(yùn)行環(huán)境,同時(shí)容量規(guī)劃的數(shù)據(jù)對(duì)線上容量布置有很好的指導(dǎo)作用。
完全獨(dú)立不影響線上。
隨時(shí)可運(yùn)行,結(jié)果可跟蹤。
容量規(guī)劃不是直接在生產(chǎn)環(huán)境進(jìn)行的,因?yàn)樯a(chǎn)環(huán)境的最終容量配比,是參考自容量規(guī)劃產(chǎn)出的數(shù)據(jù)。在生產(chǎn)環(huán)境進(jìn)行的壓測(cè),是最后的驗(yàn)收階段,在容量規(guī)劃完成之后。提供一套獨(dú)立的的生產(chǎn)環(huán)境子集-隔離環(huán)境,用于容量規(guī)劃要解決的問(wèn)題:
構(gòu)建的環(huán)境集如何定義,規(guī)模和架構(gòu)如何貼近線上。
流量如何走到隔離環(huán)境。
隔離環(huán)境寫的數(shù)據(jù)是否需要清理,如何清理?
想詳細(xì)了解阿里容量規(guī)劃的技術(shù)演進(jìn),可參考:這里。
隔離環(huán)境就是最新容量規(guī)劃生態(tài)中的重要基礎(chǔ)。隔離環(huán)境的支持,才能支撐常態(tài)化的容量規(guī)劃運(yùn)行,持續(xù)不斷的改進(jìn)。
首先,提煉機(jī)器比例?;诰€上核心應(yīng)用的現(xiàn)有規(guī)模情況,提煉出一個(gè)縮小版的完全模型。即線上機(jī)器之間的比可能是5000:2000:1000,整體比例縮放100倍,在隔離環(huán)境的機(jī)器比是50:20:10。使用這種方式,有效的保證了同線上機(jī)器同比例,同時(shí)成本上做了很好的控制。
其次,確定隔離目標(biāo)流量。根據(jù)接下來(lái)線上的目標(biāo)流量大小,同比例計(jì)算出隔離環(huán)境應(yīng)該支撐的流量,作為隔離環(huán)境打壓測(cè)流量時(shí)的目標(biāo)流量。
然后,通過(guò)壓測(cè)流量從小到目標(biāo)流量探索,邊壓邊彈。
最后,收集隔離環(huán)境達(dá)到目標(biāo)流量后,新的機(jī)器比例及數(shù)據(jù)。應(yīng)用間的比例關(guān)系很可能已經(jīng)有了改變,有的應(yīng)用可能縮容,有的應(yīng)用可能擴(kuò)容,作為線上機(jī)器關(guān)系的參考。
當(dāng)然這里面的涉及的技術(shù)細(xì)節(jié)還有很多:
全鏈路壓測(cè)新應(yīng)用:整個(gè)壓測(cè)流量其實(shí)是沿用了線上壓測(cè)的全鏈路壓測(cè)機(jī)制,帶流量標(biāo),數(shù)據(jù)落影子庫(kù)的方式,所以隔離環(huán)境寫的數(shù)據(jù)不需要特殊的處理。
環(huán)境標(biāo)隔離環(huán)境:流量同時(shí)會(huì)帶上一個(gè)“環(huán)境標(biāo)”,通過(guò)環(huán)境標(biāo)的識(shí)別,接入層會(huì)把流量導(dǎo)到隔離環(huán)境,從而做到流量的環(huán)境隔離。
"RPS"模式施壓:在系統(tǒng)整體的流量數(shù)據(jù)獲取上,我們摒棄了一直以來(lái)備受追捧的"并發(fā)量"的方式。眾所周知,業(yè)務(wù)提出來(lái)的目標(biāo)一般會(huì)是,"希望峰值支持xxxx個(gè)用戶登陸"這種,進(jìn)行容量規(guī)劃的時(shí)候需要將并發(fā)的用戶數(shù)跟系統(tǒng)能承受的QPS,進(jìn)行一個(gè)映射關(guān)系。我們?nèi)萘恳?guī)劃就直接使用阿里云壓測(cè)平臺(tái)(PTS)的"RPS"模式,壓出來(lái)拿到的QPS數(shù)據(jù),直接是系統(tǒng)維度的數(shù)據(jù),不用轉(zhuǎn)換,這樣也更減少了轉(zhuǎn)換過(guò)程中的失真。
邊壓邊彈技術(shù):在隔離環(huán)境壓測(cè)中,何時(shí)彈新機(jī)器,彈多少機(jī)器,整個(gè)過(guò)程如何控制,這里面包含了一整套完整精密的算法。整個(gè)過(guò)程示意圖如下。
生產(chǎn)環(huán)境復(fù)制版面臨的挑戰(zhàn)非常多。其中,如果要對(duì)生產(chǎn)環(huán)境進(jìn)行完全的復(fù)制,將要面臨以下挑戰(zhàn):
復(fù)制生產(chǎn)環(huán)境服務(wù)器的架構(gòu)
復(fù)制生產(chǎn)環(huán)境網(wǎng)絡(luò)基礎(chǔ)環(huán)境
復(fù)制生產(chǎn)環(huán)境的所有應(yīng)用分層
網(wǎng)絡(luò)帶寬
數(shù)據(jù)庫(kù)以及所有的基礎(chǔ)數(shù)據(jù)集
負(fù)載均衡
…
對(duì)于傳統(tǒng)時(shí)代的壓測(cè)工程師來(lái)說(shuō),這樣一系列的操作,就是新搭建一套“影子系統(tǒng)”了,看起來(lái)有點(diǎn)像不可能完成的任務(wù)。要完成上述任務(wù),壓測(cè)工程師面臨巨大的挑戰(zhàn):
溝通協(xié)調(diào)幾乎所有的技術(shù)部門(開(kāi)發(fā)、運(yùn)維、網(wǎng)絡(luò)、IT…);
如果即用即銷毀,那么勞民損財(cái)只用個(gè)一兩次,成本太大;
如果持續(xù)維護(hù),那么維護(hù)成本顯然同樣不可忽略;
所以我們很少看到有公司進(jìn)行這樣的“生產(chǎn)環(huán)境復(fù)制”操作。小型公司可能沒(méi)那么多人力實(shí)現(xiàn),大中型公司,成本就更加難以接受了。但是現(xiàn)在云化趨勢(shì)的潮流中,這種方案有其自身的先天優(yōu)勢(shì)。
我們先看一下云上的產(chǎn)品架構(gòu)圖:
產(chǎn)品服務(wù)非常豐富,但是不太利于我們理解和復(fù)制線上環(huán)境用于壓測(cè)這個(gè)主題。具體到某一個(gè)場(chǎng)景的系統(tǒng)在阿里云的落地:
搭建一個(gè)云上應(yīng)用的最小集應(yīng)該需要用到:
SLB - 用來(lái)負(fù)載均衡;
ECS - 用來(lái)部署業(yè)務(wù)應(yīng)用;
RDS - 用來(lái)存儲(chǔ)業(yè)務(wù)數(shù)據(jù);
如果要在云上復(fù)制以上線上系統(tǒng),只需:
Step1:購(gòu)買跟線上集群同規(guī)模同配置的ECS,部署應(yīng)用;
Step2:復(fù)制線上RDS;
Step3:SLB配置新入口,指向復(fù)制環(huán)境;
Step4:開(kāi)始線上壓測(cè);
在云上進(jìn)行生產(chǎn)環(huán)境復(fù)制有以下優(yōu)勢(shì):
操作便捷??梢暬缑?,系統(tǒng)所需要的組建配置安裝即可。
即用即毀,節(jié)約成本。復(fù)制一套線上環(huán)境,如果是足夠復(fù)雜的系統(tǒng),使用的組件多,流量大,成本問(wèn)題肯定要考慮。傳統(tǒng)時(shí)代搭建的成本本身就高,繼續(xù)維護(hù)和再搭建的成本同樣也高。但是云時(shí)代,就是點(diǎn)幾個(gè)按鈕搭建,點(diǎn)幾個(gè)按鈕銷毀的過(guò)程,按使用量付費(fèi),驗(yàn)證完就釋放,對(duì)于資源成本的浪費(fèi)可控性很好。
機(jī)器配比根據(jù)情況可自由調(diào)控。在云上顯然也可以快捷進(jìn)行低配、同配生產(chǎn)環(huán)境子集復(fù)制,相對(duì)于非云化的系統(tǒng)同樣有明顯的優(yōu)勢(shì)。
架構(gòu)信息清晰。如果云端提供了“架構(gòu)感知”的功能,那么可以直觀繪制除業(yè)務(wù)系統(tǒng)在云上的整體架構(gòu),準(zhǔn)確直觀,壓測(cè)工程師不用再花很長(zhǎng)的時(shí)間梳理系統(tǒng)的架構(gòu),還面臨可能不準(zhǔn)確的問(wèn)題。
03 生產(chǎn)環(huán)境 - 老生常談
談分布式性能壓測(cè),就離不開(kāi)全鏈路壓測(cè)技術(shù)。目前,也有不少互聯(lián)網(wǎng)企業(yè)開(kāi)始構(gòu)建自己的全鏈路壓測(cè)體系,我們將阿里的實(shí)踐濃縮成一張全鏈路壓測(cè)模型圖。
04 總結(jié)
仿真的性能壓測(cè)環(huán)境,是執(zhí)行有效性能壓測(cè)的前提。
不同的壓測(cè)環(huán)境都有不同的應(yīng)用場(chǎng)景,企業(yè)應(yīng)根據(jù)自身情況進(jìn)行選擇。
規(guī)模中小的公司獨(dú)立搭建一套隔離的壓測(cè)環(huán)境成本高昂,可維護(hù)性差。
云上的性能壓測(cè),在操作、成本和維護(hù)方面,有較高的優(yōu)勢(shì)。