系統穩定性保障核武器——全鏈路壓測

摘要: 阿里巴巴雙11備戰期間,保障系統穩定性最大的難題在於容量規劃,而容量規劃最大的難題在於準確評估從用戶登錄到完成購買的整個鏈條中,核心頁面和交易支付的實際承載能力。在首屆阿里巴巴中間件技術峰會,阿里巴巴中間件高級技術專家張軍為聽眾詳細講解了系統穩定性保障的核武器——全鏈路壓測。

為什麼要做全鏈路壓測?

對阿里巴巴而言,每年最重要的一天莫過於雙11。這是因為在雙11的零點,系統會遭遇史無前例的巨大洪峰流量衝擊,保證雙11當天系統的穩定性對高可用團隊來說是巨大的挑戰。在這個挑戰中會有很多不確定因素,大致分為兩方面:

  • 技術架構帶來的不確定性,阿里在08年開始對系統進行拆分,由原有的單一系統拆分成了分散式架構,包括CDN、網關、負載均衡、分散式頁面系統等,整體的技術生態十分豐富。分散式環境任意環節出了問題都可能會對系統造成影響;
  • 業務發展帶來的不確定性,系統的可用性隨著業務增長,面臨更嚴峻的挑戰和不確定性。

不確定性帶來的系統可用性問題

這些不確定性背後的因素多種多樣,既涉及系統容量、業務性能,又涉及基礎設施瓶頸、中間件瓶頸和系統之間的依賴影響,並且眾多因素缺乏有效的驗證手段。事實上,阿里從10年開始就在嘗試去解決雙11零點的穩定性問題。

線上單機與單系統壓測

最初採用的方式是在線上單機的生產環境的壓力測試和容量規劃,主要採用了四種方式:第一在開始階段模擬調用者,其中在生產環境中只能模擬只讀請求,對寫請求需要特定的處理;第二種方式是採用流量錄製和回放的方式做壓力測試,通過將錄製的流量快速率回放對單台機器進行壓測,獲取單台機器的服務能力;後兩種是從流量分配的角度出發,分別是請求流量轉發和改變負載均衡的權重,兩者核心思想都是將流量集中到某台機器上。通過上述機制和手段,能夠準確探測到單台機器的服務能力。基於單台服務能力和預估即將到來的業務流量進行容量規劃,確定所需伺服器的數目,這種做法伴隨著阿里度過了10、11、12三年的雙11零點穩定性的考驗。

單系統壓測的問題

但10和11年雙11零點由於流量過大暴露了不少問題,讓我們意識到單個系統ready不代表全局ready,究其根本原因在於系統之間相互關聯和依賴調用之間相互影響。在做單個系統的容量規劃時,所有的依賴環節能力是無限的,進而使得我們獲取的單機能力值是偏樂觀的;同時,採用單系統規劃時,無法保證所有系統均一步到位,大多數精力都集中核心少數核心系統;此外,部門問題只有在真正大流量下才會暴露,比如網路帶寬等等。

全鏈路壓測-站點穩定性保障最有效的解決方案

隨著業務的快速增長和系統穩定性弊端的暴露。阿里從13年雙11起就著手進行全鏈路壓測。

全鏈路壓測的本質是讓雙11零點這一刻提前在系統預演(用戶無感知),模擬「雙11」同樣的線上環境、用戶規模、業務場景、業務量級,之後再針對性地進行系統調優,是站點的一次高模擬模擬考試。

全鏈路壓測核心要素主要包括四點:

  • 壓測環境,它是指具備數據與流量隔離能力的生產環境,不能影響到原有的用戶體驗和用戶流程、BI報表以及推薦演算法等;
  • 壓測基礎數據,它主要包括壓測用戶、店鋪、商品等基礎數據;
  • 壓測場景模型,它主要是指壓測哪些業務場景,每個場景下壓測多大量等;
  • 壓測流量,它主要由壓測請求的協議來決定壓測流量的輸出;

下面來一一詳細介紹這四大核心要素:

壓測環境

由於是在生產環境做雙11的全鏈路壓測模擬,因此防止壓測數據和流量污染和干擾生產環境是及其重要的。要實現這一目標,首先要求壓測流量能被識別,採用的做法是所有的壓測流量都帶有特殊的標記,並且這些標記能夠隨中間件協議的調用關係進行傳遞;此後,應用系統根據標記識別壓測流量;在緩存和存儲時,通過存儲和緩存過濾器將壓測數據存儲到影子區域(表)而不是覆蓋原有數據。上述所有操作都遵循一個原則:能夠用中間件解決的問題,絕不對業務系統進行改造,系統所需做的是升級中間件,這一原則極大提高了工作效率。

壓測基礎數據&壓測場景模型

在壓測基礎數據方面,為了保證真實性,實現與真實雙11零點的數據匹配,我們直接從線上用戶的數據(剔除敏感信息)進行篩選,同時確保用戶規模與雙11零點的真實用戶數量一致。

基於用戶數據構建壓測模型是全鏈路壓測中較為複雜的一步,它要求壓測模型貼近雙11零點的用戶模型。我們根據前幾年的歷史數據和行為,結合預測演算法進行模型的預估;最後生成業務場景模型;這些模型再和各個業務系統的負責人研討,進行微調。根據最後確定的壓測業務模型構造壓測請求數據,最後將請求數據上傳到壓測平台,發出壓測請求,模擬雙11。

壓測流量平台整體結構

上圖是壓測流量平台的整體結構,主要分為三個部分:最上層是Master端,主要用於壓測數據、壓測場景和壓測執行的配置和控制,並且其還負責壓測引擎的任務分配和調度,以及一些容災策略,最後Master端還需要對壓測性能監控、分析,最後生成壓測報告。中間部分是壓測引擎,目前採用的是阿里自主研發的壓測引擎,部署於全球各地的CDN節點上(出於用戶場景的真實性)。最下層是性能探測與監控集群,在壓測過程中需要實時探測各個業務系統的運行狀態以決定壓測是否繼續進行。

壓測流量平台挑戰

在實際進行全鏈路壓測時,壓測流量平檯面臨了一系列的挑戰:首先需要面對T級別的壓測請求數據;其次要滿足每秒1000W+次請求壓測能力;此外,需要能夠維持1億+的無線長連接和登陸用戶;並且壓測流量平台應該能夠靈活操作,體系聯動;在擴展性方面,需要支持自定義協議和流程;最後,平台應該做到秒級的智能數據調度和引擎調度能力。

壓測流量平台技術選型

最初做全鏈路壓測時,嘗試採用瀏覽器引擎去做,但由於Rhino引擎不兼容主流瀏覽器;後來換成了Selenium+ChostDriver+PhantpmJS,這種方式能夠真實模擬用戶的環境,但性能上不去,要完成壓測成本太高;再後來,我們嘗試了一些第三方的壓測工具如Jmeter、Grinder、Tsung、Gatling等,但由於性能和擴展性方面的原因,被迫放棄;最終,我們採用了自實現引擎和操控中心來進行搭建壓測流量平台,實現性能、兼容性、擴展性全方位Cover。

壓測流量平台——壓測引擎

如上圖所示,壓測引擎自下而上分為協議支持、請求發送、集群協作三層:

  • 協議支持,主要支持的PC端協議包括Http、Https、websocket,無線端協議是Spdy、http2、accs、acds、mqtt。由於真正在雙11時,用戶使用的瀏覽器各異,進而導致與服務端協商的加密演算法不一致,為了盡量模擬準確性,需要支持SSL 2.03.0、TLS1.01.11.2不同演算法套件靈活配比,貼近用戶端行為。
  • 請求發送,由於全鏈路壓測是利用現有的CDN集群,為了不影響現有CDN業務的正常運轉,需要做Cgroup資源隔離(主要包括CPU和網路),為了實現性能最優,通常採用非同步Reactor模型發送請求,鏈路間線程池隔離。
  • 集群協作,控制中心Master充當大腦來發送指令,所有節點根據收到的指令執行下一步操作,並且所有slave壓測節點會實時將自身狀態同步到Master,以便於其做決策,如果slave節點狀態不好,master則將其剔除。如果壓測引擎與控制中心失聯,則壓測引擎會自殺,避免流量浪費。

