日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

蘑菇街的稳定性实践

發(fā)布時(shí)間:2025/4/5 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蘑菇街的稳定性实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://opentalk.upyun.com/329.html

促銷情況下的穩(wěn)定性保障流程

蘑菇街是一個(gè)電商平臺(tái),每年會(huì)做四次大促,3.21、6.18、雙11、雙12。大促保障涉及到流量評(píng)估、依賴梳理、單鏈路壓測(cè)、全鏈路壓測(cè)等。蘑菇街大促的基本流程,基本是按照系統(tǒng)峰值評(píng)估、依賴關(guān)系梳理、單鏈路壓測(cè)、系統(tǒng)擴(kuò)容、全鏈路壓測(cè)等幾個(gè)環(huán)節(jié)展開的。

在保障大促穩(wěn)定性工作的時(shí)候,穩(wěn)定性團(tuán)隊(duì)會(huì)有一個(gè)KPI:這次大促不能出某個(gè)級(jí)別以上的故障,如果出了這個(gè)級(jí)別以上的故障這個(gè)KPI就掛掉了。第一次接到穩(wěn)定性工作,我也是很迷茫——很多事情是其他團(tuán)隊(duì)小伙伴做的事情,萬一他們的疏忽出了一個(gè)故障,這個(gè)也要我一起背嗎?后來逐漸摸索出一套應(yīng)對(duì)大促帶來大流量,行之有效的大促穩(wěn)定性保障方案。

評(píng)估系統(tǒng)峰值

機(jī)器和成本總是有限的,因此在每次大促之前必須要估出一個(gè)合理的峰值,根據(jù)峰值合理地?cái)U(kuò)容。每次大促開始前,必須找到運(yùn)營(yíng)方溝通大促的業(yè)務(wù)目標(biāo):大促GMV,包括預(yù)估的PV、UV、客單價(jià)、轉(zhuǎn)化率。根據(jù)運(yùn)營(yíng)給出的數(shù)據(jù),推算出所有系統(tǒng)的峰值,其中最重要是下單系統(tǒng)的峰值。

倒金字塔梳理系統(tǒng)峰值

下單峰值的評(píng)估,有點(diǎn)像我們做應(yīng)用題一樣。已知運(yùn)營(yíng)給出大促的目標(biāo),包括PV、UV、GMV,要求推算出下單交易系統(tǒng)峰值。這里分享一個(gè)經(jīng)驗(yàn)公式,“預(yù)估大促GMV/歷史大促GMV×歷史客單價(jià)/預(yù)估客單價(jià)”,一般就等于歷史大促峰值。通過這個(gè)可以算出這次下單大概峰值是多少。

算出了下單峰值之后,再套入一個(gè)倒金字塔的模型。電商場(chǎng)景都是有一定特點(diǎn)的:最前面流量會(huì)從會(huì)場(chǎng)、首頁(yè)、外部分享頁(yè)進(jìn)來,然后進(jìn)店鋪頁(yè)面、圖墻頁(yè)面、搜索頁(yè)面。到了這些頁(yè)面之后會(huì)進(jìn)入詳情頁(yè);到了這里用戶可以加入購(gòu)物車,做購(gòu)物車的操作;然后就可以下單、支付了。瀏覽了詳情頁(yè)后,有多少人基本會(huì)下單,這個(gè)比例我們稱之為“轉(zhuǎn)化率”,轉(zhuǎn)化率可以預(yù)估出來了。

?

?

根據(jù)一定的比例關(guān)系,一旦確定好下單數(shù)額之后,就可以倒推出每個(gè)系統(tǒng)在本次大促是要承擔(dān)多少Q(mào)PS,把每個(gè)系統(tǒng)的峰值算出來。推算出每個(gè)系統(tǒng)QBS之后,再根據(jù)以往經(jīng)驗(yàn)進(jìn)行對(duì)比,比如對(duì)比3.21大促的預(yù)估峰值跟實(shí)際峰值,假如當(dāng)時(shí)估值偏低,那在下次大促時(shí)稍微調(diào)高一點(diǎn),這樣就會(huì)確定本次大促各自系統(tǒng)峰值是多少。

關(guān)注運(yùn)營(yíng)玩法和架構(gòu)的變化

電商平臺(tái)的運(yùn)營(yíng)玩法層出不窮,一定要關(guān)注運(yùn)營(yíng)玩法和架構(gòu)上的新變動(dòng),這對(duì)預(yù)估峰值來說很重要!蘑菇街吃過這方面的虧。

比如今年3.21大促的時(shí)候,運(yùn)營(yíng)在晚上10點(diǎn)時(shí)候會(huì)上線有一波游戲,App會(huì)有信息推送,首頁(yè)會(huì)會(huì)彈出直達(dá)這個(gè)游戲的提示框,有好幾種方法可以把流量迅速導(dǎo)到游戲會(huì)場(chǎng)去。在游戲開始之前我們沒有太關(guān)注這個(gè)游戲的玩法,只是按照以往的經(jīng)驗(yàn)簡(jiǎn)單估了一下這個(gè)值。但是游戲的流量比預(yù)估值高上一倍!那次大促有一半的KBS直接被限掉了,這對(duì)客戶體驗(yàn)非常不好。

后來總結(jié)經(jīng)驗(yàn),對(duì)于這些玩法的變動(dòng),一定要做大促穩(wěn)定性保障,一定要了解的細(xì)致,不能只是很泛泛地去問一下:玩法有沒有新變動(dòng)?是不是跟以前一樣的?要具體到運(yùn)營(yíng)的每一個(gè)步驟,不問清楚很有可能對(duì)流量預(yù)估產(chǎn)生影響。

架構(gòu)上有新變動(dòng)帶來的影響更不要說了,比如你以前應(yīng)用是部署在物理機(jī)上的,現(xiàn)在部署在虛擬機(jī)上了;或者之前用A中間件,現(xiàn)在用是B中間件。架構(gòu)上的變動(dòng)一定要重點(diǎn)關(guān)注。

梳理依賴關(guān)系

一旦業(yè)務(wù)變大或服務(wù)化細(xì)致之后,依賴關(guān)系會(huì)變得非常復(fù)雜,梳理起來很麻煩。有時(shí)候某一個(gè)應(yīng)用掛了,可能是某一個(gè)依賴方掛了;你負(fù)責(zé)的應(yīng)用掛了之后又會(huì)導(dǎo)致所有調(diào)用此應(yīng)用的應(yīng)用也掛了。

在全鏈路監(jiān)控系統(tǒng)上線之前,做依賴關(guān)系的梳理其實(shí)是一個(gè)非常麻煩的事情,假如開發(fā)人員出現(xiàn)了流動(dòng),新人接手這個(gè)系統(tǒng),只有看代碼才能知道依賴關(guān)系,對(duì)代碼不太熟悉的話還會(huì)出現(xiàn)漏判的情況。有些代碼因?yàn)闃I(yè)務(wù)邏輯關(guān)系非常復(fù)雜,很難判斷和梳理,用比例無法精確計(jì)算。

依賴關(guān)系不明確,萬一帶大促的時(shí)候這個(gè)依賴發(fā)生了狀況,但沒有做預(yù)案處理,可能對(duì)系統(tǒng)本身的穩(wěn)定性會(huì)產(chǎn)生影響。

?

?

現(xiàn)在蘑菇街是通過全鏈路監(jiān)控系統(tǒng)來梳理依賴關(guān)系,因?yàn)槿溌繁O(jiān)控系統(tǒng)可以知道一條鏈路下來的每次調(diào)用,通過計(jì)算可以知道調(diào)用者和被調(diào)用者之間的調(diào)用比例關(guān)系,甚至可以詳細(xì)到接口。

