全鏈路壓測自動化實(shí)踐

境內(nèi)度假是一個(gè)低頻、與節(jié)假日典型相關(guān)的業(yè)務(wù),流量在節(jié)假日較平日會上漲五到十幾倍,會給生產(chǎn)系統(tǒng)帶來非常大的風(fēng)險(xiǎn)。因此,在2018年春節(jié)前,基于美團(tuán)基礎(chǔ)的壓測平臺Quake,我們把整個(gè)境內(nèi)度假業(yè)務(wù)接入了全鏈路壓測,來系統(tǒng)性地評估容量和發(fā)現(xiàn)隱患,最終確保了春節(jié)期間系統(tǒng)的穩(wěn)定。

成都創(chuàng)新互聯(lián)來電聯(lián)系:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域10多年,包括餐廳設(shè)計(jì)等多個(gè)領(lǐng)域擁有豐富的網(wǎng)站推廣經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián),為網(wǎng)站保駕護(hù)航。

在整個(gè)過程中,我們意識到,全鏈路壓測在整個(gè)系統(tǒng)穩(wěn)定性建設(shè)中占有核心重要的位置,也是最有效的方案。結(jié)合實(shí)際業(yè)務(wù)節(jié)假日的頻率(基本平均一個(gè)月一次),如果能夠把它作為穩(wěn)定性保障的常規(guī)手段,我們的系統(tǒng)質(zhì)量也能夠得到很好的保障。同時(shí),為了解決周期常態(tài)化壓測過程中人力成本高、多個(gè)團(tuán)隊(duì)重復(fù)工作、壓測安全不可控,風(fēng)險(xiǎn)高等痛點(diǎn),我們提出了全鏈路壓測自動化的設(shè)想。

通過對壓測實(shí)施的具體動作做統(tǒng)一的梳理,在壓測各個(gè)階段推進(jìn)標(biāo)準(zhǔn)化和自動化,盡力提升全流程的執(zhí)行效率,最終達(dá)到常態(tài)化的目標(biāo),如圖1所示:

全鏈路壓測自動化實(shí)踐

另外,在全鏈路壓測的整個(gè)周期中,壓測安全和壓測有效性也是需要一直關(guān)注的質(zhì)量屬性?;谶@些思考,如圖2所示,我們把壓測自動化需要解決的關(guān)鍵問題進(jìn)行了歸類和分解:

  • 基礎(chǔ)流程如何自動化,提高人效;

  • 如何自動做好壓測驗(yàn)證,保障壓測安全;

  • 壓測置信度量化如何計(jì)算,保證壓測有效。

全鏈路壓測自動化實(shí)踐

最終,基于美團(tuán)基礎(chǔ)的壓測平臺Quake(在整個(gè)系統(tǒng),主要提供流量錄制、回放、施壓的功能),設(shè)計(jì)并實(shí)現(xiàn)了全鏈路自動化壓測系統(tǒng),為不同業(yè)務(wù)實(shí)施全鏈路壓測提效,并確保壓測安全。該系統(tǒng):

  • 提供鏈路梳理工具,能夠自動構(gòu)建壓測入口鏈路完整的依賴信息,輔助鏈路梳理;

  • 支持鏈路標(biāo)注和配置功能,對于無需壓測觸達(dá)的依賴接口,可以通過配置化手段,完成相關(guān)接口的Mock配置,不用在業(yè)務(wù)代碼中嵌入壓測判斷邏輯;

  • 提供抽象的數(shù)據(jù)構(gòu)造接口,通過平臺,用戶可以配置任意的數(shù)據(jù)構(gòu)造邏輯和流程;

  • 在壓測前/壓測中,自動對壓測服務(wù)和流量做多項(xiàng)校驗(yàn),保障壓測安全性;

  • 在平日,基于壓測計(jì)劃提供周期性小流量的壓測校驗(yàn),使得業(yè)務(wù)迭代變更帶來的壓測安全風(fēng)險(xiǎn)被盡早發(fā)現(xiàn);

  • 提供壓測計(jì)劃管理功能,通過系統(tǒng)自動調(diào)度和控制施壓過程,解放人力;同時(shí)強(qiáng)制前置預(yù)壓測,也提高了安全性;

  • 一鍵壓測,自動生成報(bào)告,收集鏈路入口和告警信息,提供問題記錄和跟進(jìn)功能。

