【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选
責(zé)編 | 阿禿
阿里妹導(dǎo)讀:全鏈路壓測(cè)是阿里的首創(chuàng),我們將從工作內(nèi)容、操作過程、運(yùn)行總結(jié)等多個(gè)方向來介紹下阿里內(nèi)部典型電商活動(dòng)(如雙11準(zhǔn)備),以給大家展示一個(gè)完整的壓測(cè)流程,幫助更多的企業(yè)和用戶更好的完成性能測(cè)試。
前言
關(guān)于性能測(cè)試的重要性及必要性已經(jīng)是個(gè)老生常談的問題了,現(xiàn)分別從技術(shù)角度和業(yè)務(wù)戰(zhàn)略角度總結(jié)如下:
而性能測(cè)試的目的也就是為了解決大型營銷活動(dòng)中洪峰流量引起的系統(tǒng)表現(xiàn)不確定性,一個(gè)理想的營銷活動(dòng)周期應(yīng)該是有如下閉環(huán)流程:
PS:1和2之間再加一個(gè)步驟。環(huán)境改造和基礎(chǔ)數(shù)據(jù)準(zhǔn)備。強(qiáng)調(diào)必須在生產(chǎn)環(huán)境。
壓測(cè)環(huán)境準(zhǔn)備:需要復(fù)用真實(shí)的線上環(huán)境,壓測(cè)結(jié)果和問題暴露才都是最真實(shí)情況。可通過壓測(cè)流量全局識(shí)別、透?jìng)?#xff08;數(shù)據(jù)進(jìn)影子區(qū)域)。
基礎(chǔ)數(shù)據(jù)準(zhǔn)備:以電商場(chǎng)景為例,構(gòu)造滿足大促場(chǎng)景的核心基礎(chǔ)相關(guān)數(shù)據(jù)(如買家、賣家、商品信息),以線上數(shù)據(jù)為數(shù)據(jù)源,進(jìn)行采樣、過濾和脫敏,并保持同等量級(jí)。
可以看出,性能測(cè)試通過真實(shí)、高效的壓測(cè)方式進(jìn)行容量評(píng)估/瓶頸定位&解決,最終來保障活動(dòng)穩(wěn)定進(jìn)行;每一個(gè)環(huán)節(jié)的內(nèi)容都非常重要,以阿里雙11活動(dòng)為例,我們除了技術(shù)上的準(zhǔn)備、執(zhí)行、保障之外,還會(huì)有一些流程及分工細(xì)節(jié)。以下將逐一介紹。
關(guān)于流程及管理
阿里巴巴全鏈路壓測(cè)從2013年到現(xiàn)在也已經(jīng)是第7個(gè)年頭了,在這7年中間我們不斷的積累、總結(jié)、優(yōu)化進(jìn)步,從開始的200多人參與、通宵壓測(cè)的大規(guī)模全員項(xiàng)目活動(dòng)到后來僅僅幾個(gè)人白天壓測(cè)、更智能化的壓測(cè)方式,這樣一種大規(guī)模的項(xiàng)目活動(dòng),離不開有效的流程把控及分工管理。
阿里巴巴在多年雙十一大促保障——全鏈路壓測(cè)項(xiàng)目中,有著嚴(yán)格的流程把控及分工管理模式與經(jīng)驗(yàn),總結(jié)如下:
說明:該圖中時(shí)間點(diǎn)為模擬時(shí)間點(diǎn),僅做先后順序的參考。
好的流程規(guī)劃與管理,可以大大提升團(tuán)隊(duì)協(xié)作效率。疊加上工具平臺(tái)的智能化功能,可以將參與的200人力通宵壓測(cè)縮減至10人以內(nèi)白天壓測(cè),有效的方案 + 充足的準(zhǔn)備 + 靠譜的平臺(tái)技術(shù)產(chǎn)品 = 成功的壓測(cè)。
下面將結(jié)合主題系列前幾次的文章,介紹下在數(shù)據(jù)準(zhǔn)備、架構(gòu)改造、流量安全策略(環(huán)境及流量隔離)、壓測(cè)實(shí)施、問題定位分析這幾方面,阿里巴巴在雙十一壓測(cè)這個(gè)項(xiàng)目上具體是怎么做的。
壓測(cè)環(huán)境改造
數(shù)據(jù)準(zhǔn)備的同時(shí),需要考慮壓測(cè)環(huán)境(即壓測(cè)對(duì)象的部署環(huán)境)是哪里,不同環(huán)境就需要做不同的準(zhǔn)備。
整個(gè)阿里經(jīng)濟(jì)體的壓測(cè)環(huán)境,包括雙十一壓測(cè),全部選擇的是線上環(huán)境,此時(shí)需要評(píng)估如果要進(jìn)行全鏈路壓測(cè),是否直接可以使用現(xiàn)有環(huán)境、同一個(gè)API多次壓測(cè)是否會(huì)被攔截、是否會(huì)有臟數(shù)據(jù)影響、如果有影響應(yīng)該如何改造避免等。以上這些問題總結(jié)下來即為兩類問題:業(yè)務(wù)問題和數(shù)據(jù)傳遞問題。問題比較明確,我們就根據(jù)這兩類問題來做逐一的改造。
改造分為2方面:業(yè)務(wù)改造和中間件改造,這些在內(nèi)部全鏈路壓測(cè)1.0 時(shí)代就已經(jīng)完成了,對(duì)于外部客戶來說,可以作為一個(gè)技術(shù)改造上的參考點(diǎn)。同時(shí)我們已經(jīng)有成熟的產(chǎn)品化方案提供一站式的能力,免去復(fù)雜的改造和維護(hù)成本。
業(yè)務(wù)改造
業(yè)務(wù)改造即為了解決壓測(cè)過程中的業(yè)務(wù)異常問題,或者壓測(cè)請(qǐng)求無法正常被執(zhí)行的問題。舉例如下:
流量區(qū)分與識(shí)別:壓測(cè)流量和業(yè)務(wù)流量的區(qū)分,并可在全鏈路系統(tǒng)中識(shí)別出來;
流量單一性問題:比如下單,同一個(gè)人執(zhí)行一次下單后再重復(fù)執(zhí)行就會(huì)失敗;
流量的限流攔截:如果日常有限制,需要改造為接入流量降級(jí)能實(shí)時(shí)生效調(diào)整配置;
剔除壓測(cè)數(shù)據(jù)對(duì)報(bào)表的影響
動(dòng)態(tài)校驗(yàn)
......
業(yè)務(wù)改造涉及的內(nèi)容無法一一窮舉,需要根據(jù)不同的業(yè)務(wù)模型、業(yè)務(wù)架構(gòu)及配置,一一梳理。一般梳理改造之后,后續(xù)所有新應(yīng)用都按照規(guī)范去開發(fā),每年的壓測(cè)前進(jìn)行基礎(chǔ)的查漏補(bǔ)缺即可。
中間件改造
中間件作為銜接業(yè)務(wù)應(yīng)用之間的組件,在壓測(cè)中有個(gè)至關(guān)重要的功能就是將流量標(biāo)識(shí)傳遞下去,一直到最終的數(shù)據(jù)庫層面。雖然我們?cè)?3年開始,從核心應(yīng)用使用到的中間件已經(jīng)升級(jí)改造完成,中間我們踩過不少坑,諸如改造全面性、改造帶來的業(yè)務(wù)代碼修改成本、版本兼容問題等。
改造完成之后,壓測(cè)流量的模型圖可以參考如下:
環(huán)境的改造,需要結(jié)合業(yè)務(wù)場(chǎng)景具體分析、設(shè)計(jì)。云上高可用解決方案,提供了全鏈路壓測(cè)解決方案的服務(wù)。
數(shù)據(jù)準(zhǔn)備
大促活動(dòng)確定之后,會(huì)對(duì)業(yè)務(wù)模型進(jìn)行一次評(píng)審,即確定該業(yè)務(wù)模式對(duì)應(yīng)的技術(shù)架構(gòu)應(yīng)用有哪些,需要做壓測(cè)的業(yè)務(wù)范圍有哪些、以及數(shù)據(jù)量級(jí)、數(shù)據(jù)形式是什么樣的。所以數(shù)據(jù)準(zhǔn)備包括準(zhǔn)備業(yè)務(wù)模型數(shù)據(jù)和壓測(cè)流量數(shù)據(jù)兩部分。
數(shù)據(jù)的準(zhǔn)備,主要分為兩部分:業(yè)務(wù)模型的建立和基礎(chǔ)數(shù)據(jù)的構(gòu)造。
業(yè)務(wù)模型數(shù)據(jù)
業(yè)務(wù)模型數(shù)據(jù),即壓測(cè)的業(yè)務(wù)模型相關(guān)的數(shù)據(jù),包括涉及到哪些API,這些API之間的壓測(cè)量級(jí)是什么樣的或者有什么樣的比例關(guān)系等。業(yè)務(wù)模型的構(gòu)造準(zhǔn)確度,直接影響了壓測(cè)結(jié)果的可參考性。
模型設(shè)計(jì)的目的主要是將業(yè)務(wù)進(jìn)行采集并抽象成可執(zhí)行的壓測(cè)模型,并對(duì)各個(gè)子模型中的元素進(jìn)行預(yù)測(cè)和設(shè)計(jì),最終產(chǎn)生可以執(zhí)行的壓測(cè)模型。在雙十一大促前,我們會(huì)確定好相關(guān)的業(yè)務(wù),進(jìn)行場(chǎng)景分類。
已有業(yè)務(wù)場(chǎng)景:采集以往數(shù)據(jù)并做處理,作為預(yù)測(cè)數(shù)據(jù),形成一個(gè)模型雛形,結(jié)合新的業(yè)務(wù)玩法,形成已有業(yè)務(wù)的模型;
新業(yè)務(wù)場(chǎng)景:直接按照新的業(yè)務(wù),模型配比,形成一個(gè)新業(yè)務(wù)模型。
最終會(huì)將兩種業(yè)務(wù)場(chǎng)景類型進(jìn)行組合,形成最終的終態(tài)業(yè)務(wù)模型。以下圖作為示例:
在組裝業(yè)務(wù)模型數(shù)據(jù)的時(shí)候,需要注意一些關(guān)鍵因素,比如修改具體的電商業(yè)務(wù)模型關(guān)鍵因素:
1對(duì)N :上游業(yè)務(wù)一個(gè)請(qǐng)求對(duì)應(yīng)下游業(yè)務(wù)接口是否會(huì)存在調(diào)用多次的情況;
業(yè)務(wù)屬性的比例:根據(jù)歷史數(shù)據(jù)計(jì)算不同類型業(yè)務(wù)的比例關(guān)系;
業(yè)務(wù)模型組裝之后,單一事務(wù)中的業(yè)務(wù)模型,應(yīng)該是一個(gè)漏斗狀的。而每層之間的漏斗比例,是根據(jù)不同的層級(jí)、不同的玩法、不同的規(guī)則會(huì)有不一樣的比例關(guān)系。在一次大促活動(dòng)中,這個(gè)比例關(guān)系理論上是不會(huì)變化的。漏斗模型參考如下:
業(yè)務(wù)模型在壓測(cè)時(shí)對(duì)應(yīng)的就是壓測(cè)量級(jí),淘寶大促用的全部都是RPS模式壓測(cè),即從服務(wù)端角度出發(fā)每個(gè)API之間是漏斗比例關(guān)系、能夠很好地應(yīng)用于容量規(guī)劃上。商業(yè)化產(chǎn)品PTS(性能測(cè)試服務(wù),Performance Testing Service)中也很好的支持了RPS模式。
壓測(cè)基礎(chǔ)數(shù)據(jù)
如果說業(yè)務(wù)模型對(duì)應(yīng)的是確定要壓測(cè)的接口/API的話,那壓測(cè)流量數(shù)據(jù),就是確定這些壓測(cè)API到底壓測(cè)的是什么內(nèi)容,比如:登錄哪些用戶、查看哪些商品和店鋪、購買哪些商品,甚至是付款價(jià)格是什么。
流量數(shù)據(jù)中,有一部分為上述業(yè)務(wù)模型對(duì)應(yīng)具體RPS值,模型體現(xiàn)的是比例關(guān)系,而流量數(shù)據(jù)即有每次壓測(cè)具體的RPS值。
流量數(shù)據(jù)中最重要的部分,即為真實(shí)的壓測(cè)數(shù)據(jù),我們可以稱之為基礎(chǔ)數(shù)據(jù),比如交易的買家、賣家、商品數(shù)據(jù)等。全鏈路壓測(cè)的目的是為了模擬雙11,所以模擬的真實(shí)性非常重要,基礎(chǔ)數(shù)據(jù)的真實(shí)性就是至關(guān)重要的一環(huán)。全鏈路壓測(cè)會(huì)以線上數(shù)據(jù)作為數(shù)據(jù)源,經(jīng)過采樣、過濾、脫敏等操作,形成可作為壓測(cè)使用的數(shù)據(jù)。
線上數(shù)據(jù)拿出來使用的時(shí)候,特別涉及到寫數(shù)據(jù)的時(shí)候,避免造成臟數(shù)據(jù),我們落地或者讀取的時(shí)候,采用影子表的形式。當(dāng)識(shí)別到壓測(cè)流量,則讀寫影子表,否則就讀寫線上正式表。影子表的產(chǎn)生為的是壓測(cè)流量安全。
淘寶內(nèi)部系統(tǒng)使用的壓測(cè)體系,數(shù)據(jù)平臺(tái)和壓測(cè)平臺(tái)是兩套平臺(tái)。數(shù)據(jù)平臺(tái)管理/提供壓測(cè)數(shù)據(jù)(包括模型數(shù)據(jù)和流量數(shù)據(jù)),壓測(cè)平臺(tái)提供施壓能力,即保證壓測(cè)請(qǐng)求能夠以指定的“協(xié)議”、指定的量級(jí)速率、從全國各地發(fā)送出來。商業(yè)化產(chǎn)品PTS(性能測(cè)試服務(wù),Performance Testing Service)中提供的數(shù)據(jù)工廠能力,很好的將內(nèi)部的數(shù)據(jù)平臺(tái)和壓測(cè)平臺(tái)結(jié)合起來,產(chǎn)出為統(tǒng)一的一個(gè)壓測(cè)系統(tǒng),只需用戶構(gòu)造好壓測(cè)數(shù)據(jù)以文件/自定義的形式定義好參數(shù),在使用處配置即可。
流量安全策略
流量安全策略主要是為了保證能夠正常的施壓流量且數(shù)據(jù)不錯(cuò)亂,安全地、符合預(yù)期地進(jìn)行。這里面就包括了兩層考慮:
測(cè)試數(shù)據(jù)和正常數(shù)據(jù)的嚴(yán)格隔離,即非法流量的監(jiān)控和保護(hù)機(jī)制;
手段:影子表數(shù)據(jù)。影子表為和線上結(jié)構(gòu)一致,但是處于隔離位置的可寫壓測(cè)數(shù)據(jù)表。
效果:數(shù)據(jù)隔離,避免了數(shù)據(jù)錯(cuò)亂。
壓測(cè)流量的安全過濾,即不被識(shí)別為攻擊流量;
手段:將安全相關(guān)策略接入流控降級(jí)功能;針對(duì)壓測(cè)適當(dāng)放松安全策略,或根據(jù)特殊標(biāo)記識(shí)別;
效果:壓測(cè)流量不被判定為攻擊流量,成功壓測(cè)的同時(shí)保障線上業(yè)務(wù)的安全性。
此處,涉及到第三方的系統(tǒng),諸如支付寶、短信等服務(wù),因業(yè)務(wù)特殊性需要做壓測(cè)系統(tǒng)的打通。13年淘寶實(shí)現(xiàn)了第一次全鏈路壓測(cè),但是未能打通下游業(yè)務(wù)鏈路。在14年雙十一壓測(cè)前,和支付寶、物流環(huán)節(jié)等打通了全面的壓測(cè)系統(tǒng)。對(duì)于外部客戶來說,支付寶、短信等都有對(duì)應(yīng)的擋板服務(wù)可提供,用來供用戶做全鏈路壓測(cè)時(shí)使用。
壓測(cè)實(shí)施
根據(jù)最開始介紹到的流程管控,一切準(zhǔn)備就緒之后,即可開始進(jìn)行全鏈路壓測(cè)。除常規(guī)理解的正式壓測(cè)之外,我們還有額外的兩個(gè)預(yù)操作:系統(tǒng)預(yù)熱、登錄準(zhǔn)備。
說明:此處未介紹首次改造之后的單鏈路壓測(cè)調(diào)試,這部分基本由開發(fā)同學(xué)自行操作驗(yàn)證,故不在此特殊闡述。
關(guān)于系統(tǒng)預(yù)熱 這里說的預(yù)熱,未包含我們內(nèi)部提到的預(yù)跑。預(yù)熱是為了該緩存的數(shù)據(jù)提前緩存好,達(dá)到大促緩存態(tài)的狀態(tài),也更好地實(shí)現(xiàn)我們緩存的目的。大促緩存的使用應(yīng)該利用到極致,故需要通過預(yù)熱來進(jìn)行。
對(duì)外部客戶來說,可以通過先一輪、低量級(jí)的全鏈路壓測(cè),來提前預(yù)熱系統(tǒng),包括在真正大促活動(dòng)之前也可這樣操作,即提前緩存住需要緩存的數(shù)據(jù)。
登錄準(zhǔn)備:登錄準(zhǔn)備主要是用于需要長(zhǎng)連接保持、秒殺等場(chǎng)景,即用戶都是逐步登錄上來,然后再進(jìn)行業(yè)務(wù)操作的場(chǎng)景。故如果量級(jí)特別大的時(shí)候,可以提前做登錄的準(zhǔn)備,一則來模擬真實(shí)用戶登錄場(chǎng)景,二則是對(duì)登錄系統(tǒng)的保護(hù)。
正式壓測(cè):一般正式壓測(cè)會(huì)按照壓測(cè)計(jì)劃,執(zhí)行多種壓測(cè)策略。淘寶的雙11大促壓測(cè),一般包含這樣幾步:
1)峰值脈沖:即完全模擬0點(diǎn)大促目標(biāo)峰值流量,進(jìn)行大促態(tài)壓測(cè),觀察系統(tǒng)表現(xiàn)。
2)系統(tǒng)摸高:取消限流降級(jí)保護(hù)功能,抬高當(dāng)前壓測(cè)值(前提是當(dāng)前的目標(biāo)壓測(cè)值已經(jīng)達(dá)到,則可以進(jìn)行摸高測(cè)試),觀察系統(tǒng)的極限值是多少。可進(jìn)行多輪提升壓力值壓測(cè),直到系統(tǒng)出現(xiàn)異常為止。
3)限流降級(jí)驗(yàn)證:即驗(yàn)證限流降級(jí)保護(hù)功能是否正常。 (AHAS引入)商業(yè)化產(chǎn)品AHAS(應(yīng)用高可用服務(wù),Application High Availability Service)提供了全面的限流降級(jí)能力,可進(jìn)行全鏈路的降級(jí)保護(hù)。
4)破壞性測(cè)試:這個(gè)主要是為了驗(yàn)證預(yù)案的有效性,類似于容災(zāi)演練時(shí)的預(yù)案執(zhí)行演練。即為持續(xù)保持大促態(tài)壓測(cè),并驗(yàn)證預(yù)案的有效性,觀察執(zhí)行預(yù)案之后對(duì)系統(tǒng)的影響。
對(duì)外部客戶來說,可以配置不同的壓測(cè)量級(jí)數(shù)據(jù),來進(jìn)行多輪壓測(cè),并觀察其系統(tǒng)表現(xiàn)。壓測(cè)不應(yīng)該是一次性的操作,而應(yīng)該是反復(fù)的、多輪驗(yàn)證的操作。
問題定位分析
壓測(cè)結(jié)束之后,會(huì)將壓測(cè)過程中的系統(tǒng)表現(xiàn)、監(jiān)控?cái)?shù)據(jù)等整理,進(jìn)行壓測(cè)復(fù)盤,分析當(dāng)前系統(tǒng)瓶頸、后續(xù)改進(jìn)修復(fù)計(jì)劃及下一輪壓測(cè)時(shí)間等。在分析定位問題時(shí),因涉及的系統(tǒng)較多、子業(yè)務(wù)系統(tǒng)的形態(tài)不一,需要具體問題具體分析,其中不免需要一線研發(fā)的介入。
商業(yè)化產(chǎn)品PTS(性能測(cè)試服務(wù),Performance Testing Service)的壓測(cè)報(bào)告,有詳細(xì)統(tǒng)計(jì)數(shù)據(jù)及趨勢(shì)圖數(shù)據(jù),采樣日志以及添加了的監(jiān)控?cái)?shù)據(jù)。后續(xù)PTS還會(huì)提供架構(gòu)監(jiān)控,幫助性能測(cè)試執(zhí)行同學(xué),更好地從系統(tǒng)架構(gòu)角度判定壓測(cè)過程中系統(tǒng)是否正常,大致瓶頸點(diǎn)。
智能化壓測(cè)
阿里巴巴全鏈路壓測(cè)已經(jīng)進(jìn)入第7個(gè)年頭,從開始的摸著石頭過河,發(fā)展到現(xiàn)在更智能化形態(tài)。其中部分功能也會(huì)體現(xiàn)在商業(yè)化產(chǎn)品中,大家敬請(qǐng)期待。
更多協(xié)議的支持
容量評(píng)估
問題自動(dòng)發(fā)現(xiàn)
全鏈路功能測(cè)試&壓測(cè)預(yù)演
壓測(cè)常態(tài)化
彈性大促,邊壓邊彈
......
未來
阿里巴巴將全鏈路壓測(cè)進(jìn)行到第7個(gè)年頭,中間經(jīng)歷了太多的磨練與積累,隨著新技術(shù)的出現(xiàn),我們也將不斷的完善自己,做到更好。同時(shí),更希望能將這么多年的經(jīng)驗(yàn),能賦能到外部客戶,比我們少踩坑、完美的度過每一輪大促活動(dòng),并將全鏈路壓測(cè)應(yīng)用到更多的日常場(chǎng)景中。
?掃描下方二維碼,閱讀作者大大原文喲
福利
掃描添加小編微信,備注“姓名+公司職位”,入駐【CSDN博客】,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
推薦閱讀:
總結(jié)
以上是生活随笔為你收集整理的【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 边缘计算的五个大坑,里面一定有你跳过的
- 下一篇: 确认!别再相信Python了! 程序员: