前言
前面的幾篇文章介紹了全鏈路壓測準備階段的很多事項,包括核心鏈路梳理、構建壓測模型、容量評估和容量規劃,大多都是研發和運維同學負責的事情。
那麼全鏈路壓測在準備階段,測試同學要做哪些事情呢?以我個人的實踐經驗來說,全鏈路壓測在準備階段,測試同學要做的事情主要有如下幾點。
環境準備
一般來說,需要準備如下三套環境。環境準備階段,大體的工作事項和分工如下:
功能驗證環境
功能驗證環境即用來驗證技術元件本身的功能正確性和接入效能損耗的環境,有獨立的隨時可用的環境最好。
如果考慮到成本,也可以用線下效能環境來進行驗證。實踐經驗來說,功能驗證階段,要做的事情核心有如下幾點:
- 能否快速接入;
- 壓測標記是否完整的透傳到了資料庫表;
- 資料落庫或者讀庫的路由邏輯是否正確;
- 下游或外部呼叫是否都被mock擋板過濾;
- 採用自動化的方式快速驗證介面鏈路是否正常;
- 梳理的業務場景和測試場景是否都匹配了接入的業務範圍等;
- 接入前後對業務應用以及中介軟體的效能損耗是否在可接受範圍內;
線下效能環境
如果未經基礎的測試就直接在生產環境開展全鏈路壓測,風險和問題排查成本都是很高的。
線下效能測試環境的作用如下:
- 滿足日常的版本迭代和技術優化效能驗證需要;
- 生產壓測前的單機單介面和單機混合鏈路壓測驗證;
- 為生產壓測叢集的資源擴容提供容量評估的參考依據;
生產壓測叢集
因為全鏈路壓測都是在生產環境進行,壓測的目的也是為了滿足未來某個時期業務活動的需要,因此需要提前評估準備資源。
這裡的資源指的是擴容的資源,而非單獨重新搭建環境的資源。一般需要準備的資源如下:
- 頻寬資源;
- CDN資源;
- 應用資源;
- 快取資源;
- M Q資源;
- 簡訊資源;
- D B資源;
資料準備
全鏈路壓測過程中,涉及的資料以及職責分工如下:
鋪底資料
鋪底資料可以簡單理解為冷資料,因為SQL執行過程中,空表和大表對效能的影響還是很大的。
準備鋪底資料,還要根據具體的資料隔離技術實現方案來看,分為如下2方面:
- 正式表:如果資料隔離方案採用的是讀寫業務表,那無須準備鋪底資料。但壓測產生的資料需要通過特殊欄位來做標識處理,避免對業務造成影響。
- 影子表:如果採用的是影子表方案,常見的做法就是將涉及到的庫表資料按需按量同步到影子表並進行脫敏。
- 影子庫:影子庫的資料鋪底資料準備方案和影子表類似,但要考慮的一點是:因為影子庫是正式庫是在同一個資料庫例項上,需要更多的硬體資源支撐,以及在引數配置上(如活躍連線數)需要進行一定調整。
熱點資料
為了避免壓測時瞬間的大流量對服務的衝擊,需要提前將這些熱點資料預熱到快取中。最典型的熱點資料莫過於使用者的登入態token了,其他還有類似秒殺活動的庫存資料、商品資訊資料以及優惠券等資料。
當然,熱點資料的預熱,需要根據具體的業務來制定預熱方案,而非單純的照著做。
引數化資料
引數化資料指的是壓測過程中指令碼中需要引用到的資料。以電商業務來說,常見的有使用者id,商品id,訂單id。
準備引數化資料的過程中,需要注意如下幾點:
- 資料的冪等性(是否可重複使用);
- 資料的關聯性(是否需要前置動作來更新狀態);
- 資料的有效性(資料需要在使用階段內一直生效);
- 資料的唯一性(資料在邏輯處理中僅且只有某些場景才可用);
資料可用性驗證
做完了上述的幾點資料準備工作,最後要做的就是對資料可用性進行驗證,看看它是否如預期滿足工作需要。
指令碼準備
指令碼開發
指令碼準備實際上是個很複雜的事情,因為要考慮到具體的業務場景和壓測鏈路。
我在實踐中的做法,一般遵循如下的過程步驟:
1、梳理核心鏈路(得到被測應用和涉及到的介面);
2、梳理流量模型(便於壓測過程中效能指標監控及流量模型配置);
3、劃分指令碼型別;
- 準備測試資料的指令碼(某些場景用到的資料需要通過前置動作才能產生);
- 單機單介面壓測指令碼(效能環境快速驗證介面維度的效能表現,快速發現效能瓶頸);
- 單機混合鏈路壓測指令碼(效能環境快速驗證應用維度的效能表現,調整流量配比,便於容量評估);
- 生產環境全鏈路壓測指令碼(生產環境壓測專用的壓測指令碼);
- 梯度增加指令碼(驗證生產環境的效能,發現效能瓶頸和拐點);
- 穩定性驗證指令碼(驗證生產服務叢集在長時間高負載情況下的穩定性);
- 資料狀態恢復指令碼(特殊業務場景下某些資料只能用一次,可以理解為一種資料回滾策略);
- 穩定性預案驗證指令碼(驗證限流、熔斷、降級等穩定性預案是否生效);
指令碼聯調
指令碼開發完成,接下來就是聯調工作。
聯調階段,除了要考慮環境因素,重點是驗證資料模型和流量模型是否匹配的問題。
壓測方案
編寫壓測方案的目的:同步資訊,打平資訊差,保持整體的壓測節奏一致,為下一階段工作做鋪墊。
- 背景和目的(通用內容);
- 業務和技術指標(統一目標,即使有臨時變更也能快速調整);
- 涉及範圍和鏈路(更細化的內容,需要和涉及的各團隊一一對齊);
- 壓測實施里程碑(生產壓測需要多輪,每輪次的目標和要做的事情);
- 壓測任務及進度(整體的壓測任務拆分以及當前進度,提前評估風險);
- 壓測模型和策略(類似功能測試過程中的case評審,查漏補缺的過程);