通過全鏈路監(jiān)控系統(tǒng)梳理出來的全站應(yīng)用拓?fù)?#xff0c;最前端的應(yīng)用是Web Trode Order,調(diào)用了很多的應(yīng)用。只要把這個(gè)關(guān)系出來就一目了然,再也不用看代碼,而且直接知道它們之間的關(guān)系。

系統(tǒng)壓測(cè)和擴(kuò)容

蘑菇街的步驟是,先做單鏈路壓測(cè),再做擴(kuò)容,最后做全鏈路壓測(cè)。

在沒有統(tǒng)一的全鏈路壓測(cè)平臺(tái)之前,業(yè)務(wù)方都是自己組織壓力測(cè)試的,各種各樣的壓測(cè)工具都有。這里有幾個(gè)注意點(diǎn),一個(gè)是當(dāng)你需要壓到很高的QPS的時(shí)候,本身有限制,QPS不是很穩(wěn)定。另外如果壓測(cè)數(shù)值很高,業(yè)務(wù)方手里沒有機(jī)器,他要跑到PE去申請(qǐng),PE一般也不會(huì)給機(jī)器,這怎么辦?基于這個(gè)問題,蘑菇街開發(fā)了全鏈路壓測(cè)平臺(tái),把機(jī)器當(dāng)成一種資源:只要告訴鏈路定義、場(chǎng)景定義和任務(wù)定義,簡(jiǎn)單定義之后就可以壓測(cè)了。

單鏈路壓測(cè)

在單鏈路壓測(cè)階段,各業(yè)務(wù)方把各自需求應(yīng)用全部做完100%流量的壓測(cè),并且要驗(yàn)證所有的流量、限流策略是否正確。

單鏈路壓測(cè)的時(shí)候有一個(gè)“局部集中”的概念,在做單鏈路壓測(cè)的時(shí)候,電商基礎(chǔ)相關(guān)的業(yè)務(wù)壓測(cè)要盡量放在一起壓,比如詳情、促銷、優(yōu)惠、交易、下單,之前都是各自壓測(cè),但這些應(yīng)用互相都是有交互情況的,最好在同一天單鏈路壓測(cè)的時(shí)候就一起進(jìn)行調(diào)。如果有問題可以提前發(fā)現(xiàn)解決掉,而不會(huì)把這些問題推到全鏈路壓測(cè)的時(shí)候去解決。

系統(tǒng)擴(kuò)容靠單機(jī)壓測(cè)

單鏈路壓測(cè)完了之后就開始做系統(tǒng)擴(kuò)容。蘑菇街做系統(tǒng)擴(kuò)容,必須要由單機(jī)壓測(cè)系統(tǒng)提供水位報(bào)告,有數(shù)據(jù)說話,拒絕拍腦袋,才能夠減少機(jī)器、降低成本。

比如有些應(yīng)用壓測(cè)出來要扛5千QPS,但是我只能抗3千,這就需要找PE擴(kuò)容機(jī)器。擴(kuò)容要盡量節(jié)約成本。業(yè)務(wù)方為了自己的應(yīng)用更安全一點(diǎn),通常會(huì)多要幾臺(tái)機(jī)器,能扛多一點(diǎn),心里安全一點(diǎn)。如果對(duì)每一個(gè)業(yè)務(wù)方都心慈手軟的話,你就放出去太多機(jī)器了,成本沒法控制,必須要求業(yè)務(wù)方要拿著單機(jī)水位壓測(cè)包來擴(kuò)容,不能拍腦袋說“再給我5臺(tái)機(jī)器,讓我更安全一點(diǎn)”。

為此蘑菇街做了單機(jī)壓測(cè)系統(tǒng),它有兩種方法,一種可以把線上真實(shí)流量全部會(huì)聚到其中某一臺(tái)機(jī)器上去,這樣可以測(cè)這臺(tái)機(jī)器的真實(shí)水位到底是多少。另外一種情況,可以利用全鏈路壓測(cè)平臺(tái),打模擬流量到一臺(tái)機(jī)器上去,這樣也可以測(cè)出這臺(tái)機(jī)器真實(shí)水位是多少。

