天天看點

全鍊路壓測最佳實踐

作者:閃念基因

全鍊路壓測理論基礎

什麼是全鍊路壓測

· 基于實際的生産業務場景、系統環境,基于真實資料模拟海量的使用者請求對整個業務鍊進行壓力測試,并持續調優的過程;

· 全鍊路的核心為:業務場景、資料鍊路、壓力模型和環境拓撲;

· 全鍊路壓測不僅僅是一種測試手段,更确切來說其是一種測試過程,該過程涉及自動化測試/性能測試/高可用測試技術以外,還覆寫性能分析調優以及擴縮容解決方案等等。

為什麼做全鍊路壓測

· 大流量請求業務,穩定性保障非常困難;

· 大型的分布式系統微服務衆多,調用鍊錯綜複雜;

· 測試環境版本、資料不統一,測試環境配置與生産環境配置差異大,無法通過測試環境中單子產品單接口性能預估生産環境真實性能評估;

哪些場景适合全鍊路壓測

· 定時定期進行線上營運活動;

· 業務鍊路以及資料鍊路調用錯綜複雜,各子系統之間調用關系密切,均為業務核心調用鍊路;

· 真實業務流量與曆史流量對比預估有量的增長;

· 業務需求頻繁疊代,業務鍊路性能波動較大;

· 測試環境資料、系統版本等無法統一,且資源配置與線上差異較大;

全鍊路壓測模型設計(DESP)

從全鍊路壓測的四個核心點抽象出壓測模型,對應模型的四個次元:資料仿真度(D)、環境仿真度(E)、場景仿真度(S)、壓力仿真度(P),通過這四個次元的優化和調整來達到我們整個系統壓測的最佳仿真,壓測仿真度決定了整個壓測的成敗。

資料仿真度(D):

壓測資料包括兩部分:

一是被壓測系統的背景資料,也就是系統的曆史資料、存量資料;

曆史資料對于查詢類場景比較重要,保留曆史資料也是為了最大可能的接近真實場景。比如查詢接口,傳回1萬和傳回10萬條結果,性能是差很多的,我們的原則是背景資料規模盡量接近真實場景。

二是被壓測請求的參數化資料,也就是接口參數的資料,這些資料可以來自線上脫敏資料,也可以根據參數規則和場景需求自己構造。

除了資料規模,資料複雜度也是很重要的一個名額,也是比較容易忽略的,資料複雜度對性能的影響可能還會超過資料規模。比如續班活動,我們通過大量壓測得知每個學員報的班級數量對整個續班鍊路性能起了決定性影響。

比如100個學員:

場景1:90個學員報2個班,10個學員報10個班

場景2:10個學員報2個班,90個學員報10個班

壓測得知場景2的性能大大低于場景1,因為場景2學員個人的報班量大于場景1。這就指導我們構造學員和班級資料時要考慮報班量的分布,例如90%的學員報班量不超過5個,5%的學員報班量不超過10個,還有5%的學員報班量不超過30個,這就是資料負責度對性能的影響,如果不這樣構造資料,壓不出性能瓶頸,無法接近真實場景;

資料複雜度的通用解釋就是根據業務場景的流量比例,确定接口參數不同取值,比例越精确,參數取值就越多樣化,也就越複雜,這些需要前期分析大量的調用日志獲得。

資料仿真度因子包括:資料複雜度、資料規模

環境仿真度(E):

測試環境應該盡量接近真實環境,推薦直接線上上壓測,需要建設壓測通道,做到壓測資料隔離,不要影響真實資料。如果沒法線上上壓測,那麼線下環境盡量跟線上按等比例部署,伺服器配置盡量跟線上一樣,否則仿真度會大打折扣。

環境仿真度因子包括:是否線上壓測、線下部署規模(跟線上叢集等比例壓縮)、線下伺服器資源配置(跟線上保持一緻)

場景仿真度(S):

壓測場景就是壓測的目标和範圍,是我們壓測的前提。需要充分了解業務,歸納抽象出一條或者多條核心業務鍊路,确定鍊路中的所有接口和調用請求,确定請求調用方式(同步或者異步,順序或者并行)、參數等;

所謂業務鍊路就是使用者的操作行為,核心鍊路就是分析所有使用者操作的行為,确定的一條主鍊路,比如天貓雙11,使用者在淘寶的操作行為非常多,那麼我們壓測主要關注11号0點時最大的壓力來自于哪些行為?通過分析就可以确定0點的主要行為就是:打開購物車->進行結算->打開收銀台->選擇優惠券、支付方式->支付->下單後置處理。這就是我們壓測的核心鍊路,是通過日志和使用者行為分析可以得出。

确定核心鍊路的一個關鍵就是不要貪多,覺得使用者可能會操作這裡,也可能操作那裡,把一些低頻的操作也加傳入連結路,就會拖累核心鍊路。雙11零點隻保障核心鍊路,非核心的操作都會降級處理,比如0點打開訂單頁就會看到一行提示“隻能查詢最近三個月訂單,其他訂單20分鐘以後再查”,這就是對訂單進行了降級處理,避免查詢資料太多占用過多資源,更多資源投入核心鍊路。

場景仿真度因子包括:核心鍊路的完整度、準确度、系統可測度

壓力仿真度(P):

壓力仿真度是指壓測負載參數,包括壓測模式(并發模式或者TPS/TPM目标模式)、并發數或者TPS目标數、集合點配置、thinktime設定、預熱時長、壓測時長等;

選擇哪種壓測模式是根據我們的壓測目的決定的,這是我們整個壓測能否達到目标的核心。

并發壓測模式:适用于已知大概并發的壓測場景,比如預計系統有10萬使用者通路,這10萬就是極限并發,還需要進一步分析10萬使用者是集中通路,還是分散通路,

估算多長時間内會達到10萬使用者。如果10萬使用者會集中通路,比如秒殺、搶購類的場景,這樣我們就需要設定10萬并發,進行集合點壓測。如果是1天内累計有10萬使用者通路,那麼可以按照二八法則設定并發進行壓測。

TPS目标壓測模式:TPS即每秒鐘請求量,也可以叫吞吐量。适用于背景接口類的場景,跟并發沒關系,關注的是接口的吞吐量。比如接口設計最大TPS是10萬,那麼我們就可以直接用目标模式,設定TPS為10萬,不需要設定并發,壓測系統會根據目标TPS自動變化并發,如果壓測系統檢測到TPS到了10萬,壓力會保持不變,持續壓測。如果目标TPS達不到,壓測系統會提示系統不達标。

壓力仿真度因子包括:并發數、TPS目标數、集合點并發數、thinktime

全鍊路壓測案例分享

新東方續班體系全鍊路壓測方案

一、續班體系介紹

全鍊路壓測最佳實踐

續班體系業務鍊路調用較複雜,同時業務邏輯校驗相對較多,其不僅需要驗證帳号和對應學員的有效性,同時需要校驗班級各種屬性,以及在目前時段内續班規則校驗和實時計算報班的最優優惠,最終完成訂單操作;

二、壓測場景

· 确定壓測鍊路

根據系統調用量和使用者操作行為,梳理核心業務場景,确定相關的系統服務和接口

全鍊路壓測最佳實踐

· 壓測通道建設,解決壓測流量和資料的隔離

續班鍊路壓測場景基于生産真實環境實作,是以我們需要考慮進行真實資料和壓測資料有效隔離,防止壓測資料污染生産環境

實作方式:通過增加header辨別進行壓測流量标記,同時将壓測辨別透傳關聯業務系統并處理,通過壓測标記過濾部分規則(如時間範圍和名額等資訊),保證壓測資料業務正常流轉且盡最大程度覆寫業務邏輯;根據辨別區分壓測流量和生産真實流量;

全鍊路壓測最佳實踐

三、壓測資料

壓測場景主要覆寫兩種壓測資料:一類是通過測試帳号自動構造的資料(班級和規則均是直接使用生産真實資料);一類是通過資料抽取的方式擷取真實使用者流量資料進行真實流量回放;

鍊路相關資料主要涉及登入帳号、學員、班級,以及相應的業務規則和優惠規則;

· 對于正常續班體系性能驗證,以及新服務上線,推薦使用曆史資料,來壓測指定的業務場景和服務;(規則為曆史資料不是目前最新規則資料)

· 對于續班視窗期真實流量模拟性能能力驗證,推薦使用真實流量,壓測結果性能回報更接近真實情況;(規則為目前有效資料資料業務仿真度較高)

· 針對業務鍊路壓測覆寫不同的場景,需評估選擇構造不同的壓測資料

(1)基中繼資料

包括登入帳号、學員;

· 登入帳号:生産環境預留維護了約6萬+測試帳号,供線上壓測和其它業務測試使用;平台基于測試帳号可根據項目按需統一配置設定和回收;

