前言
之前斷斷續續寫過一些全鏈路壓測相關的技術文章,很多同學評價還不錯。朋友建議我寫個系列,基於自己的落地實踐經驗,對全鏈路壓測做個系統性的梳理總結。
今年跳槽後我的工作重心也偏向了全鏈路壓測和穩定性保障方面的研究,這個時間點寫這個系列,也算是對自己過去工作的最好總結。
整體寫作規劃裡,這個系列大概有14篇內容,不排除後期有新的理解和沉澱,會加更。目前草稿寫差不多了,大體的更新節奏,應該是一週2篇左右的樣子,靜等更新吧。
目錄大綱
背景:天貓2012雙11的痛
全鏈路壓測這個Topic,最初是阿里提出的,背景緣由也很簡單,雙十一大促嘛。
13年之前,阿里每次為了準備雙十一大促系統能平穩支撐,都要花4-6個月準備,然後大促結束後花2個月時間打掃戰場。
整個過程,參與的各個團隊的同學加起來有將近200人,其中最耗時的點主要集中在機器容量評估和預案梳理以及壓測優化方面。
結果2012年雙11零點時刻,由於訪問量過高,還是出了問題:商品超賣無法發貨。這個問題當時還上了央視新聞,可見其影響力。
後來他們內部覆盤,一番討論後,為了避免後續的大促再次出現類似的問題,決定在生產搞壓測,這就是現在被很多測試同學所熟知的生產全鏈路壓測的背景由來。
定義:如何理解全鏈路壓測
PS:這裡的定義,是我自己基於自己對生產全鏈路壓測的瞭解和實踐總結得來的,僅代表個人觀點。
1、什麼是全鏈路壓測?
基於實際的生產業務場景和系統環境,模擬海量的使用者請求和資料,對整個業務鏈路進行各種場景的測試驗證,持續發現並進行瓶頸調優,保障系統穩定性的一個技術工程。
2、全鏈路壓測解決了什麼問題?
針對業務場景越發複雜化、海量資料衝擊,發現並解決整個業務系統的可用性、擴充套件性以及容錯性的過程。
3、全鏈路壓測創造了什麼價值?
- 技術角度:降低成本、提高服務可用性、技術練兵&團隊協作&快速響應;
- 業務角度:提升使用者體驗、技術更好的服務業務、創造更多業務價值。
差異:傳統壓測和全鏈路壓測
記得剛開始學習效能測試相關知識的時候,我一直有個疑問:效能測試可以對測試工程師本人和企業帶來什麼價值?
隨著不斷學習成和工作中的實踐以及和很多測試同學交流,我總結出瞭如下幾點優點和潛在價值:
- 提升測試工程師的技術能力;
- 提升對系統架構和業務邏輯的瞭解;
- 提升測試工程師在職場和求職市場的競爭力;
- 提前發現系統潛在的不穩定因素,提高線上系統穩定性;
- 更精準的容量評估和容量規劃,降低系統的硬體成本和維護成本;
- 保障系統在大促秒殺等場景和峰值流量衝擊下的穩定性,助力業務目標達成;
隨著網際網路行業不斷髮展,系統架構越發複雜,業務場景越發多樣化,對效能測試的要求也越來越高,傳統壓測方式已經無法滿足業務和技術的發展需要。
相比於傳統的壓測方式,全鏈路壓測作為效能測試領域新階段的最佳實踐,它們的差異如下:
壓測型別 |
傳統壓測 |
全鏈路壓測 |
壓測方式 |
Jmeter、Locust、Loadrunner |
壓測叢集、流量引擎、錄製回放 |
承接方式 |
需求響應式,被動 |
發現系統所有鏈路存在的瓶頸點,主動 |
壓測環境 |
測試環境/效能環境 |
生產環境 |
環境特點 |
環境不穩定/配置低/壓測結果參考性不高 |
環境穩定/完全真實環境/壓測結果真實可靠 |
壓測場景 |
單機單介面、單機單鏈路、單機混合鏈路 |
包含覆蓋範圍內的所有核心鏈路及場景 |
壓測過程 |
可觀測性較低,延時較高 |
實時視覺化觀測 |
測試結果 |
資料維度小,無法提供太多資料便於分析 |
提供多維度細粒度的資料,便於快速定位問題優化 |
投入成本 |
需要搭建單獨的壓測環境 |
完全線上生產環境進行,無須單獨搭建環境 |
思考:解決差異帶來的不穩定
傳統壓測和生產全鏈路壓測的主要區別,概括來說可以分為如下四個點:
- 環境問題:主要是機器配置、節點數量以及一些引數配置方面(執行緒池、JVM);
- 成本問題:單獨的效能測試環境,機器成本和維護成本較高,生產在這方面幾乎是0成本;
- 真實性問題:硬體配置差異、資料差異、中介軟體配置差異等,都可能導致流量預估和壓測結果偏移;
- 資料流向問題:測試環境大多都是單介面單鏈路壓測,資料流轉性無法保證,資料多樣性也存在部分問題;
那麼,要解決差異帶來的不穩定因素,最終的選擇就是生產全鏈路壓測:
挑戰:如何落地生產全鏈路壓測
雖然全鏈路壓測解決了傳統壓測過程中的種種痛點,可以為線上效能評估提供更多詳實的參考建議。但在落地過程中,全鏈路壓測依然要解決很多問題,主要有如下幾點挑戰:
1、鏈路梳理
現在大多數企業都是採用微服務架構來設計系統,且業務場景多樣化,導致了系統架構異常複雜。
要覆蓋所有壓測範圍內的場景,就需要對涉及的所有應用及其呼叫關係進行梳理。目前業內還沒有較好的鏈路梳理工具,導致這個過程需要人肉來梳理,耗時且費力。
2、資料隔離
生產全鏈路壓測最重要的一點是避免對生產資料造成汙染。業內常見的做法有如下兩點:
- 壓測資料寫入正式庫表,然後通過特殊的欄位進行清理(業務改造成本大,清理風險高,耗時久);
- 採用影子庫表,壓測流量資料進行影子庫表,在不對生產資料造成汙染的情況下進行壓測;
3、避免業務侵入
在全鏈路壓測落地過程中,有一點必須考慮到的是業務部門的接受能力。如果要通過技術框架改造或者採用資料標記的方式來實現,勢必會對生產業務造成一定影響(要改造是需要大量資源和時間的)。
4、效能定位分析
全鏈路壓測是在生產環境進行,壓測過程中,除了要防止資料汙染,完善的監控體系和實時的視覺化鏈路追蹤也是很重要的一點。
不同企業在監控體系方面的建設都不一樣,要進行全面詳細的流量評估,需要有完善的監控平臺來進行各維度的資料採集和展示。
在整個壓測鏈路中,實時的視覺化鏈路追蹤能實時的觀察到每個呼叫鏈路的具體資訊,對問題的快速發現和定位有重大的幫助。
還要考慮到不把生產服務壓掛。因此需要一套完整的機制來保證,壓測在正常實施的同時,不對生產服務應用造成影響。
5、更多挑戰
全鏈路壓測是在生產環境進行,壓測過程中,要考慮不對生產服務造成影響。因此需要一套完整的機制來保證,壓測在正常實施的同時,不對生產服務應用造成影響。
流程:生產全鏈路壓測落地實踐
生產全鏈路壓測的整個流程,大致可分為三個環節,每個環節的主要事項如下:
能力建設:生產壓測能力演變歷程
生產全鏈路壓測的本質,是個能力建設的技術工程,不是一蹴而就的。整體的演變歷程大致如下:
1、需求驅動壓測
這個階段的主要特點是被動式響應壓測需求,效率低,無法快速定位效能問題,結果對線上沒太多參考價值。
2、效能體系建設
這個階段主要是效能測試體系的建設過程,比如日常版本壓測和效能基線效能迴歸等。
3、線上風險識別與熔斷
到了這個階段,就需要線上有一定的監控報警體系和風險熔斷能力。
4、生產只讀業務鏈路壓測
只讀場景相對來說技術難度沒那麼大,可以通過這個階段來做到技術練兵。
5、生產流量資料隔離能力
上面提到了資料安全隔離,這也是生產全鏈路壓測最大的一個技術挑戰。
6、生產部分業務鏈路壓測
全鏈路的覆蓋場景根據業務不同要覆蓋的範圍和難度也不一樣,建議先從非核心業務開始落地做試點驗證。
7、生產全鏈路壓測
通過上面幾個步驟,從基礎的能力建設、體系建設,到線上的監控能力、只讀場景練兵以及資料隔離到試點驗證,最終才能達到生產核心鏈路全鏈路壓測的過程。
最後
以上內容主要是對全鏈路壓測的背景及落地實踐和演變過程做個介紹,後續的系列文章會針對每個環節進行討論和說明,敬請期待。
建了一個全鏈路壓測溝通交流群,掃描下方二維碼即可進群交流。