全鏈路壓測探索實踐之路

背景

去年雙十一,爲了應對零點的峯值流量衝擊,咱們在八月下旬啓動了全鏈路壓測第一次實踐。因爲從零開始,所以單獨搭建了一套和生產1:1的環境,2個月的時間,光環境成本就高達幾百萬。html

通過雙十一,壓測團隊從中汲取了很多的經驗和教訓。雙十一以後,在CTO的指導下和支持下,由基架和性能測試團隊快速的投入了全鏈路壓測平臺的研發當中。mysql

而且趁着核心系統重構,快速的接入落地,對後續的系統穩定性保障工做,邁出了堅決地一步。redis

 

流程導圖

image.png

 

梳理階段

一、系統服務梳理sql

全鏈路壓測是一個很複雜的工程,其中涉及到多個服務。對整個業務系統進行梳理,確認流量傳遞的上下游和範圍,是首先要作的事情。mongodb

二、核心鏈路梳理安全

什麼是核心鏈路?如今來看,依然是一個艱難的選擇。壓測團隊在梳理核心鏈路時,主要從以下幾方面來評估:網絡

1)是不是高頻訪問業務;框架

2)是不是強依賴的核心環節;elasticsearch

3)是否直接影響生產的交易業務;分佈式

4)參考生產實際的QPS指標爲維度;

三、外部依賴梳理

肯定核心鏈路後,要對其外部依賴進行進行梳理(好比第三方支付)。因爲全鏈路壓測在生產環境進行,所以須要對外部依賴進行mock處理,避免對生產服務形成影響。

四、中間件梳理

爲了不壓測流量對生產形成影響,產生髒數據,須要對整個流量傳遞過程當中涉及的中間件進行梳理,讓壓測流量透傳落影子庫。

壓測流量模擬在請求網關接口時候在header中帶上:x-infr-flowtype=PT,各個中間件路由邏輯以下:

mysql:影子庫;

redis:影子key,前綴ptshadow_;

mongodb:影子collection,前綴ptshadow_;

kafka:不分topic,下游路由會進行相應路由;

rocketmq:不分topic,下游路由會進行相應路由;

hbase:影子namespace,前綴ptshadow_;

elasticsearch:影子索引,前綴ptshadow_;

分佈式鎖fusion-distributed-locks:影子key,前綴ptshadow;

 

準備階段

一、接入fusion框架

全鏈路壓測基於fusion,全部中間件和規範必須按fusion統一規範使用。

二、流量模型梳理

流量模型,也能夠稱之爲流量漏斗。即外部流量從網關入口開始,在每一個調用鏈路上的變化比例。

三、mock模塊配置

對於外部依賴調用的鏈路,經過mock手段,進行對應的處理。

四、影子中間件創建

在梳理階段對全部的中間件梳理完成後,便可根據規範進行對應的中間件創建。

五、測試環境驗證

完成上述步驟,須要在測試環境驗證mock配置、流量標數據落影子庫的正確性。

六、仿真環境驗證

測試環境驗證經過後,接入仿真環境,進行聯調驗證,確保沒問題,才能開始進入壓測階段。

 

預熱階段

一、測試用戶生成

因爲全鏈路壓測的特殊性,所以須要造一批專門用來壓測的user數據。

二、測試數據準備

測試數據包含基礎數據和參數化數據(壓測請求傳參所用),咱們的解決方案是經過定時的job來遷移生產數據並進行脫敏。

三、外部服務關閉

因爲全鏈路壓測的特殊性,所以在壓測開始前,都會對外部服務進行服務註冊下線,保證壓測的流量不會影響生產業務。

四、分支代碼發佈

全鏈路壓測是須要進行多輪的,這個過程當中每次優化均可能涉及到代碼變動,所以在壓測開始前,須要確認最新的優化代碼分支發佈到了仿真環境。

五、網絡隔離檢查

一樣,因爲環境的特殊性,壓測前須要對各服務的隔離狀況進行確認,避免影響生產業務。

 

實施階段

一、單機單接口基準

單機單接口的基準壓測是必不可少的環節。經過單機單接口壓測,能夠快速排查出被測鏈路自己的性能問題,這樣有助於後續全鏈路壓測的開展和性能瓶頸定位排查。

二、單機混合鏈路

混合鏈路壓測的目的,在於驗證被測服務自己的最大容量和安全水位,爲全鏈路壓測以及上線容量評估,提供參考依據。

三、全鏈路壓測演練

全鏈路壓測,是互聯網企業系統穩定性的重要保障手段。

四、脈衝摸高測試

摸高壓測,目的是爲了驗證當前系統的最高性能表現,便於評估線上擴容,留有冗餘空間。

五、限流功能演練

限流熔斷,是服務可用性的重要保障手段。咱們採用的技術框架是sentinel集羣限流功能,並對單機、集羣限流功能進行了演練,確保功能的可用性。

 

總結回顧

關鍵詞:對技術&業務保持敬畏!

 

原文出處:https://www.cnblogs.com/imyalost/p/12524078.html

相關文章
相關標籤/搜索