· 學員:虛拟學員和真實學員;虛拟學員即為測試帳号對應的虛拟學員,通過姓名以及帳号綁定與真實學員資料隔離;真實學員:生産環境真實報班生成的學員資訊;

實作方式:基于不同的壓測場景以及業務鍊路,可自定義申請壓測帳号;根據業務壓測結果回報,引導任務完成後實作測試資料清除以及帳号統一回收;

全鍊路壓測最佳實踐

(2)業務型資料

· 班級:支援使用真實班級資訊;基于業務鍊路實作資料一鍵構造完成;

· 業務規則:包括續班規則和優惠規則;通過壓測辨別實作續班壓測鍊路自定義指定時間段内有效規則;

· 鍊路資料:通過基礎資料和業務規則資料進行模拟業務操作,實作續班鍊路壓測資料構造;支援任務排程中心一鍵/定時自動觸發資料構造;

全鍊路壓測最佳實踐

(3)壓測資料清洗初始化

壓測任務結束後,平台自定義清洗壓測資料,基礎資料初始化回收;

根據業務邏輯,對業務資料清洗(如:購物車資料);

基于使用者服務業務針對配置設定的帳号是否解綁業務資料,最後回收并初始化帳号資料;

全鍊路壓測最佳實踐

四、壓測負載

通過分析生産流量和系統性能表現,我們得出了續班鍊路壓力模型和并發配比。

· 基于續班鍊路日志各業務調用峰值以及占比,定位續班鍊路壓測覆寫範圍,同時定位鍊路中業務并發點;

通過日志調用量以及業務實際抓包形式,确定續班鍊路業務調用以及業務上下遊調用範圍;

根據業務實作調用設計集中并發場景,實作模拟并發配比趨于真實流量請求;

全鍊路壓測最佳實踐

· 基于各續班視窗期訂單資料詳情,分析定位續班期訂單資料占比;

通過訂單詳情統計分析訂單中報班占比,構造并生成按統計彙總的實際占比的壓測資料;

根據彙總統計訂單占比結果,實作按該占比設計壓測場景,實作模拟并發配比趨于真實流量請求;

全鍊路壓測最佳實踐

· 真實加購資料全量模拟

為保證每次大流量續班業務性能,實作了全量拉取參與續班期的購物車資料;

根據真實加購資料設計壓測場景,完成真實加購續班資料瞬時并發性能評估,同時為各節點擴容方案提供參考資料;

基于訂單資料的壓測場景并發配比表:

全鍊路壓測最佳實踐

五、壓測自動化

基于線上真實調用業務流量,設計基線壓測場景,以任務排程的方式自動觸發壓測任務執行,并完成測試結果收集,同時對目前壓測結果與上一輪壓測結果進行對比,出現性能偏差則給出郵件或釘釘提示

整體性能基線建設基于任務排程中心觸發任務的方式實作:

· 資料自動構造:通過任務方式在執行基線場景前,自動完成壓測資料構造,并引用至壓測場景中進行資料關聯;

· 壓測場景試運作:由于壓測場景複雜性,是以完成資料構造後,自動實作壓測場景試運作,目的驗證場景業務鍊路調用是否正常,同時驗證壓測資料是否有效可用;

· 自定義任務:在建立基線過程中,根據業務調用需求,可自定義增加任務,如:壓測場景中資料預熱等;

· 基線任務執行:支援手動和定時兩種方式完成基線壓測場景執行;

· 壓測結果對比評估目前系統性能可能存在的問題并消息通知相關負責人,目前支援郵件和釘釘通知兩種方式;

全鍊路壓測最佳實踐
全鍊路壓測最佳實踐

全鍊路壓測平台建設

一、系統架構

全鍊路壓測最佳實踐

二、功能簡介

· 實作功能

· 支援HTTP/HTTPS協定,支援線上建立腳本、調試腳本;

· 壓測資料構造一鍵生成;

· 壓測模組化設計靈活;

· 施壓機統一管理維護;

· 測試過程實時監控及預警熔斷;

· 測試結果報表聚合彙總歸檔支援建立性能基線庫;

· 基于任務排程建立項目基線任務監控系統性能;

全鍊路壓測最佳實踐
全鍊路壓測最佳實踐
全鍊路壓測最佳實踐

作者:鄭懷甯

來源:微信公衆号:新東方技術

出處:https://mp.weixin.qq.com/s/D-IHkFjidhh4JaWFpPzTGA