系統(tǒng)設(shè)計(jì)

系統(tǒng)總體設(shè)計(jì)

全鏈路壓測自動化實(shí)踐

系統(tǒng)的總體邏輯架構(gòu),如圖3所示,主要包括鏈路構(gòu)建/比對、事件/指標(biāo)收集、鏈路治理、壓測配置管理、壓測驗(yàn)證檢查、數(shù)據(jù)構(gòu)造、壓測計(jì)劃管理、報(bào)告輸出等功能模塊。通過這些模塊,為全鏈路壓測的整個(gè)流程提供支持,盡力降低業(yè)務(wù)部門使用全鏈路壓測的門檻和成本。

鏈路構(gòu)建/比對:負(fù)責(zé)服務(wù)接口方法調(diào)用鏈路的構(gòu)建、更新、存儲。

鏈路治理:基于構(gòu)建的鏈路關(guān)系,提供鏈路中核心依賴、出口Mock接口等標(biāo)注、上下游分析、展示,以及出口Mock的配置等功能。

壓測配置管理:自動發(fā)現(xiàn)注冊服務(wù)的Mafka(美團(tuán)基于Kafka開發(fā)的一個(gè)分布式消息中間件綜合解決方案)/Cellar(基于Tair開發(fā)的分布式KV存儲服務(wù))/Squirrel(基于redis-Cluster模式進(jìn)行二次開發(fā)的分布式緩存系統(tǒng))/Zebra(美團(tuán)數(shù)據(jù)庫訪問層中間件)的壓測配置,輔助壓測方核查和配置相關(guān)配置項(xiàng)。

壓測驗(yàn)證檢查:確保系統(tǒng)可壓測,通過多種校驗(yàn)手段和機(jī)制設(shè)計(jì),來保證壓測的安全性。

數(shù)據(jù)構(gòu)造:為不同業(yè)務(wù)壓測實(shí)施準(zhǔn)備基礎(chǔ)和流量數(shù)據(jù)。

壓測計(jì)劃管理:設(shè)定壓測執(zhí)行計(jì)劃,并依賴“壓測控制”模塊,自動調(diào)度整個(gè)壓測執(zhí)行過程。

故障診斷:依據(jù)收集的關(guān)鍵業(yè)務(wù)/服務(wù)指標(biāo)、報(bào)警等信息,判斷分析服務(wù)是否異常,以及是否終止壓測。

置信度評估:從數(shù)據(jù)覆蓋、鏈路覆蓋、技術(shù)指標(biāo)等維度評估壓測結(jié)果的置信度,即與真實(shí)流量情況下各評估維度的相似性。

非功能性需求說明:

  • 可擴(kuò)展性

    • 能夠兼容不同業(yè)務(wù)線數(shù)據(jù)構(gòu)造邏輯的差異性。

    • 能夠支持不同的流量錄制方式。

  • 安全性

    • 集成SSO,按用戶所屬團(tuán)隊(duì)分組,展示所屬的壓測服務(wù)信息。對關(guān)鍵操作留存操作日志。

    • 壓測驗(yàn)證檢查,是確保壓測安全的關(guān)鍵。支持周期性壓測驗(yàn)證,能發(fā)現(xiàn)待壓測服務(wù)可壓測性隨時(shí)間的退化。

  • 可重用性

    • 長遠(yuǎn)看,鏈路構(gòu)建、事件/指標(biāo)收集/故障診斷等模塊,在穩(wěn)定性領(lǐng)域是可重用的基礎(chǔ)設(shè)施,按獨(dú)立通用模塊建設(shè)。