壓測引擎從上往下的優化歷程包括:系統層的TCP參數調優;在JVM層,優化SSL庫;在網路響應時,邊讀邊丟,減少損耗;數據結構上盡量採用無鎖的數據結構,即便是有鎖,也要避免在鎖里進行比較耗時的操作;在處理流程上,盡量採用非同步化,緩衝隊列銜接,避免非同步飢餓;上層調度時,引擎之間根據負載動態調度,提高整體吞吐量。

全鏈路壓測在阿里巴巴

目前,在阿里內部,全鏈路壓測主要用於以下四種場景:

  • 新系統上線:全鏈路壓測用於新系統上線,準確地探知站點能力,防止一上線就被用戶流量打垮;
  • 峰值業務穩定性:通過全鏈路壓測對類似於阿里雙11的峰值業務穩定性進行考驗,保障峰值業務不受損;
  • 站點容量規劃:通過全鏈路壓測技術對成本進行優化,對站點進行精細化的容量規劃;
  • 性能瓶頸探測:全鏈路壓測還可以用於探測站點的性能瓶頸,提升站點的整體服務能力和吞吐量。

在阿里內部,單鏈路(業務線)壓測每年有10000+次;全鏈路壓測每年在10次左右,包括38大促、618大促、雙11、雙12大促等,其作為大促穩定性最重要的「核武器」,通過對網路、應用、中間件、DB、基礎服務、硬體設施、預案等全方位大促演練驗證,覆蓋阿里集團各Bu業務線,確保大促活動的高穩定性;此外,阿里還將這種全鏈路壓測複製到優酷土豆、高德、友盟+等收購公司中。

雙11全鏈路壓測現場

上圖是雙11全鏈路壓測的現場照片,雙11全鏈路壓測階段除了對系統穩定性進行檢測之外,還對團隊的人員組織、協作進行了演練、檢驗,確保雙11零點到來時,萬事俱備。

全鏈路壓測給雙11帶來的最大的改變是穩定性,從13年起,雙11零點的穩定性較11、12年得到了大幅提升,這是因為在全鏈路壓測過程中,每年都能發現幾百個問題並提前解決,極大地提高了零點的穩定性。

全鏈路壓測帶來的另一大改變就是成本:

  • 機器成本,全鏈路壓測拉平了系統間的水位,同樣數量的機器提供了更大業務吞吐量,通過探測系統瓶頸點,進行針對性優化,補齊了「木桶」的短板,從未提升站點性能。
  • 人力成本,在進行全鏈路壓測之前,幾百個系統的容量規劃工作需要幾十人耗時3個月;在全鏈路壓測之後,通過壓測動態調整資源,既省時省力,又更加精準,人力成本大幅衰減。

全鏈路壓測平台

目前,全鏈路壓測與阿里雲PTS產品進行了融合,生成新版本PTS(企業鉑金版)。該版本包含全鏈路壓測的流量功能,從全國各地CDN發起流量;且具有超大並發與TPS(千萬級)的壓測能力;在壓測時獨享壓測資源以及更豐富的壓測配套;此外,新版本PTS還對外提供壓測解決方案服務,滿足客戶同阿里一樣的全鏈路壓測需求。

原文鏈接:系統穩定性保障核武器--全鏈路壓測-博客-雲棲社區-阿里雲

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

推薦閱讀:

日新進用戶200W+,解密《龍之谷》手游背後的壓測故事
音效卡可以採集力嗎?

TAG:「双十一」购物狂欢节 | 集群 | 压力测试 |