天天看點

全鍊路壓測(1):認識全鍊路壓測

之前斷斷續續寫過一些全鍊路壓測相關的技術文章,很多同學評價還不錯。朋友建議我寫個系列,基于自己的落地實踐經驗,對全鍊路壓測做個系統性的梳理總結。

今年跳槽後我的工作重心也偏向了全鍊路壓測和穩定性保障方面的研究,這個時間點寫這個系列,也算是對自己過去工作的最好總結。

整體寫作規劃裡,這個系列大概有14篇内容,不排除後期有新的了解和沉澱,會加更。目前草稿寫差不多了,大體的更新節奏,應該是一周2篇左右的樣子,靜等更新吧。

全鍊路壓測(1):認識全鍊路壓測

全鍊路壓測這個Topic,最初是阿裡提出的,背景緣由也很簡單,雙十一大促嘛。

13年之前,阿裡每次為了準備雙十一大促系統能平穩支撐,都要花4-6個月準備,然後大促結束後花2個月時間打掃戰場。

整個過程,參與的各個團隊的同學加起來有将近200人,其中最耗時的點主要集中在機器容量評估和預案梳理以及壓測優化方面。

結果2012年雙11零點時刻,由于通路量過高,還是出了問題:商品超賣無法發貨。這個問題當時還上了央視新聞,可見其影響力。

後來他們内部複盤,一番讨論後,為了避免後續的大促再次出現類似的問題,決定在生産搞壓測,這就是現在被很多測試同學所熟知的生産全鍊路壓測的背景由來。

PS:這裡的定義,是我自己基于自己對生産全鍊路壓測的了解和實踐總結得來的,僅代表個人觀點。

1、什麼是全鍊路壓測?

基于實際的生産業務場景和系統環境,模拟海量的使用者請求和資料,對整個業務鍊路進行各種場景的測試驗證,持續發現并進行瓶頸調優,保障系統穩定性的一個技術工程。

2、全鍊路壓測解決了什麼問題?

針對業務場景越發複雜化、海量資料沖擊,發現并解決整個業務系統的可用性、擴充性以及容錯性的過程。

3、全鍊路壓測創造了什麼價值?

技術角度:降低成本、提高服務可用性、技術練兵&團隊協作&快速響應;

業務角度:提升使用者體驗、技術更好的服務業務、創造更多業務價值。

記得剛開始學習性能測試相關知識的時候,我一直有個疑問:性能測試可以對測試工程師本人和企業帶來什麼價值?

随着不斷學習成和工作中的實踐以及和很多測試同學交流,我總結出了如下幾點優點和潛在價值:

提升測試工程師的技術能力;

提升對系統架構和業務邏輯的了解;

提升測試工程師在職場和求職市場的競争力;

提前發現系統潛在的不穩定因素,提高線上系統穩定性;

更精準的容量評估和容量規劃,降低系統的硬體成本和維護成本;

保障系統在大促秒殺等場景和峰值流量沖擊下的穩定性,助力業務目标達成;

随着網際網路行業不斷發展,系統架構越發複雜,業務場景越發多樣化,對性能測試的要求也越來越高,傳統壓測方式已經無法滿足業務和技術的發展需要。

相比于傳統的壓測方式,全鍊路壓測作為性能測試領域新階段的最佳實踐,它們的差異如下:

壓測類型

傳統壓測

全鍊路壓測

壓測方式

Jmeter、Locust、Loadrunner

壓測叢集、流量引擎、錄制回放

承接方式

需求響應式,被動

發現系統所有鍊路存在的瓶頸點,主動

壓測環境

測試環境/性能環境

生産環境

環境特點

環境不穩定/配置低/壓測結果參考性不高

環境穩定/完全真實環境/壓測結果真實可靠

壓測場景

單機單接口、單機單鍊路、單機混合鍊路

包含覆寫範圍内的所有核心鍊路及場景

壓測過程

可觀測性較低,延時較高

實時可視化觀測

測試結果

資料次元小,無法提供太多資料便于分析

提供多元度細粒度的資料,便于快速定位問題優化

投入成本

需要搭建單獨的壓測環境

完全線上生産環境進行,無須單獨搭建環境

全鍊路壓測(1):認識全鍊路壓測

傳統壓測和生産全鍊路壓測的主要差別,概括來說可以分為如下四個點:

全鍊路壓測(1):認識全鍊路壓測

環境問題:主要是機器配置、節點數量以及一些參數配置方面(線程池、JVM);

成本問題:單獨的性能測試環境,機器成本和維護成本較高,生産在這方面幾乎是0成本;

真實性問題:硬體配置差異、資料差異、中間件配置差異等,都可能導緻流量預估和壓測結果偏移;

資料流向問題:測試環境大多都是單接口單鍊路壓測,資料流轉性無法保證,資料多樣性也存在部分問題;

那麼,要解決差異帶來的不穩定因素,最終的選擇就是生産全鍊路壓測:

全鍊路壓測(1):認識全鍊路壓測

雖然全鍊路壓測解決了傳統壓測過程中的種種痛點,可以為線上性能評估提供更多詳實的參考建議。但在落地過程中,全鍊路壓測依然要解決很多問題,主要有如下幾點挑戰:

全鍊路壓測(1):認識全鍊路壓測

1、鍊路梳理

現在大多數企業都是采用微服務架構來設計系統,且業務場景多樣化,導緻了系統架構異常複雜。

要覆寫所有壓測範圍内的場景,就需要對涉及的所有應用及其調用關系進行梳理。目前業内還沒有較好的鍊路梳理工具,導緻這個過程需要人肉來梳理,耗時且費力。

2、資料隔離

生産全鍊路壓測最重要的一點是避免對生産資料造成污染。業内常見的做法有如下兩點:

壓測資料寫入正式庫表,然後通過特殊的字段進行清理(業務改造成本大,清理風險高,耗時久);

采用影子庫表,壓測流量資料進行影子庫表,在不對生産資料造成污染的情況下進行壓測;

3、避免業務侵入

在全鍊路壓測落地過程中,有一點必須考慮到的是業務部門的接受能力。如果要通過技術架構改造或者采用資料标記的方式來實作,勢必會對生産業務造成一定影響(要改造是需要大量資源和時間的)。

4、性能定位分析

全鍊路壓測是在生産環境進行,壓測過程中,除了要防止資料污染,完善的監控體系和實時的可視化鍊路追蹤也是很重要的一點。

不同企業在監控體系方面的建設都不一樣,要進行全面詳細的流量評估,需要有完善的監控平台來進行各次元的資料采集和展示。

在整個壓測鍊路中,實時的可視化鍊路追蹤能實時的觀察到每個調用鍊路的具體資訊,對問題的快速發現和定位有重大的幫助。

還要考慮到不把生産服務壓挂。是以需要一套完整的機制來保證,壓測在正常實施的同時,不對生産服務應用造成影響。

5、更多挑戰

全鍊路壓測是在生産環境進行,壓測過程中,要考慮不對生産服務造成影響。是以需要一套完整的機制來保證,壓測在正常實施的同時,不對生産服務應用造成影響。

生産全鍊路壓測的整個流程,大緻可分為三個環節,每個環節的主要事項如下:

全鍊路壓測(1):認識全鍊路壓測

生産全鍊路壓測的本質,是個能力建設的技術工程,不是一蹴而就的。整體的演變曆程大緻如下:

全鍊路壓測(1):認識全鍊路壓測

1、需求驅動壓測

這個階段的主要特點是被動式響應壓測需求,效率低,無法快速定位性能問題,結果對線上沒太多參考價值。

2、性能體系建設

這個階段主要是性能測試體系的建設過程,比如日常版本壓測和性能基線性能回歸等。

3、線上風險識别與熔斷

到了這個階段,就需要線上有一定的監控報警體系和風險熔斷能力。

4、生産隻讀業務鍊路壓測

隻讀場景相對來說技術難度沒那麼大,可以通過這個階段來做到技術練兵。

5、生産流量資料隔離能力

上面提到了資料安全隔離,這也是生産全鍊路壓測最大的一個技術挑戰。

6、生産部分業務鍊路壓測

全鍊路的覆寫場景根據業務不同要覆寫的範圍和難度也不一樣,建議先從非核心業務開始落地做試點驗證。

7、生産全鍊路壓測

通過上面幾個步驟,從基礎的能力建設、體系建設,到線上的監控能力、隻讀場景練兵以及資料隔離到試點驗證,最終才能達到生産核心鍊路全鍊路壓測的過程。

以上内容主要是對全鍊路壓測的背景及落地實踐和演變過程做個介紹,後續的系列文章會針對每個環節進行讨論和說明,敬請期待。

建了一個全鍊路壓測溝通交流群,目前群人數已超過100,想加群的同學請公衆号回複關鍵字:全鍊路壓測。

添加我好友,我邀請進群,加群請備注說明來意。

轉載請注明出處,商用請征得作者本人同意,謝謝!!!