如何做好性能压测(一)丨压测环境设计和搭建
一般來說,保證執(zhí)行性能壓測(cè)的環(huán)境和生產(chǎn)環(huán)境高度一致是執(zhí)行一次有效性能壓測(cè)的首要原則。有時(shí)候,即便是壓測(cè)環(huán)境和生產(chǎn)環(huán)境有很細(xì)微的差別,都有可能導(dǎo)致整個(gè)壓測(cè)活動(dòng)評(píng)測(cè)出來的結(jié)果不準(zhǔn)確。
1. 性能環(huán)境要考慮的要素
1.1 系統(tǒng)邏輯架構(gòu)
系統(tǒng)邏輯架構(gòu),即組成系統(tǒng)的組建,應(yīng)用之間的結(jié)構(gòu),交互關(guān)系的抽象。最簡單最基本的就是三層架構(gòu)。
三層邏輯結(jié)構(gòu)圖
- 客戶層:用戶請(qǐng)求端。
- web層:處理客戶端所有的業(yè)務(wù)請(qǐng)求邏輯和服務(wù)端數(shù)據(jù)。
- 數(shù)據(jù)庫層:維護(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ò)連接。
1.2 物理架構(gòu)
下圖為物理架構(gòu)圖。
1.3 硬件、軟件和網(wǎng)絡(luò)
- 軟件:環(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)段問題,是否隔離。
軟件中對(duì)系統(tǒng)使用到的中間件有一個(gè)了解,不僅可以幫助設(shè)計(jì)更仿真的壓測(cè)環(huán)境,也有助于在壓測(cè)過程中,加快瓶頸,問題的定位和解決。
2. 不同性能壓測(cè)環(huán)境優(yōu)缺點(diǎn)對(duì)比
2.1 對(duì)比表格
不管哪種壓測(cè)環(huán)境方案,在落地成本,滿足需求程度上都有區(qū)別,接下來對(duì)幾種壓測(cè)環(huán)境結(jié)合在阿里的應(yīng)用進(jìn)行介紹。
3. 低配生產(chǎn)環(huán)境子集-研發(fā)階段性能瓶頸發(fā)現(xiàn)
既然是低配環(huán)境,壓出來的數(shù)據(jù)似乎完全不能用作生產(chǎn)環(huán)境運(yùn)行的參考,但實(shí)際上,這種環(huán)境下的壓測(cè),也是非常重要的一環(huán)。主要體現(xiàn)在項(xiàng)目研發(fā)階段的價(jià)值上。
3.1 價(jià)值
- 新應(yīng)用上線前,應(yīng)用代碼本身的瓶頸發(fā)現(xiàn)。代碼本身的性能問題,例如連接未釋放,線程數(shù)過多,通過低配的環(huán)境,一定時(shí)長的壓測(cè)完全可以提前發(fā)現(xiàn)很多。
- 應(yīng)用維度基線數(shù)據(jù)。跑出來的數(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ā)生性能問題后定位的難度會(huì)指數(shù)增加。進(jìn)行過性能調(diào)優(yōu)的研發(fā)都有體會(huì),有時(shí)候調(diào)優(yōu),就是改一個(gè)配置,然后重新部署,跑壓測(cè),看結(jié)果是不是改善了,直到找到最佳的配置。這個(gè)過程如果不能輕量起來,對(duì)于研發(fā)調(diào)優(yōu)就是噩夢(mèng)。
3.2 問題
構(gòu)建低配環(huán)境,可以是普通的測(cè)試環(huán)境,跟線上完全隔離。但是要解決以下問題:
- 壓測(cè)會(huì)影響測(cè)試環(huán)境的功能測(cè)試。這一點(diǎn)很容易理解。壓力大了,可能影響同一套測(cè)試環(huán)境的功能測(cè)試結(jié)果,所以性能壓測(cè)環(huán)境最好獨(dú)立。
- 依賴的基礎(chǔ)應(yīng)用在性能測(cè)試中沒有。例如要壓測(cè)的目標(biāo)業(yè)務(wù)是發(fā)貼,肯定會(huì)依賴到用戶相關(guān)的業(yè)務(wù),用戶中心就是一個(gè)基礎(chǔ)應(yīng)用(當(dāng)然很多小型公司可能沒獨(dú)立這塊業(yè)務(wù))。
- 研發(fā)階段無法快速部署要壓的分支。有一點(diǎn)規(guī)模的互聯(lián)網(wǎng)公司,一周的迭代,同一個(gè)應(yīng)用可能會(huì)有多個(gè)分支,需要支持快速部署指定的分支到性能環(huán)境。
3.3 方案
阿里內(nèi)部有一套完整的系統(tǒng)用于支撐阿里內(nèi)部每日成千上萬的研發(fā)階段的性能壓測(cè)需求。
4. 同配生產(chǎn)環(huán)境子集-容量規(guī)劃
4.1 挑戰(zhàn)
- 容量規(guī)劃是一個(gè)持續(xù)的過程,如何減少人力投入,如何才能“無人值守”。
- 成本和效果平衡:盡量貼近線上運(yùn)行環(huán)境,同時(shí)容量規(guī)劃的數(shù)據(jù)對(duì)線上容量布置有很好的指導(dǎo)作用。
- 完全獨(dú)立不影響線上。
- 隨時(shí)可運(yùn)行,結(jié)果可跟蹤。
4.2 問題
容量規(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ī)劃要解決的問題:
- 構(gòu)建的環(huán)境集如何定義,規(guī)模和架構(gòu)如何貼近線上。
- 流量如何走到隔離環(huán)境。
- 隔離環(huán)境寫的數(shù)據(jù)是否需要清理,如何清理?
4.3 方案
阿里容量規(guī)劃的技術(shù)演進(jìn),可參考文后資料了解詳情[1]
現(xià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ù)接下來線上的目標(biāo)流量大小,同比例計(jì)算出隔離環(huán)境應(yīng)該支撐的流量,作為隔離環(huán)境打壓測(cè)流量時(shí)的目標(biāo)流量。
- 然后,通過壓測(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ù)落影子庫的方式, 所以隔離環(huán)境寫的數(shù)據(jù)不需要特殊的處理。
- 環(huán)境標(biāo)隔離環(huán)境:流量同時(shí)會(huì)帶上一個(gè)“環(huán)境標(biāo)”,通過環(huán)境標(biāo)的識(shí)別,接入層會(huì)把流量導(dǎo)到隔離環(huán)境,從而做到流量的環(huán)境隔離。
- PTS首創(chuàng)"RPS"模式施壓:在系統(tǒng)整體的流量數(shù)據(jù)獲取上,我們摒棄了一直依賴備受追捧的"并發(fā)量"的方式。眾所周知,業(yè)務(wù)提出來的目標(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"模式,壓出來拿到的QPS數(shù)據(jù),直接是系統(tǒng)維度的數(shù)據(jù),不用轉(zhuǎn)換,這樣也更減少了轉(zhuǎn)換過程中的失真。
- 邊壓邊彈技術(shù):在隔離環(huán)境壓測(cè)中,何時(shí)彈新機(jī)器,彈多少機(jī)器,整個(gè)過程如何控制,這里面包含了一整套完整精密的算法。整個(gè)過程示意圖如下。
5. 生產(chǎn)環(huán)境復(fù)制版-云時(shí)代的優(yōu)勢(shì)
5.1 挑戰(zhàn)
生產(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ù)庫以及所有的基礎(chǔ)數(shù)據(jù)集
- 負(fù)載均衡
......
5.2 問題
對(duì)于傳統(tǒng)時(shí)代的壓測(cè)工程師來說,這樣一系列的操作,就是新搭建一套“影子系統(tǒng)”了,看起來有點(diǎn)像不可能完成的任務(wù)。要完成上述任務(wù),壓測(cè)工程師面臨巨大的挑戰(zhàn):
- 溝通協(xié)調(diào)幾乎所有的技術(shù)部門(開發(fā)、運(yùn)維、網(wǎng)絡(luò)、IT...);
- 如果即用即銷毀,那么勞民損財(cái)只用個(gè)一兩次,成本太大;
- 如果持續(xù)維護(hù),那么維護(hù)成本顯然同樣不可忽略;
所以我們很少看到有公司進(jìn)行這樣的“生產(chǎn)環(huán)境復(fù)制”操作。小型公司可能沒那么多人力實(shí)現(xiàn),大中型公司,成本就更加難以接受了。但是現(xiàn)在云化趨勢(shì)的潮流中,這種方案開始體現(xiàn)出優(yōu)其越性了。
5.3 方案
我們先看一下阿里云的產(chǎn)品架構(gòu)圖。
產(chǎn)品服務(wù)非常豐富,但是不太利于我們理解和復(fù)制線上環(huán)境用于壓測(cè)這個(gè)主題。具體到某一個(gè)場景的系統(tǒng)在阿里云的落地:
網(wǎng)友的云產(chǎn)品架構(gòu)總結(jié),可參考文后資料了解詳情[2]
搭建一個(gè)云上應(yīng)用的最小集應(yīng)該需要用到:
如果要在阿里云上復(fù)制以上線上系統(tǒng)。
step1 購買跟線上集群同規(guī)模同配置的ECS,部署應(yīng)用;
step2 復(fù)制線上RDS;
step3 SLB配置新入口,指向復(fù)制環(huán)境;
step4 開始線上壓測(cè);
在阿里云進(jìn)行生產(chǎn)環(huán)境復(fù)制有以下優(yōu)勢(shì):
- 操作便捷??梢暬缑?#xff0c;系統(tǒng)所需要的組建配置安裝即可。插播一下,阿里云上的壓測(cè)服務(wù)PTS將來有機(jī)會(huì)提供一鍵搭建和銷毀性能環(huán)境的功能,徹底解放壓測(cè)工程師。
- 架構(gòu)信息清晰。阿里云上有“架構(gòu)感知”的功能,可以直觀繪制除業(yè)務(wù)系統(tǒng)在阿里云上的整體架構(gòu),準(zhǔn)確直觀,壓測(cè)工程師不用再花很長的時(shí)間梳理系統(tǒng)的架構(gòu),還面臨可能不準(zhǔn)確的問題;
- 即用即毀,大大節(jié)約成本。復(fù)制一套線上環(huán)境,如果是足夠復(fù)雜的系統(tǒng),使用的組建多,流量大,成本問題肯定要考慮。傳統(tǒng)時(shí)代搭建的成本本身就高,繼續(xù)維護(hù)和再搭建的成本同樣也高。但是云時(shí)代,就是點(diǎn)幾個(gè)按鈕搭建,點(diǎn)幾個(gè)按鈕銷毀的過程,按使用量付費(fèi),驗(yàn)證完就釋放,對(duì)于資源成本的浪費(fèi)可控性很好。
- 機(jī)器配比根據(jù)情況可自由調(diào)控:在阿里云上顯然也可以快捷進(jìn)行低配、同配生產(chǎn)環(huán)境子集復(fù)制,相對(duì)于非云化的系統(tǒng)同樣有明顯的優(yōu)勢(shì)。
6. 生產(chǎn)環(huán)境-老生常談
阿里的全鏈路壓測(cè)技術(shù)已經(jīng)是很成熟,并且得到很廣泛的推廣的線上壓測(cè)技術(shù)。互聯(lián)網(wǎng)大大小小的公司均有落地,在此只概括為一個(gè)模型圖,想知道更多細(xì)節(jié)內(nèi)容的,讀者可以網(wǎng)上收集以下,有大量的文章詳細(xì)闡述了各自落地實(shí)施的過程。
以下是阿里經(jīng)典的全鏈路壓測(cè)模型圖。
經(jīng)過多年的發(fā)展,由全鏈路壓測(cè)系統(tǒng)演進(jìn)出可對(duì)阿里以外的企業(yè)提供跨行業(yè)的通用的性能壓測(cè)服務(wù)的系統(tǒng)PTS。目前PTS也提供流量隔離解決方案給外部企業(yè)使用。
7. 總結(jié)
- 仿真的性能壓測(cè)環(huán)境,是執(zhí)行有效性能壓測(cè)的前提。
- 不同的壓測(cè)環(huán)境都有不同的應(yīng)用場景,企業(yè)應(yīng)根據(jù)自身情況進(jìn)行選擇。
- 規(guī)模中小的公司獨(dú)立搭建一套隔離的壓測(cè)環(huán)境成本高昂,可維護(hù)性差。
- 云時(shí)代的性能壓測(cè),阿里云上的PTS給高效壓測(cè)帶來更大的可能性。
參考文檔
[1]阿里容量規(guī)劃的技術(shù)演進(jìn):https://mp.weixin.qq.com/s/jNyadzGqk9_CYSygmlnLgQ
[2]網(wǎng)友的云產(chǎn)品架構(gòu)總結(jié) :https://rensanning.iteye.com/blog/2303440
后續(xù)內(nèi)容
如何做好性能壓測(cè)(二) | 施壓方式選擇(rps or 并發(fā))
我們是阿里云智能全球技術(shù)服務(wù)-SRE團(tuán)隊(duì),我們致力成為一個(gè)以技術(shù)為基礎(chǔ)、面向服務(wù)、保障業(yè)務(wù)系統(tǒng)高可用的工程師團(tuán)隊(duì);提供專業(yè)、體系化的SRE服務(wù),幫助廣大客戶更好地使用云、基于云構(gòu)建更加穩(wěn)定可靠的業(yè)務(wù)系統(tǒng),提升業(yè)務(wù)穩(wěn)定性。我們期望能夠分享更多幫助企業(yè)客戶上云、用好云,讓客戶云上業(yè)務(wù)運(yùn)行更加穩(wěn)定可靠的技術(shù),您可用釘釘掃描下方二維碼,加入阿里云SRE技術(shù)學(xué)院釘釘圈子,和更多云上人交流關(guān)于云平臺(tái)的那些事。
原文鏈接:https://developer.aliyun.com/article/781495?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的如何做好性能压测(一)丨压测环境设计和搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你不知道的CDN圈内黑话有哪些?
- 下一篇: 云话题 | 5G消息是什么?