每年雙十一,對買家來說是一場買買買的剁手之旅,但對于電商公司的技術(shù)人員來說,卻是一次嚴(yán)峻的技術(shù)期末考。如何保證系統(tǒng)在預(yù)估的流量洪峰來臨時,既能保證用戶的買買買不受影響,
促進(jìn)業(yè)務(wù)及營銷活動的目標(biāo)達(dá)成,又能用盡可能少的成本投入保障系統(tǒng)的穩(wěn)定可用性,是技術(shù)童鞋必須面對的挑戰(zhàn)。我司在雙十一來臨的最后關(guān)口完成了整個核心鏈路的全鏈路壓測,
大幅提高了核心鏈路的服務(wù)性能,并發(fā)布了最終優(yōu)化版本。在雙十一期間,也取得了一定的成果,期間包括技術(shù)、運(yùn)營、產(chǎn)品、行政等各部門都為之付出了很多努力。
下面的內(nèi)容,是從啟動到雙十一這段時間,我們在雙十一項(xiàng)目上所做的關(guān)于全鏈路壓測的一些實(shí)踐。
?
一、面臨的挑戰(zhàn)
從項(xiàng)目kickoff到雙十一活動開始,第一次雙十一大促,我們面臨著巨大的挑戰(zhàn)。
挑戰(zhàn)一:核心鏈路梳理
電商業(yè)務(wù)本身比較復(fù)雜,且當(dāng)前階段我們微服務(wù)架構(gòu)下,各個服務(wù)間依賴高,調(diào)用關(guān)系復(fù)雜,且沒有較為清晰的鏈路梳理,理論上來說,只有一部分系統(tǒng)才是核心鏈路。
所以,面臨的第一個挑戰(zhàn),就是從錯綜復(fù)雜的系統(tǒng)中梳理出核心業(yè)務(wù)鏈路。
挑戰(zhàn)二:環(huán)境成本高昂
按照業(yè)內(nèi)的實(shí)踐經(jīng)驗(yàn)和方案,全鏈路壓測都是在生產(chǎn)環(huán)境進(jìn)行,這樣測試的結(jié)果才能更貼近實(shí)際的生產(chǎn)場景。
但由于我們是第一次進(jìn)行全鏈路壓測,因此只能選擇折中方案——按照生產(chǎn)環(huán)境當(dāng)前的配置,搭建一套等配鏡像環(huán)境。
鏡像環(huán)境從資源準(zhǔn)備到服務(wù)部署聯(lián)調(diào)都比較耗時,且成本高昂,這逼迫我們必須拿到更好的結(jié)果,才能提高ROI。
挑戰(zhàn)三:流量評估困難
為了盡可能使壓測場景更貼近真實(shí)的生產(chǎn)場景,需要對核心鏈路的流量模型進(jìn)行比較準(zhǔn)確的評估和模型確認(rèn)。
由于各服務(wù)間依賴較高,且調(diào)用關(guān)系復(fù)雜,這對我們提出了新的挑戰(zhàn)——如何評估出更接近真實(shí)場景的流量模型。
挑戰(zhàn)四:任務(wù)多線開展
從雙十一啟動到結(jié)束,需要同時開展的任務(wù)較多。比如服務(wù)拆分、耦合任務(wù)遷移、DB&Redis垂直拆分、正常版本迭代、全鏈路壓測及性能優(yōu)化,以及新的業(yè)務(wù)線不斷拓展,這些都是我們需要面對并且克服的困難。
?
二、壓測的過程
啟動階段
1、任務(wù)規(guī)劃
項(xiàng)目kickoff后,在技術(shù)負(fù)責(zé)人牽頭下迅速確定了本次雙十一大促的TODO項(xiàng)。主要是如下幾項(xiàng):
前端:降級點(diǎn)確認(rèn)、容錯保護(hù)、監(jiān)控?cái)?shù)據(jù)接入;
后端:核心鏈路梳理、監(jiān)控&服務(wù)保護(hù)接入、專項(xiàng)預(yù)案、
測試:資源準(zhǔn)備、壓測模型梳理、壓測方案、全鏈路壓測、預(yù)案演練、線上功能驗(yàn)證;
基礎(chǔ)架構(gòu):架構(gòu)優(yōu)化、網(wǎng)關(guān)替換、DB垂直拆分、基礎(chǔ)設(shè)施接入(鏈路追蹤、監(jiān)控、報(bào)警......);
資源保障:容量規(guī)劃、鏡像環(huán)境搭建、服務(wù)部署聯(lián)調(diào)、線上擴(kuò)容;
2、估時排期
確認(rèn)任務(wù)規(guī)劃后,各個技術(shù)團(tuán)隊(duì)迅速組織協(xié)調(diào)資源投入了各自的工作。由于雙十一迫在眉睫,且待辦事項(xiàng)較多,故按照時間進(jìn)行任務(wù)估時倒排。
準(zhǔn)備階段
在準(zhǔn)備階段,按照任務(wù)規(guī)劃拆解出來的細(xì)化任務(wù)進(jìn)行同步開展,下面是準(zhǔn)備階段我們開展的主要事項(xiàng)。
1、核心鏈路梳理
各業(yè)務(wù)研發(fā)團(tuán)隊(duì)的owner對我們目前的核心業(yè)務(wù)鏈路進(jìn)行了梳理,主要包括:首頁、商品、訂單、支付、用戶、風(fēng)控、優(yōu)惠券、大促活動、基礎(chǔ)服務(wù)。下面為示意圖表:
2、鏡像環(huán)境準(zhǔn)備
由于本次壓測是在和生產(chǎn)等配的鏡像環(huán)境進(jìn)行,相當(dāng)于從零開始搭建一套環(huán)境,無論是資源準(zhǔn)備、服務(wù)部署還是服務(wù)聯(lián)調(diào)驗(yàn)證,都耗費(fèi)了較多的時間,從中也發(fā)現(xiàn)了我們之前的一些不足,累積了很多經(jīng)驗(yàn)。
3、壓測任務(wù)排期
根據(jù)大促任務(wù)規(guī)劃,性能測試同學(xué)從中拆解出了較為詳細(xì)的壓測任務(wù),并進(jìn)行排期,同時積極主動的推動了整個壓測任務(wù)的開展實(shí)施。
4、專項(xiàng)預(yù)案溝通
專項(xiàng)預(yù)案主要包括如下幾項(xiàng):限流、降級、熔斷、脈沖、破壞性驗(yàn)證五種場景。在服務(wù)治理這一項(xiàng),基礎(chǔ)架構(gòu)的同學(xué)接入了sentinel進(jìn)行相關(guān)管理。
5、大促指標(biāo)溝通
為保證壓測流量和生產(chǎn)預(yù)估流量對齊,由技術(shù)負(fù)責(zé)人牽頭,和運(yùn)營產(chǎn)品同學(xué)進(jìn)行了多次溝通,確認(rèn)了本次雙十一大促活動相關(guān)的活動場次、時間段、優(yōu)惠券投放量、預(yù)估DAU等相關(guān)關(guān)鍵指標(biāo)。
6、壓測模型梳理
壓測模型的梳理,主要包括核心業(yè)務(wù)鏈路的優(yōu)先級、調(diào)用依賴關(guān)系、流量模型轉(zhuǎn)化(漏斗模型)等,限于保密措施,這里不過多介紹。
7、流量模型梳理
關(guān)于流量模型,建議梳理出核心交易鏈路對應(yīng)的依賴大圖,并粗估雙十一峰值數(shù)據(jù),作為接下來壓測、性能優(yōu)化的技術(shù)目標(biāo)。
8、線上容量評估
為了在壓測開展前對目前線上的服務(wù)容量有一個初步的了解,需要對各個核心服務(wù)、消息隊(duì)列、緩存以及DB的容量進(jìn)行了梳理匯總。
9、線上鏈路監(jiān)控
監(jiān)控就是我們的眼睛,有了監(jiān)控,才能快速發(fā)現(xiàn)問題并定位修復(fù)問題。這一點(diǎn),基礎(chǔ)架構(gòu)的同學(xué)為此做了很多工作。比如:鏈路追蹤監(jiān)控的Cat、可視化監(jiān)控大盤Grafana以及更多的監(jiān)控組件。
10、壓測數(shù)據(jù)準(zhǔn)備
為了盡可能保證壓測數(shù)據(jù)的真實(shí)性,我們的解決方案是復(fù)制生產(chǎn)庫的數(shù)據(jù),進(jìn)行脫敏和可用性驗(yàn)證,用來做壓測的基礎(chǔ)數(shù)據(jù)。在數(shù)據(jù)脫敏和可用性驗(yàn)證這點(diǎn)需要高度重視。
11、資損防控梳理
由于現(xiàn)在雙十一大促活動主要玩法都是優(yōu)惠券以及滿減相關(guān),且涉及到訂單支付業(yè)務(wù),因此資損防控也是準(zhǔn)備階段的重中之重。
12、確定性能水位
為了精確測定各服務(wù)單機(jī)的水位性能,并留存一定的buffer作為流量高峰時刻的緩沖,結(jié)合業(yè)內(nèi)經(jīng)驗(yàn)和我們當(dāng)前的系統(tǒng)情況,最終確定以單機(jī)40%的水位性能作為線上擴(kuò)容和容量規(guī)劃的驗(yàn)收標(biāo)準(zhǔn)。
13、輸出測試方案
前期做了相當(dāng)多的準(zhǔn)備工作,在正式開展全鏈路壓測之前,性能測試同學(xué)輸出了本次雙十一全鏈路壓測的測試方案,通過評審后,全鏈路壓測工作就可以正式開展。
?
實(shí)施階段
在全鏈路壓測實(shí)施階段,根據(jù)測試場景和采用的測試策略,我們主要進(jìn)行了如下的工作。
1、單機(jī)單鏈路基準(zhǔn)測試
在目前的微服務(wù)架構(gòu)下,整體鏈路的性能瓶頸,取決于短板(木桶原理)。因此,單機(jī)單鏈路基準(zhǔn)測試的目的,是在全鏈路壓測開始前進(jìn)行性能摸底,定位排查鏈路瓶頸。
2、單機(jī)混合鏈路水位驗(yàn)證
單機(jī)混合鏈路壓測的目的,是排查上下游調(diào)用依賴的瓶頸,并以此測試結(jié)果作為限流預(yù)案的基準(zhǔn)值。
3、全鏈路壓測演練
全鏈路壓測作為備戰(zhàn)雙十一的重中之重,是今年雙十一大促項(xiàng)目的基礎(chǔ)保障。在整個實(shí)施階段,需要不斷的壓測,排查定位分析問題并進(jìn)行優(yōu)化,
對最終的線上發(fā)布和容量規(guī)劃提供了支持。
4、專項(xiàng)演練
專項(xiàng)演練主要是針對服務(wù)限流降級熔斷以及高可用、服務(wù)擴(kuò)容進(jìn)行驗(yàn)證。進(jìn)行演練的目的主要有如下幾項(xiàng):
①、驗(yàn)證預(yù)案是否生效;
②、針對預(yù)案設(shè)定閾值進(jìn)行測試調(diào)優(yōu);
③、驗(yàn)證預(yù)案生效時服務(wù)本身的性能表現(xiàn);
④、針對上述專項(xiàng)場景進(jìn)行實(shí)戰(zhàn)演練;
5、穩(wěn)定性測試
穩(wěn)定性測試的目的,是驗(yàn)證系統(tǒng)處于負(fù)載情況下,能否長時間提供穩(wěn)定可用的服務(wù)能力。
6、每日問題復(fù)盤
在備戰(zhàn)雙十一期間,會針對每天壓測發(fā)現(xiàn)的問題進(jìn)行復(fù)盤追蹤,盡可能讓性能問題及時解決。
發(fā)布階段
經(jīng)過閉關(guān)作戰(zhàn)半個月,針對我們的核心業(yè)務(wù)鏈路,進(jìn)行了多輪的壓測和性能優(yōu)化,各系統(tǒng)qps已經(jīng)基本達(dá)到了預(yù)定的目標(biāo)(等比例),TPS整體提升3倍以上。
在雙十一峰值流量期來臨之前,做最終的線上擴(kuò)容和優(yōu)化版本發(fā)布。針對雙十一,我們還做了預(yù)案的梳理并提前執(zhí)行、服務(wù)降級、緩存預(yù)熱、job任務(wù)降級錯峰處理。
?
三、收獲與思考
整個過程中,大部分同學(xué)都是沒有全鏈路壓測實(shí)戰(zhàn)經(jīng)驗(yàn)的,但每個人都迸發(fā)出了巨大的能量。整個過程中發(fā)現(xiàn)了很多存在的問題,但還是有很多是值得改進(jìn)的地方,比如:
時間緊促,留給性能瓶頸定位和優(yōu)化的時間太少,后續(xù)可以考慮測試左移;
對一些問題定位排查工具的使用姿勢應(yīng)該熟練,對流量的預(yù)估應(yīng)該更加準(zhǔn)確;
項(xiàng)目的推進(jìn)方面得積極主動,大家都應(yīng)該有owner意識;
總之,生產(chǎn)的穩(wěn)定性是服務(wù)的基石,尤其對我們性能來說穩(wěn)定壓倒一切!
?
四、未來的規(guī)劃
為了保障明年的618大促、雙11大促,同時為了應(yīng)對業(yè)務(wù)快速發(fā)展,訪問流量的劇增,我們已經(jīng)開展了全鏈路壓測平臺的建設(shè)工作,
后續(xù)會不斷投入精力去完善,希望可以將壓測變成:
輪詢化:線上鏈路測試機(jī)器人,實(shí)時監(jiān)控,檢測生產(chǎn)服務(wù);
常規(guī)化:減少人力成本投入;
日常化:盡可能白天完成壓測工作,畢竟熬夜不利于身體健康;
圖形化:鏈路壓測規(guī)劃圖形化展示,與業(yè)務(wù)結(jié)合,一鍵完成數(shù)據(jù)準(zhǔn)備工作。
?
以上就是我經(jīng)歷的一次從零開始的全鏈路壓測過程中的一些經(jīng)驗(yàn)和收獲,內(nèi)容僅供參考。。。
?
熱門工具 換一換