約束說明:

  • 基于Quake搭建,流量的錄制、回放、施壓等依賴Quake。

以下對部分關(guān)鍵模塊設(shè)計(jì)做詳細(xì)介紹。

鏈路治理模塊設(shè)計(jì)

全鏈路壓測自動化實(shí)踐

鏈路治理模塊是基于鏈路構(gòu)建模塊實(shí)現(xiàn)的。鏈路構(gòu)建模塊,底層是以閉包表的方式存儲兩個(gè)維度(服務(wù)和接口)的鏈路關(guān)系的,會周期自動地構(gòu)建或更新。

鏈路治理模塊主要提供鏈路入口選取、鏈路標(biāo)注、服務(wù)出口分析、出口Mock配置等功能。如圖4所示,注冊壓測的服務(wù)構(gòu)成了壓測服務(wù)的范圍,也就確定了各個(gè)鏈路的邊界。通過系統(tǒng)自動構(gòu)建的樹結(jié)構(gòu)方式的鏈路關(guān)系,可以輔助壓測方對整個(gè)鏈路的梳理,它解決了以往鏈路梳理靠翻代碼等低效手段,缺少全鏈路視角無法做到完備梳理等問題。

全鏈路壓測自動化實(shí)踐

同時(shí),針對整個(gè)壓測范圍,依賴接口可以做人工標(biāo)注。哪些需要Mock,哪些不需要Mock,如此壓測特有的鏈路信息能夠得到持續(xù)的維護(hù)。

對于需要Mock的外部接口(如圖4中的接口C),待壓測系統(tǒng)通過引入專有SDK的方式,獲得出口配置化Mock的能力。如圖5所示,這里使用了美團(tuán)酒旅Mock平臺的基礎(chǔ)能力,采用JVM-Sandbox作為AOP工具,對配置的需要Mock的外部接口做動態(tài)能力增強(qiáng)。在接口調(diào)用時(shí),判斷是否是壓測流量,是的話走M(jìn)ock邏輯,做模擬時(shí)延處理,返回提前配置的響應(yīng)數(shù)據(jù)。這樣的話,第一,簡化了出口Mock的操作,業(yè)務(wù)代碼里Mock邏輯0侵入;第二,把之前本地Mock與借助Mockserver的兩種解決方案用一種方案替代,便于統(tǒng)一管理;第三,在實(shí)際壓測時(shí),平臺還可以通過SDK收集Mock邏輯執(zhí)行的數(shù)據(jù),自動與后臺標(biāo)注的Mock數(shù)據(jù)對比,來確保應(yīng)該被Mock的出口確實(shí)被Mock掉。

數(shù)據(jù)構(gòu)造模塊設(shè)計(jì)

全鏈路壓測自動化實(shí)踐

數(shù)據(jù)構(gòu)造模塊是為了解決不同業(yè)務(wù)對于基礎(chǔ)數(shù)據(jù)和流量數(shù)據(jù)的差異化構(gòu)造流程。提出了兩個(gè)關(guān)鍵的概念:數(shù)據(jù)構(gòu)造邏輯和數(shù)據(jù)構(gòu)造流程。數(shù)據(jù)構(gòu)造邏輯,是數(shù)據(jù)構(gòu)造的細(xì)粒度可復(fù)用的基本單元,由一段Java代碼表示。平臺提供統(tǒng)一抽象的數(shù)據(jù)構(gòu)造接口,基于Java動態(tài)編譯技術(shù),開發(fā)了一個(gè)Java版的腳本引擎,支持構(gòu)造邏輯的在線編輯與更新。同時(shí),基于美團(tuán)RPC中間件泛化調(diào)用能力,構(gòu)建了泛化調(diào)用工具,幫助用戶把外部基礎(chǔ)數(shù)據(jù)構(gòu)造接口的調(diào)用集成到一個(gè)數(shù)據(jù)構(gòu)造邏輯中。

數(shù)據(jù)構(gòu)造流程,定義了壓測基礎(chǔ)數(shù)據(jù)和流量數(shù)據(jù)生成的整個(gè)流程。通過與Quake的交互,獲取原始真實(shí)的線上數(shù)據(jù);構(gòu)建了一個(gè)簡版的流程引擎,在統(tǒng)一設(shè)定的流程中,如圖6所示,通過在標(biāo)準(zhǔn)擴(kuò)展槽中,配置不同類型的數(shù)據(jù)構(gòu)造邏輯和執(zhí)行順序,來定義整個(gè)數(shù)據(jù)構(gòu)造執(zhí)行的流程;最后,把構(gòu)造的流量數(shù)據(jù)與Quake壓測場景綁定,作為后續(xù)Quake壓測施壓中,場景回放流量的來源。

通過這樣的設(shè)計(jì),能夠支持任意數(shù)據(jù)構(gòu)造邏輯,通用靈活。同時(shí)集成了Quake已有的流量錄制功能,一鍵執(zhí)行數(shù)據(jù)構(gòu)造流程,大大地提升了效率。

壓測驗(yàn)證模塊設(shè)計(jì)

全鏈路壓測自動化實(shí)踐

對于壓測安全性的保障,一直是自動化的難點(diǎn)。之前的經(jīng)驗(yàn)多是在非生產(chǎn)環(huán)境壓測或預(yù)壓測過程中,依靠不同服務(wù)相關(guān)負(fù)責(zé)人的人工確認(rèn)。這里針對壓測驗(yàn)證,提供兩條新的思考角度:一個(gè)是從待壓測服務(wù)系統(tǒng)可壓測性的角度看;一個(gè)是從壓測流量特征的角度看。對于第一個(gè)角度,一個(gè)服務(wù)支持壓測需要滿足壓測數(shù)據(jù)和流量的隔離。對于不同的系統(tǒng)生態(tài),需要滿足的點(diǎn)是不同的,對于美團(tuán)生態(tài)下的服務(wù),可壓測的條件包括組件版本支持壓測、影子存儲配置符合預(yù)期等等。

從這些條件出發(fā),就可以得到下面這些靜態(tài)的校驗(yàn)項(xiàng):

  • 服務(wù)依賴中間件版本要求校驗(yàn);

  • Zebra壓測配置校驗(yàn);

  • Cellar/Squirrel壓測配置校驗(yàn);

  • Mafka壓測開關(guān)同步及校驗(yàn);

  • 服務(wù)Mock邏輯存在性校驗(yàn)。

而從第二個(gè)角度來看,就是關(guān)注壓測流量下會產(chǎn)生哪些特有的流量特征數(shù)據(jù),通過這些特有的數(shù)據(jù)來確保壓測的安全性。這里主要有三類數(shù)據(jù):美團(tuán)分布式追蹤系統(tǒng)(MTrace)中調(diào)用鏈路的壓測標(biāo)記數(shù)據(jù)(正常的壓測鏈路應(yīng)該是一直帶有壓測標(biāo)記,直到壓測范圍的邊界節(jié)點(diǎn),可參考圖4);標(biāo)記Mock的外部接口被調(diào)用時(shí),上報(bào)的運(yùn)行數(shù)據(jù);基于監(jiān)控系統(tǒng)得到的壓測流量特有的監(jiān)控?cái)?shù)據(jù)。利用這些數(shù)據(jù),我們設(shè)計(jì)了三種動態(tài)的校驗(yàn)項(xiàng),發(fā)現(xiàn)壓測標(biāo)記丟失、Mock出口被調(diào)用等異常情況:

  • MTrace鏈路標(biāo)記校驗(yàn),從壓測鏈路入口出發(fā),收集壓測鏈路信息,校驗(yàn)壓測標(biāo)記信息傳遞是否符合預(yù)期。

全鏈路壓測自動化實(shí)踐

圖8 MTrace鏈路標(biāo)記校驗(yàn)示意

  • 服務(wù)Mock邏輯壓測標(biāo)記校驗(yàn),通過增強(qiáng)的校驗(yàn)邏輯,把執(zhí)行信息上報(bào)到平臺,與Mock配置時(shí)的標(biāo)注數(shù)據(jù)對比驗(yàn)證。

全鏈路壓測自動化實(shí)踐

圖9 服務(wù)Mock壓測校驗(yàn)示意

  • 壓測與真實(shí)鏈路比對校驗(yàn),利用鏈路治理模塊構(gòu)建鏈路的能力,采集壓測監(jiān)控?cái)?shù)據(jù)重構(gòu)鏈路,與真實(shí)鏈路對比驗(yàn)證。

全鏈路壓測自動化實(shí)踐

除了明確靜態(tài)和動態(tài)兩類壓測校驗(yàn)規(guī)則,在具體流程安排上,在壓測時(shí)和平日兩個(gè)時(shí)期執(zhí)行這些規(guī)則。既能把壓測校驗(yàn)的壓力分散到平時(shí),也能盡快地發(fā)現(xiàn)服務(wù)因代碼迭代引入的新風(fēng)險(xiǎn)。

在壓測時(shí),通過強(qiáng)制前置預(yù)壓測的流程設(shè)計(jì)以及靜態(tài)/動態(tài)壓測校驗(yàn)項(xiàng)的自動執(zhí)行,保障安全這個(gè)事情。校驗(yàn)不通過,給出告警,甚至在允許的情況下直接終止設(shè)定的壓測計(jì)劃。

在平日,通過執(zhí)行周期性小流量壓測校驗(yàn),在施壓過程中對QPS做個(gè)位數(shù)的精細(xì)控制,以盡量小的代價(jià)快速發(fā)現(xiàn)壓測范圍內(nèi)壓測安全性的退化。

壓測計(jì)劃管理模塊設(shè)計(jì)

壓測計(jì)劃管理模塊,提供壓測計(jì)劃的提前設(shè)定,然后模塊能夠自動調(diào)度和控制整個(gè)施壓過程。如圖11所示,這里的壓測計(jì)劃是多個(gè)壓測場景的組合,包含QPS的增長計(jì)劃等信息,主要分為預(yù)壓測和正式壓測兩個(gè)階段。壓測計(jì)劃的自動實(shí)施,能夠解決尤其多場景組合壓測,操作耗時(shí)多、多場景壓測QPS無法同步變更、壓測方無法兼顧操作和觀測等問題,提升了效率。同時(shí),在壓測計(jì)劃執(zhí)行狀態(tài)機(jī)里,預(yù)壓測正常執(zhí)行完成,狀態(tài)才能遷移到正式壓測的開始狀態(tài),提高了壓測安全性。

全鏈路壓測自動化實(shí)踐

從圖11可以看到,壓測計(jì)劃模塊,是整個(gè)自動化壓測的核心,協(xié)同起了各個(gè)模塊。通過具體的計(jì)劃任務(wù)執(zhí)行產(chǎn)生的事件,觸發(fā)了壓測驗(yàn)證檢查、壓測進(jìn)展播報(bào)、收集壓測監(jiān)控/告警等數(shù)據(jù),來檢測服務(wù)是否異常,并根據(jù)配置來終止壓測,能夠故障時(shí)及時(shí)止損。最后,報(bào)告生成模塊收到壓測終止事件,匯總各種信息,自動生成包括壓測基本信息等多維度信息的壓測報(bào)告,節(jié)省了一些壓測后分析的時(shí)間。

案例分享

以下以實(shí)際壓測的過程來做個(gè)案例分享。

團(tuán)隊(duì)/服務(wù)注冊

  • 設(shè)定實(shí)施壓測的虛擬團(tuán)隊(duì)和壓測覆蓋范圍的應(yīng)用服務(wù)。

全鏈路壓測自動化實(shí)踐

鏈路治理

  • 選定壓測鏈路入口,可以得到入口以下的接口鏈路關(guān)系樹,便于梳理。

  • 明確需要Mock的外部接口,并做配置,參考“鏈路治理模塊設(shè)計(jì)”一節(jié)。

全鏈路壓測自動化實(shí)踐

應(yīng)用改造與壓測配置

  • 對待接入壓測應(yīng)用改造,滿足“服務(wù)的可壓測條件”,參考圖7。

  • 壓測應(yīng)用依賴中間件配置,系統(tǒng)依據(jù)構(gòu)建的鏈路信息,能夠自動發(fā)現(xiàn)。提供統(tǒng)一配置和核對的頁面功能。

全鏈路壓測自動化實(shí)踐

Quake準(zhǔn)備

  • 壓測自動化系統(tǒng)是基于Quake構(gòu)建的,流量錄制、回放、施壓等依賴于此。因此需要到Quake上配置流量錄制的“流量任務(wù)”和壓測執(zhí)行的“壓測場景”。

全鏈路壓測自動化實(shí)踐
全鏈路壓測自動化實(shí)踐

數(shù)據(jù)構(gòu)造

  • 配置數(shù)據(jù)構(gòu)造邏輯,當(dāng)然已有的邏輯都是可復(fù)用的單元,可以先查看已有邏輯是否能滿足自己的需要。

全鏈路壓測自動化實(shí)踐
  • 配置數(shù)據(jù)構(gòu)造流程。

全鏈路壓測自動化實(shí)踐

壓測實(shí)施

  • 設(shè)定壓測計(jì)劃,到啟動時(shí)間,系統(tǒng)會自動啟動壓測。

全鏈路壓測自動化實(shí)踐
  • 壓測中,注意關(guān)注壓測驗(yàn)證校驗(yàn)的告警信息,及時(shí)處理。

全鏈路壓測自動化實(shí)踐
  • 壓測后,可查看壓測報(bào)告。記錄和跟進(jìn)發(fā)現(xiàn)的問題。

全鏈路壓測自動化實(shí)踐

總結(jié)與展望

目前,壓測自動化系統(tǒng)已經(jīng)投入使用,美團(tuán)酒店和境內(nèi)度假的全部團(tuán)隊(duì)已經(jīng)接入,有效地提升了壓測效率。后續(xù)會在兩個(gè)大方向上持續(xù)建設(shè)升級,一個(gè)是把全鏈路壓測放到“容量評估與優(yōu)化”領(lǐng)域來看,不僅關(guān)注整體系統(tǒng)的穩(wěn)定性,同時(shí)也期望兼顧成本的平衡;另一個(gè)是與穩(wěn)定性其他子領(lǐng)域的生態(tài)集成,比如故障演練、彈性伸縮等等,在更多場景發(fā)揮壓測的作用。最后,通過這些努力,使得線上系統(tǒng)的穩(wěn)定性成為一個(gè)確定性的事情。

參考資料

[1]全鏈路壓測平臺(Quake)在美團(tuán)中的實(shí)踐

[2]阿里JVM-Sandbox

[3]Dubbo的泛化調(diào)用

[4]Java的動態(tài)編譯

作者簡介

歐龍,美團(tuán)研發(fā)工程師,2013年加入美團(tuán),目前主要負(fù)責(zé)境內(nèi)度假交易穩(wěn)定性建設(shè)等工作。

名稱欄目:全鏈路壓測自動化實(shí)踐
本文來源:http://bm7419.com/article12/jccjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、靜態(tài)網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、建站公司企業(yè)網(wǎng)站制作、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司