打流量的時(shí)候也不是一次打,假如你預(yù)測(cè)這臺(tái)機(jī)器單機(jī)水位大概能達(dá)到1千KPS,我可能從100開始打,100打完了打200,直到測(cè)出你這個(gè)系統(tǒng)單機(jī)水位。這里的判斷標(biāo)準(zhǔn)和預(yù)值通常是讓業(yè)務(wù)方自己測(cè),比如他測(cè)試CUO到了一定值之后,比如到了80%,就可以認(rèn)為到極限了。業(yè)務(wù)方完成單機(jī)壓測(cè)后,方可拿到機(jī)器進(jìn)行擴(kuò)容。

全鏈路壓測(cè)要盡量真實(shí)

擴(kuò)容之后要進(jìn)行全鏈路壓測(cè)。各自做單鏈路壓測(cè)是不行的,因?yàn)樵谒辛髁繒?huì)聚到一起的時(shí)候,對(duì)整個(gè)系統(tǒng)某些平行點(diǎn)可能會(huì)發(fā)生意想不到的情況。所以在單鏈路壓測(cè)做完之后,一定要把所有系統(tǒng)會(huì)聚在一起做全鏈路壓測(cè),一般會(huì)做兩到三次。

一般認(rèn)為全鏈路壓測(cè)知道壓過就OK,其實(shí)不是,全鏈路壓測(cè)都?jí)蛄?#xff0c;后來大促發(fā)現(xiàn)了問題,問題在哪里呢?因?yàn)槿溌穳簻y(cè)是模擬流量,平日的真實(shí)流量沒有到大促那一天這么大,沒有那么多的數(shù)據(jù)用于模擬流量數(shù)據(jù)庫(kù);比如線上商品有10萬,業(yè)務(wù)方為了簡(jiǎn)單化,后來在測(cè)試數(shù)據(jù)庫(kù)里只有2萬的商品,所以在做全鏈路壓測(cè)的時(shí)候沒有發(fā)現(xiàn)這個(gè)問題,測(cè)試時(shí)的網(wǎng)卡流量雖然比較大,但是沒有把網(wǎng)卡打爆。但是在真正大促當(dāng)天,10萬商品的流量一下子下來之后,就把網(wǎng)卡打爆了。

進(jìn)行反思后,蘑菇街要求全鏈路壓測(cè)數(shù)據(jù)要盡量真實(shí),盡量模擬現(xiàn)場(chǎng)的情況。但是全鏈路壓測(cè)的成本也要考慮好,這之間的度要把握好。

?

?

全鏈路壓測(cè)是一個(gè)苦活,通常在晚上12點(diǎn)之后,持續(xù)四到五個(gè)小時(shí),一直到凌晨。這里要提高人效、降低成本,蘑菇街盡量減少晚上壓測(cè)的成本,如果白天壓測(cè)50%的量,晚上可以從75%開始?jí)毫?#xff0c;這樣就可以節(jié)約了晚上的壓測(cè)時(shí)間,就不用到凌晨4點(diǎn)、5點(diǎn),一般凌晨2點(diǎn)就可以手工了。

2017年蘑菇街也在想一些辦法,可不可以在白天也做一些全鏈路壓縮;白天做全鏈路壓測(cè)的方向是有的,就是隔離出兩個(gè)動(dòng)態(tài)環(huán)境,一部分環(huán)境是線上流量,另一部分環(huán)境專門用于壓測(cè),這樣互相不影響。這個(gè)方案還在可行性驗(yàn)證當(dāng)中。

以上工作準(zhǔn)備充分以后,還要準(zhǔn)備一份預(yù)案評(píng)審和作戰(zhàn)手冊(cè)。

預(yù)案是為了大促如果真發(fā)生了事情到底怎么辦,包括前面做依賴梳理的時(shí)候,一個(gè)系統(tǒng)如果有三個(gè)依賴的話,需要對(duì)每個(gè)依賴都要做好一個(gè)預(yù)案:這個(gè)依賴如果掛了怎么辦,降級(jí)還是別的處理方案?

