作者|肖武(追溯)
出品|阿里巴巴新零售淘系技術部
前言
▐ 全鏈路壓測誕生
全鏈路壓測誕生於2013年雙11的備戰階段,是基於過去多年的壓測和容量規劃領域的探索和積累創造出來的新的壓測方式。全鏈路壓測通過對應用系統進行改造使線上環境可以同時處理正常流量和壓測流量,以支持在線上環境進行不影響正常用戶訪問的集群讀寫壓測,獲得最真實的線上實際承載能力數據。
▐ 壓測提效探索
全鏈路壓測從誕生開始,在後續持續的演進中,有兩個重要的方向:一個是模型評估的精準化和智能化,另外一個方向是全鏈路壓測的提效。在過去的大促備戰中,每年都需要經歷較多輪的全鏈路壓測,系統才達到最終的狀態,整個過程的人員投入以及工作量還是比較大的。
在對全鏈路壓測中的問題進行復盤的時候,我們發現了大部分的問題其實並不是一定要在全鏈路壓測的時候才能發現,如果能夠提前進行較大流量的預壓測,大部分的問題都能發現和解決。因此壓測前置的想法提了出來,我們需要把業務資源驗收、上下游的依賴檢測、問題修復、限流兜底驗證等大量的穩定性驗證工作前置。我們總結了過去兩年為壓測提效的辦法:
階段一主要是進行預發環境的性能CI,我們通過在預發環境進行單機或者小集群的性能壓測,這種方式僅限於應用自身的單機性能的驗收,無法對上下游鏈路進行完整的驗收,且預發壓測結果,也無法推導線上環境的容量是否足夠。
階段二主要是利用線上小集群,通過中間件的隔離技術,搭建線上環境的小集群,基於這個小集群環境進行全鏈路壓測。但是這種方式也存在一些問題,比如環境準備比較耗時,另外因為環境比較小,壓測流量也比較小,導致一些底層的問題,或者大流量下才能暴露的問題無法發現,對線上環境的容量也無法驗收。
階段三我們嘗試了在線上環境進行較大流量的預跑,例如10%~30%目標流量的施壓,這種方式,能發現一些壓測模型的問題,但是和小範圍壓測一樣,一些大流量下才能暴露的問題無法發現。
▐ 線上整單機房壓測設想
過去的分階段嘗試,都是朝著一個目標:環境越接近真實線上環境,如果是直接線上的整機房最好,壓測流量越接近目標值,壓測效果最好。如果能把線上整機房直接拿來,按雙11的目標進行壓測,效果是最好的。於是我們確定了在白天態進行整機房,全流量的壓測的新目標。
針對這個目標,我們制定了白天進行全鏈路壓測的方案,我們給項目取了個名字:白加黑。先來介紹下什麼是白加黑,簡單點概括是: 白天把線上某個機房流量切零,然後在這個機房進行大促態全鏈路壓測,預案驗證,突擊演練,破壞性測試等,和夜間的全鏈路壓測進行互補。接下來介紹下具體的白加黑方案。
白加黑方案
▐ 前提條件
白加黑的方案,依賴系統多機房的部署模式,且系統具備容災切流的能力,即任意機房出現故障後,流量能快速的切換到其他機房。利用容災能力,通過切流這個操作,把某個機房流量切零,針對沒有流量的機房進行全鏈路壓測。目前淘系的核心應用基本全部實現多機房部署,從接入層->應用層>數據層,資源部署的示意圖如下:
針對多機房的部署架構,如果要在白天態進行整機房,全流量的壓測,我們要做到以下幾點:
**流量隔離&路由
**
我們在進行容災切流的時候,壓測流量需要能夠進入流量切零的機房,而且這些壓測流量只在切零的機房內,不會路由到其他的線上機房,我們需要實現以下幾點:
- 壓測機房的線上流量要切零(包括無線和H5流量),流量由線上其他機房承擔,依賴系統的容災能力。
- 壓測機房內的線上少量遺留流量需要糾偏到其他機房,避免這部分線上流量受到壓測影響。
- 壓測流量在目標機房內路由,不受已有的針對線上流量的路由規則影響,從統一接入層,到應用層,到數據層整條鏈路實現壓測流量機房內路由。
流量防逃逸
在對流量切零的機房進行大流量的全鏈路壓測時,我們需要避免這些壓測流量逃逸到線上其他機房,進而影響線上用戶,為此需要從接入層->應用層->數據層整條鏈路上進行一些改造,來防止壓測流量逃逸。
接入層對失敗的壓測流量不能FallOver到線上其他機房。
多機房部署應用調用下游如果出錯,壓測流量不能FallOver到其他機房。
線上流量優先
對於無法徹底隔離掉壓測流量和線上流量的系統,需要有保障線上用戶流量優先通過的能力,即出現流量超出預期的情況下,優先限流壓測流量,保障線上流量通過。
大促備戰提效
▐ 已實現能力
經過大半年的方案推進,目前我們已經實現白天切流壓測的全部基礎能力,併成功在大促中投入使用。
流量糾偏
針對核心多機房部署應用,開啟流量糾偏功能,在目標機房流量切零後,把遺留的線上流量糾偏至正確的機房,在應用層避免這些線上流量受到壓測影響。
自動化流量調度
針對多地域多機房部署模式,實現全自動化的機房間流量調度,在保證線上機房穩定的前提下,提供一個完整的機房可以用來驗收。
整套流量防逃逸,壓測流量封閉
實現了從接入層到應用RPC調用,到DB,消息,緩存的全套的壓測流量防逃逸的基礎能力,能夠實現在目標機房高壓態下,壓測流量封閉在目標機房內,不會對線上其他機房造成影響。
提前預案指定機房推送,模擬大促態
實現了服務端在白天實現大促態下預案的執行和恢復。
白天態的線上突襲演練
對流量切零的目標機房,進行了多次的突襲演練,包括突發脈衝流量,故障注入等。
▐ 備戰提效
2019年大促備戰中,通過多輪白加黑壓測,提前消滅了絕大部分阻塞性問題,類似往年雙促壓測期間的問題,90%在驗收前全部解決。大促全鏈路驗收壓測非常順利。最終2019年雙11系統也平穩度過。經此一役,白加黑已成為大促穩定性備戰又一利器。
未來展望
利用系統容災能力,實現線上某個機房流量清空,只允許測試流量訪問,在這樣一個純淨,真實的線上正式環境,除了全鏈路壓測,我們還可以做線上環境的預案驗證,功能預演,破壞性測試,中間件演練,極大擴充了穩定性相關的驗證,解決了預發環境驗證&演練的侷限性,同時也更真實。
今日話題
關於穩定性壓測,你遇到過什麼bug?
歡迎下方評論區分享~
We are hiring
淘系技術部依託淘系豐富的業務形態和海量的用戶,我們持續以技術驅動產品和商業創新,不斷探索和衍生顛覆型互聯網新技術,以更加智能、友好、普惠的科技深度重塑產業和用戶體驗,打造新商業。我們不斷吸引用戶增長、機器學習、視覺算法、音視頻通信、數字媒體、移動技術、端側智能等領域全球頂尖專業人才加入,讓科技引領面向未來的商業創新和進步。
請投遞簡歷至郵箱:[email protected]