首頁/ 汽車/ 正文

螞蟻是如何做全鏈路壓測的

大家好,我是李哥。

進阿里以來一直聽說一句話:“沒有經過雙11峰值驗證過的技術都是玩具”。雖然有些誇張,但是不可否認的是,一年一度的雙11,是技術最好的孵化器,也是技術同學最嚮往的閱兵場。

上篇我們以全域性的視角聊完了大促:《面試官:如果你是大促技術負責人》。

接下來我們便開始展開技術細節。

今天主要聊一聊:

壓測

螞蟻是如何做全鏈路壓測的

什麼是壓測?

全鏈路壓測是以全鏈路業務模型為基礎,將前端系統、後端應用、中間適配層、DB等整個系統環境,完整得納入到壓測範圍中,以http請求為載體,模擬真實的使用者行為,在線上構造出真實的超大規模的訪問流量,以全鏈路壓測模型施壓,直至達到目標峰值,在壓測過程中發現系統瓶頸和驗證系統能力。

全鏈路壓測(Loadcenter)為企業提供涵蓋效能壓測、壓測報告輸出以及壓測風險防控的一站式壓測服務。結合公司多年的線上全鏈路壓測經驗,歷經幾代產品打磨,為您提供高模擬、低成本、高風險識別的線上壓測體驗。

全鏈路壓測支援模板化和自定義兩種指令碼模式,為您提供靈活、開放的指令碼框架,滿足不同複雜度的壓測需求。另外,該產品還具備自動化壓測報告輸出、效能基線分析、壓測風險防控等業界領先的壓測技術能力。

使用全鏈路壓測能夠幫助您發現業務系統的效能問題,為企業的系統性能評估、容量規劃、效能基線跟蹤等提供有力的平臺支撐。

為什麼要做壓測?

1、

瞭解你的系統

系統所能承受最大的壓力是什麼?

當前系統叢集的瓶頸是什麼?

系統的核心服務的最大QPS/TPS分別是多少?

核心鏈路的下游最大QPS/TPS是多少?

當服務在最大QPS/TPS水位線的時候,此時CPU的使用率是多少?磁碟的使用率是多少?

單機最大QPS/TPS是多少?叢集最大QPS/TPS是多少?

……

2、

保護你的系統

最佳化你的系統

保護下游系統

在《瞭解你的系統》後,你發現你的系統到處都是問題,比如:

壓測發現無效的日誌打太多導致日誌檔案實在是太大了

怎麼一個介面進行了好幾次序列化與反序列化,實在是太浪費cpu了

平時不會出問題的地方,出現了併發問題

發現下游口頭提供了1000qps,實際上壓測發現就200qps

……

誰去做壓測?

一般由:

系統owner

或某專案的技術同學owner或同項目組的技術同學

或大促活動參與者負責壓測模組的技術同學

……

什麼時候做壓測?

一般有:

大促前技術保障

日常壓測,效能最佳化,摸高

新專案上線,介面壓測,效能探索

……

如何做壓測?

這部分有點東西,請讓我們倒一杯咖啡,慢慢聊。

1、瞭解整體流程

螞蟻是如何做全鏈路壓測的

全鏈路壓測的整體流程包含系統改造、資料遷移、模型構建和施壓四個核心部分。

1。1、系統改造

系統改造的目的是:

讓壓測流量可以暢通無阻地走通整條鏈路。

(1)中介軟體升級到支援壓測標傳遞的版本,當前版本已都支援壓測標傳遞;

(2)部分安全邏輯繞過,壓測過程中URL會重複執行多次,針對csrf校驗等操作,對壓測流量繞過

(3)非同步執行緒切換導致的丟標改造,非同步執行緒切換時,上下文會丟掉,壓測標也會隨著上下文的丟失而丟失,因此需要在多執行緒切換中,將執行緒的上下文複製過去,保持壓測標傳遞下去

(4)影子表構建,在DB的庫表同步中執行影子表同步即可

1。2、資料遷移

資料遷移是為了將資料從線上表遷移到影子表中,一般首先遷移的是基礎資料及其關聯資訊,比如使用者資料,交易資料等,交易中是買家、賣家、商品這三者以及三者的關聯,具體遷移分為三步:

(1)資料遷移:將資料從線上表中讀出,寫入到影子表中

(2)資料關聯:被遷移資料,將其表中各個欄位資料關聯的其它表中的資料也要同步遷移,保障其資料的完整性

(3)資料脫敏:為防止影子資料汙染線上資料並保護線上資料安全,會對資料進行脫敏,脫敏的原理是在線上的資料上加上一個很大的值(線上資料增加N年也趕不上的值),總之,這樣做的目的是資料隔離,讓真實資料與壓測資料徹底隔離。

1。3、模型構建

模型構建的目的,主要是結合業務,設計預測出大促壓測模型,然後按照壓測模型組織壓測資料,構建出可執行的壓測流量。模型構建分為兩部分:模型設計和流量構建。

模型設計:模型設計的目的主要是將業務進行採集並抽象成可執行的壓測模型,並對各個子模型中的元素進行預測和設計,最終產生可以執行的壓測模型,模型預測和設計的過程如下圖所示。

螞蟻是如何做全鏈路壓測的

流量構建:流量構建的過程就是將影子資料按照不同的業務規則進行構建,其中包含優惠、資金、限購、購物車新增、URL構建等,最終的體現是包含各個業務屬性的url集合,配置上設定的QPS,形成壓測方案。

1。4、施壓

壓測控制和操作在壓測控制檯上執行,壓測控制檯上管理了很多的施壓引擎,可提供千萬級的壓測能力,將壓測方案推送至壓測控制檯後,壓測控臺會為壓測方案進行分配壓測引擎、上傳資料、登入、施壓操作,在壓測過程中可自由調節壓測量級,靈活方便,準確高效。

施壓過程中請持續關注系統告警!觀察系統資源使用情況!出現問題請立即執行預案!

2、瞭解壓測執行流程

全鏈路壓測執行的過程,主要分為以下5個步驟:

壓測方案配置

預跑

預熱

正式壓測

壓測結果

螞蟻是如何做全鏈路壓測的

2。1、壓測方案配置

壓測模型資料構建好後,會給模型中的各個場景按照大促目標配置好QPS,然後推送到壓測平臺,進行資料上傳。

你需要知道:

為什麼壓測

需要多少壓力機資源

壓哪些系統,哪些介面

單壓還是混壓

當前是多少

預期目標是多少

壓測過程中出現問題是否有預案

壓測策略(逐步加壓、脈衝、併發量等)

……

2。2、預跑

預跑一般安排在正式壓測前1~2天,按照模型的小比例壓測,主要目的是驗證模型資料的準確性和當前環境的可用性。

2。3、預熱

預熱的目的是將當前系統中的本地快取、分散式快取、DB快取等預熱到大促態,同時為防止核心應用在流量脈衝進來時,程式碼還沒有編譯,需要提前進行jit預熱,預熱的最終效果是讓應用的各級快取達到熱的狀態,在大促脈衝的瞬間快取能穩定執行。

2。4、正式壓測

正式壓測當天,會按照大促當天進行演練,全天無壓測執行,0點脈衝前一個小時執行提前批預案,而後在按照壓測策略執行壓測,一般會分為下面幾步:

1、0點脈衝:系統保持大促態,完全模擬大促峰值流量,0點脈衝值大促目標值,觀察各個系統表現

2、摸高:放開限流,將壓力抬高當前目標峰值的10%~20%,觀察系統的極限值,如果在這個範圍內還穩定,可以繼續往上加壓,一直到有系統扛不住為止

3、限流驗證:在摸高達到最高狀態後,生效限流,限制會大促目標峰值,檢視流量是否準確回到限流值,驗證限流效果

4、破壞性測試:在該階段,維持大促態峰值壓測,各業務系統執行其緊急預案,觀察這些預案對系統性能影響

2。5、壓測結果

整個壓測結束後,會組織各系統核心成員,進行壓測覆盤,講述當前系統中的瓶頸並給出後續修復計劃,所有系統瓶頸及其後續計劃覆盤完成後,將各個系統資料以及系統瓶頸彙總成壓測報告。

3、影子表執行原理

要在線上實現壓測,必回涉及到資料的讀寫,如果使用線上資料壓測,總會造成資料汙染,為避免該問題,引入影子體系,將壓測資料和線上資料隔離,並使壓測資料走的業務路徑和線上資料一致,保持壓測的有效性和真實性。

螞蟻是如何做全鏈路壓測的

如上圖所示,透過壓測標t=1,實現了壓測流量和線上流量的區分,影子標t=1透過URL中的biz_loadtest=1對映而來,然後附著在上下文中,在各個中介軟體中實現傳遞,最終落庫時,透過DB Proxy的判斷讀寫到影子表中。

總結

壓測,就像一袋袋沙袋堆積在一個正在行走打工人的肩上。沙袋就是流量模型,逐漸施壓,一袋兩袋三袋……,施壓的過程中你要持續觀察這個打工人的身體狀況怎麼樣,到底是肩膀先扛不住?還是腰部先扛不住?還是腿部先受不了?一旦他喊疼,你就要立即卸下這些沙袋,否則可能會影響他走路,也可能會讓他摔倒。

好了,今天我們就暫時先到這裡了,明天我們換個地方,接著大促這篇聊:

限流

。敬請期待!感謝閱讀~感謝關注~

相關文章

頂部