作戰(zhàn)手冊(cè)就比較簡(jiǎn)單明了,出現(xiàn)什么問題,團(tuán)隊(duì)成員能夠在作戰(zhàn)手冊(cè)里第一時(shí)間找到應(yīng)對(duì)方案和措施,及時(shí)應(yīng)對(duì),解決突發(fā)情況。

lurker:蘑菇街全鏈路監(jiān)控平臺(tái)

為了加強(qiáng)穩(wěn)定性工作,蘑菇街開發(fā)了一個(gè)全鏈路監(jiān)控平臺(tái)工具——lurker。取這個(gè)名字的初衷,是希望它埋伏在地底下,在設(shè)計(jì)和使用的時(shí)候,盡量地減少業(yè)務(wù)方對(duì)這個(gè)東西的感知,但實(shí)際上lurker又幫助他們解決了實(shí)際問題。

在開發(fā)lurker的時(shí)候,蘑菇街95%代碼以上還是PHP,部分代碼做了PHP服務(wù)化,服務(wù)可以互相去調(diào)用的。比如想監(jiān)控PHP服務(wù)里面的每一個(gè)函數(shù),到底是不是每一個(gè)函數(shù)時(shí)間過長(zhǎng)。所以我們當(dāng)時(shí)想了一個(gè)辦法,Facebook有一個(gè)xhprof的工具,可以監(jiān)控每個(gè)函數(shù),通過PHP擴(kuò)展實(shí)現(xiàn)。我們?cè)趚hprof的基礎(chǔ)上改了一下,就變成蘑菇街的lurker,它的原理是什么?PHP有一個(gè)綻裂引擎,有一個(gè)函數(shù)執(zhí)行指針,把這個(gè)指針替換成蘑菇街的hook函數(shù),然后做了一些處理,可以讓業(yè)務(wù)方判定哪些函數(shù)是需要監(jiān)控的。此外還修改了curl以及php-curl的實(shí)現(xiàn)。

全鏈路監(jiān)控的原理最早是由Google Dappen提出的,是一個(gè)分布式的監(jiān)控系統(tǒng)。當(dāng)本身的應(yīng)用逐步服務(wù)化的時(shí)候,服務(wù)拆分會(huì)越來越細(xì),現(xiàn)在蘑菇街有大幾百個(gè)應(yīng)用,應(yīng)用之間互相有很復(fù)雜的調(diào)用。某一條復(fù)雜的鏈路可能要涉及到幾百次調(diào)用,如果一次調(diào)用IP超時(shí)的話,怎么知道這么復(fù)雜的鏈路里面到底哪個(gè)超時(shí)了?

它的原理,每次調(diào)用都有一個(gè)全局唯一的Trace lD,它里面包括了一些業(yè)務(wù)含義,比如當(dāng)時(shí)請(qǐng)求進(jìn)來的機(jī)器IP、請(qǐng)求發(fā)生時(shí)間、進(jìn)程ID等等,這些信息的加入,本身是為了保證全局唯一的特性。

另外一個(gè)是Span lD,是為了區(qū)分調(diào)用中是一個(gè)順序關(guān)系或者嵌套層次的關(guān)系。Trace Context是在哪里產(chǎn)生的?因?yàn)樗械恼?qǐng)求進(jìn)來都是在nginx,所以蘑菇街直接在nginx端做了插件,插件里面會(huì)產(chǎn)生Trace Context,它就會(huì)從請(qǐng)求進(jìn)來的最前方開始一直傳到最后面;它通過Servlet Filter去實(shí)現(xiàn)在前端加入外部應(yīng)用。

全鏈路監(jiān)控系統(tǒng)架構(gòu)

蘑菇街全鏈路監(jiān)控系統(tǒng)的架構(gòu)如圖所示。通過插件放在應(yīng)用集群,不管是PHP還是Java,日志都會(huì)在本地落款。本地落款相對(duì)通過網(wǎng)絡(luò)上傳會(huì)更安全一點(diǎn),出問題概率會(huì)小一點(diǎn)。

日志在本地落款之后再實(shí)時(shí)收集到Kafka,進(jìn)入Kafka之后數(shù)據(jù)分三份:

· 一份數(shù)據(jù)進(jìn)入Storm,然后進(jìn)入ES Index里;

· 一部分原始日志直接放在Infobright;

· 一部分?jǐn)?shù)據(jù)進(jìn)入到HPS

這個(gè)系統(tǒng)要支持多維查詢,數(shù)據(jù)一開始放到支持全文檢索的ES里,但ES數(shù)據(jù)不做壓縮,存儲(chǔ)成本很高。當(dāng)時(shí)數(shù)據(jù)一天有好幾T,存不了多久。后來用了Infobright,節(jié)約了很多成本,很好用。但I(xiàn)nfobright是開源版,有一個(gè)人為設(shè)置,寫數(shù)據(jù)的時(shí)候不能讀。另外它只能單線,速度很慢,讀一條日志需要6、7秒的情況。今年Q2,蘑菇街模仿Infobright做了一個(gè)類似存儲(chǔ)的東西,現(xiàn)在已經(jīng)差不多完成了,測(cè)試的結(jié)果性能還是相當(dāng)不錯(cuò)的,壓測(cè)率和Infobright差不多,速度很快。

Kafka另外一部分?jǐn)?shù)據(jù)進(jìn)入到HPS,主要是適應(yīng)不適合用Storm做實(shí)時(shí)計(jì)算的情況。

全鏈路監(jiān)控系統(tǒng)的作用

在蘑菇街 lurker 示意圖里,左邊可以看到整個(gè)鏈路呈豎狀的結(jié)構(gòu),1是1.1、1.2、1.3、1.4和1.5,1.4里面又有1.41,1.5調(diào)了1.51,每次調(diào)用服務(wù)、方法都寫在這里,時(shí)間后面有Timeline,整個(gè)調(diào)用關(guān)系一目了然。

?

除了調(diào)用關(guān)系之外, lurker 還能統(tǒng)計(jì)應(yīng)用信息。每次調(diào)用和被調(diào)用者都有一條固定的認(rèn)證關(guān)系,可以算出每個(gè)應(yīng)用的直接應(yīng)用來源、去向應(yīng)用的數(shù)量,蘑菇街稱之為“法拉力應(yīng)用”,每個(gè)時(shí)間點(diǎn)上QPS到底是多少,有沒有出錯(cuò),都可以在應(yīng)用信息統(tǒng)計(jì)上看到。假如調(diào)用了一個(gè)前端應(yīng)用,還可以看到URL是多少。假如調(diào)用了一個(gè)后端服務(wù),還能看到最最前面的應(yīng)用,就是最早進(jìn)來的URL,或者來源于哪幾個(gè)應(yīng)用。

利用監(jiān)控系統(tǒng),可以畫出所有應(yīng)用之間互相依賴的關(guān)系,并且把互相調(diào)用的比例也算出來。

lurker 帶有一個(gè)多維查詢的功能,有些業(yè)務(wù)方可能想根據(jù)某些特殊條件,比如應(yīng)用名、服務(wù)名、方法名、業(yè)務(wù)響應(yīng)碼或者是IP,都可以通過多維查詢搜出來。多維查詢的要求還是很高的,因?yàn)楹罄m(xù)查詢、后續(xù)數(shù)據(jù)存儲(chǔ)都是需要解決的問題。

lurker?尚需解決的問題

在開發(fā) lurker 的過程中,蘑菇街也碰到了一些問題:

· 數(shù)據(jù)存儲(chǔ)

· 跨線程傳遞trace context

· 前端應(yīng)用接入不全,導(dǎo)致后端應(yīng)用QPS不準(zhǔn)確

· 周期性任務(wù),鏈路路過?長(zhǎng),展示有問題

數(shù)據(jù)存儲(chǔ)問題如上文所說,歷經(jīng)幾版,希望我們最近研發(fā)的產(chǎn)品能夠撐住平臺(tái)上產(chǎn)生的巨大數(shù)據(jù)量。

第二是跨線程傳遞,因?yàn)閠race context從前端要往最后端傳,為了給業(yè)務(wù)方不產(chǎn)生影響,或者讓它們盡量沒有感知,我們就把trace context放在這里面。但會(huì)出現(xiàn)一個(gè)問題,假如中間的一些工具有自己的現(xiàn)成詞句,那就傳不過去,信息就丟失了,鏈路到這一步就斷掉了。我們想了幾個(gè)辦法,第一把trace context做的東西放進(jìn)去,但是業(yè)務(wù)方不知道去用,他們不愿意去用,覺得比較麻煩。第二去修改現(xiàn)成詞,直接把這些數(shù)據(jù)弄進(jìn)去,但是修改以后業(yè)務(wù)方覺得修改后的這些東西到底靠不靠譜?所以目前碰到這個(gè)問題的時(shí)候,基本上建議業(yè)務(wù)方手工傳一下,要不然在里面看不到。

第三個(gè)問題:前端應(yīng)用接入不全。在推這個(gè)產(chǎn)品的時(shí)候,沒有強(qiáng)制去接入,監(jiān)控系統(tǒng)強(qiáng)大了之后,所有的前端用戶都接入了,到后面的調(diào)用就沒有被記錄下來,所以后端應(yīng)用QPS不準(zhǔn)確。

最后是一些周期性任務(wù)。有一些任務(wù)鏈路比較長(zhǎng),比如一次跑一個(gè)小時(shí),可能調(diào)個(gè)1萬字也有可能,這個(gè)內(nèi)容展示會(huì)有些問題。

全面分析全鏈路壓測(cè)系統(tǒng)

全鏈路壓測(cè)的意義在前文已經(jīng)講過了,在于驗(yàn)證瓶頸是否存在,以及找出可能的瓶頸,具體來說有以下幾點(diǎn):

· 對(duì)線上真實(shí)環(huán)境進(jìn)行大流量演練

· 驗(yàn)證鏈路在超大流量系統(tǒng)里,容量和資源分配是否合理

· 找出鏈路中可能存在的瓶頸

· 驗(yàn)證網(wǎng)絡(luò)設(shè)備、集群容量和預(yù)案、限流策略

建立壓測(cè)模型

為了找到這個(gè)瓶頸,使蘑菇街的系統(tǒng)更加靈活,在設(shè)計(jì)壓測(cè)模型的時(shí)候會(huì)有一些考慮:壓測(cè)鏈路、壓測(cè)場(chǎng)景、流量模型、壓測(cè)任務(wù)、壓測(cè)腳本。

所謂鏈路,一個(gè)URL就是一個(gè)鏈路,場(chǎng)景是鏈路上一層的概念,一個(gè)場(chǎng)景可以有單個(gè)或者多個(gè)鏈路組合而成。在電商環(huán)境下,某些場(chǎng)景是可以復(fù)用的。

壓測(cè)場(chǎng)景以后,加上流量模型就可以構(gòu)成一個(gè)壓測(cè)任務(wù),流量模型就是壓測(cè)的時(shí)候流量怎么來,是一條直線比值壓,還是要階梯爬坡?

壓測(cè)任務(wù)又會(huì)轉(zhuǎn)化成壓測(cè)腳本,這是一一對(duì)應(yīng)的。

?

?

以支付里面的一個(gè)場(chǎng)景為例。支付收單是一個(gè)鏈路,流量從虛擬根節(jié)點(diǎn)進(jìn)來之后,100%流量會(huì)去到支付收單節(jié)點(diǎn),然后100%流量又會(huì)進(jìn)入到收銀臺(tái)渲染節(jié)點(diǎn),5%的流量會(huì)去A節(jié)點(diǎn),40%去B節(jié)點(diǎn),55%去C節(jié)點(diǎn),最后100%去D節(jié)點(diǎn)。通過鼠標(biāo)拽一下,一旦規(guī)定了入口接點(diǎn)是多少,就可以把整個(gè)場(chǎng)景規(guī)定下來。

?

?

電商場(chǎng)景是可以嵌套,比如3.21交易之后的全鏈路,里面包括了促銷壓測(cè)模型、交易模型、支付模型、支付成功頁(yè),這些全部可以復(fù)用。假如說業(yè)務(wù)場(chǎng)景的邏輯不變,下次大促時(shí)這一個(gè)場(chǎng)景直接可以附在上面。

壓測(cè)腳本做了二次改造,能夠支持這四種不同的協(xié)議。第一會(huì)做腳本的確認(rèn),第二是數(shù)據(jù)確認(rèn),可以上傳一些壓測(cè)數(shù)據(jù)。第三是開始之后狀態(tài)的檢控以及結(jié)果的展示。

全鏈路壓測(cè)系統(tǒng)架構(gòu)解析

?

蘑菇街的全鏈路壓測(cè)系統(tǒng)基于master slave開發(fā),搭建速度很快。

這里有一個(gè)比較坑的地方,系統(tǒng)僅僅是支持單master,一套系統(tǒng)部署起來只支持一個(gè)master,我們要盡量避免單點(diǎn)。當(dāng)時(shí)全鏈路壓測(cè)系統(tǒng)剛完成1.0版,第二周就要壓測(cè),當(dāng)時(shí)我們擔(dān)心這個(gè)master會(huì)不會(huì)貴?結(jié)果果真貴了。貴的原因是什么?它和slave有交互,全鏈路壓縮大概有100臺(tái)壓測(cè)機(jī),特別是當(dāng)壓力壓的比較大的時(shí)候,容易出錯(cuò)。

之后做了一些改造,包括實(shí)時(shí)回傳、發(fā)起壓測(cè)命令、上傳壓測(cè)數(shù)據(jù)、觀察壓測(cè)進(jìn)度、收集壓測(cè)結(jié)果。改造之后master好了很多。生成完了之后有一個(gè)數(shù)據(jù)工廠,它會(huì)自動(dòng)生成要壓測(cè)的那些數(shù)據(jù),比如商品流數(shù)據(jù)、交易數(shù)據(jù)、促銷數(shù)據(jù)都是從這個(gè)數(shù)據(jù)工廠里面來。

全鏈路壓測(cè)系統(tǒng)還有一個(gè)OSS Storage,用于存儲(chǔ)壓測(cè)腳本和壓測(cè)數(shù)據(jù)。OSS Storage有好幾個(gè)備份,而且能夠保障數(shù)據(jù)文件的安全,不需要再次關(guān)注。

全鏈路壓測(cè)系統(tǒng)也碰到一些問題。蘑菇街的場(chǎng)景非常大,場(chǎng)景里面有很多內(nèi)容定義,腳本會(huì)編譯成JVM方法,大小不能超過65535。解決方法是——拆場(chǎng)景,比如把交易支付拆成一個(gè)場(chǎng)景,把搜索拆成一個(gè)場(chǎng)景。假如有100臺(tái)機(jī)器,每一臺(tái)機(jī)器跑一個(gè)腳本,這樣就繞開腳本大小的限制了。

整個(gè)全鏈路壓測(cè)系統(tǒng)要表面單點(diǎn),它沒有辦法加載太大的壓測(cè)數(shù)據(jù)文件。有一些業(yè)務(wù)方會(huì)要求回訪現(xiàn)場(chǎng)數(shù)據(jù),一拿回來就是幾個(gè)G,這會(huì)需要非常長(zhǎng)的時(shí)間,所以不推薦。蘑菇街現(xiàn)在的應(yīng)對(duì)做法是把數(shù)據(jù)分割開。

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9294920.html

總結(jié)

以上是生活随笔為你收集整理的蘑菇街的稳定性实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。