揭開神秘面紗,如何組織一次分布式壓測
越來越多的企業(yè)開始意識到分布式壓測的重要性。
隨著互聯(lián)網(wǎng)行業(yè)不斷發(fā)展,系統(tǒng)架構(gòu)越發(fā)復(fù)雜,業(yè)務(wù)場景越發(fā)多樣化,對性能測試的要求也越來越高。傳統(tǒng)壓測方式已經(jīng)無法滿足業(yè)務(wù)和技術(shù)的發(fā)展需要,分布式壓測,就是在這樣的背景下應(yīng)運而生的。
早在2006年前后,IT系統(tǒng)穩(wěn)定性就成為了當(dāng)時集中式架構(gòu)的挑戰(zhàn)。隨著互聯(lián)網(wǎng)的快速興起,當(dāng)時的“Unix+小型機”架構(gòu)遭遇了數(shù)據(jù)爆增的沖擊。特別是在線交易、商業(yè)分析和數(shù)據(jù)庫等關(guān)鍵業(yè)務(wù)系統(tǒng),在2010年前后進(jìn)入了TB甚至PB級,導(dǎo)致傳統(tǒng)IT架構(gòu)不堪重負(fù),對IT系統(tǒng)的穩(wěn)定性和可擴(kuò)展性等提出了新要求。也就是從那時起,阿里巴巴開始了去“IOE”改造,采用X86服務(wù)器和標(biāo)準(zhǔn)存儲與網(wǎng)絡(luò)設(shè)備等,重新架設(shè)高穩(wěn)定和可擴(kuò)展的分布式IT系統(tǒng)。
2010年后的10年,中國的互聯(lián)網(wǎng)公司先后進(jìn)入了分布式系統(tǒng)的改造和建設(shè); 2020年伴隨著新基建的崛起,更推動了電信、金融、電力、零售、醫(yī)療、教育、政府機構(gòu)等各行各業(yè)IT系統(tǒng)基于云計算的分布式進(jìn)化。從集中式架構(gòu)到分布式架構(gòu),IT系統(tǒng)的穩(wěn)定性不僅僅涉及到機房布線、網(wǎng)絡(luò)通信、硬件部署、應(yīng)用架構(gòu)、數(shù)據(jù)容災(zāi)等,還需要對平臺自身的精細(xì)化管控和保障,包括容量壓測與評估、全鏈路壓測等。
進(jìn)入2021年,隨著企業(yè)互聯(lián)網(wǎng)與產(chǎn)業(yè)互聯(lián)網(wǎng)的大繁榮,為基于分布式系統(tǒng)的IT系統(tǒng)穩(wěn)定性打開了一個新賽道,分布式壓測也被提上了日程。
如何用更少的預(yù)算完成指定當(dāng)前業(yè)務(wù)規(guī)模的流量高峰,是技術(shù)的永恒主題。
今天我們就在上一期性能測試的基礎(chǔ)上,講講分布式壓測的目的、要解決的問題以及如何組織分布式壓測等幾個方面展開討論。

分布式壓測是什么?
要回答這個問題,我們首先要清楚分布式壓測究竟是什么?
根據(jù)百度百科的定義,壓力測試指的是主動產(chǎn)生流量,從而對服務(wù)造成計算壓力,測試服務(wù)的性能與健壯性等。
根據(jù)關(guān)注角度的區(qū)分,可以分為分布式壓測(客戶端)與全鏈路壓測(服務(wù)端)。
分布式壓測指的是利用多臺機器向目標(biāo)機器產(chǎn)生壓力,模擬幾萬用戶并發(fā)訪問,在壓測的基礎(chǔ)上做延伸,側(cè)重于發(fā)壓端的分布式與分散性。
從壓測本身出發(fā),壓測的目的可分為以下四種:
1、優(yōu)化:找到系統(tǒng)以及分布式系統(tǒng)中的短板,進(jìn)行優(yōu)化;
2、標(biāo)準(zhǔn)資源需求:現(xiàn)有邏輯在指定的資源下,能提供正常服務(wù)的臨界值是多少,同步給與后續(xù)資源擴(kuò)展時以數(shù)據(jù)支持;
3、流量回放:針對真實的流量,現(xiàn)有服務(wù)以及資源的表型形式;
4、業(yè)務(wù)演練:對特定業(yè)務(wù)做演練,提前發(fā)現(xiàn)并規(guī)避問題。

全鏈路壓測一般指完全引入相關(guān)聯(lián)的系統(tǒng),真實模擬線上硬件環(huán)境,更多的是以請求為核心,完全模擬真實請求流量,通過引流等方式進(jìn)行場景的模擬進(jìn)行壓測,更多的適用于業(yè)務(wù)鏈路較長的業(yè)務(wù)。通過全鏈路壓測發(fā)現(xiàn)系統(tǒng)服務(wù)的數(shù)據(jù)流漏斗模型比例、瓶頸業(yè)務(wù)、高頻業(yè)務(wù)、高可用節(jié)點等問題,給線上服務(wù)部署提供真實數(shù)據(jù)予以參考。

目的是考察從用戶開始訪問系統(tǒng)到完成全部業(yè)務(wù)的整個鏈條中,核心頁面和交易關(guān)鍵業(yè)務(wù)的實際承載能力;模擬完全的真實情況來做到提前心里有數(shù)。驗證的最好辦法是讓事件提前發(fā)生,通過全鏈路壓測就可以提早發(fā)現(xiàn)問題。
分布式壓測解決什么問題?
了解了基本的概念后,我們來看下分布式壓測可以解決哪些問題。
簡單來說,分布式壓測可解決以下四方面的問題:
1、單機發(fā)壓能力有限;
2、流量壓力有地域分布等需求;
3、壓測過程中的數(shù)據(jù)指標(biāo)豐富;
4、壓測結(jié)果數(shù)據(jù)匯總展示。

但是,分布式壓測在探索和應(yīng)用的過程中也會面臨一些挑戰(zhàn)。
比如發(fā)壓機的調(diào)度問題,一方面發(fā)壓機有可能在過程中出現(xiàn)宕機,另一方面由于發(fā)壓機的資源配置不同,分配壓力也不同,需對發(fā)壓機的真實運行情況進(jìn)行監(jiān)控。
再比如基礎(chǔ)數(shù)據(jù)的調(diào)度問題,需要處理好基礎(chǔ)數(shù)據(jù)的分配與調(diào)度、多數(shù)據(jù)源之間的調(diào)度、沖突性基礎(chǔ)數(shù)據(jù)之間的調(diào)度以及其他相關(guān)性數(shù)據(jù)的準(zhǔn)備與入庫,任何一個環(huán)節(jié)出錯,都有可能影響整個壓測過程。
如何組織分布式壓測?
那么,一次完整的分布式壓測過程應(yīng)該是怎樣的呢?
一般而言,分布式壓測分為6個步驟:
1、籌備:準(zhǔn)備被壓測環(huán)境,可以是單獨的測試環(huán)境,也可以是正式環(huán)境以及確定壓測時間;
2、確定發(fā)壓曲線:可以是階梯型、線性上升型;
3、確定發(fā)壓機分布:明確流量來源訴求;
4、明確目的:根據(jù)目的確定事務(wù)與接口;
5、準(zhǔn)備基礎(chǔ)數(shù)據(jù):相關(guān)數(shù)據(jù)的準(zhǔn)備以及數(shù)據(jù)調(diào)度的規(guī)劃;
6、過程監(jiān)控結(jié)果匯總:過程中做監(jiān)控報警,壓測完成之后做數(shù)據(jù)分析,結(jié)合全鏈路的監(jiān)控,比如博睿數(shù)據(jù) Bonree Net、Bonree Server等基礎(chǔ)監(jiān)控產(chǎn)品,精確定位到性能瓶頸。

需要注意的是,在組織分布式壓測的過程中,需檢測發(fā)壓端設(shè)定的流量是否都打到了目標(biāo)服務(wù)器上;如果服務(wù)架構(gòu)比較復(fù)雜,有可能有其他因素導(dǎo)致流量缺失等;也可能對發(fā)壓資源使用預(yù)估不足,需對發(fā)壓端的資源進(jìn)行監(jiān)控;同時需要結(jié)合全鏈路的監(jiān)控,精確定位到性能瓶頸。