ZLJ賣場(chǎng)-全鏈路壓測(cè)演進(jìn)
作者|莊錦弟
原ZLJ賣場(chǎng)的壓測(cè)流程,是依托于阿里云PTS工具,團(tuán)隊(duì)自身缺乏性能測(cè)試能力自建,缺少性能分析和數(shù)據(jù)沉淀,測(cè)試場(chǎng)景單一,只有單接口和多接口壓測(cè),缺少場(chǎng)景和鏈路壓測(cè),不能相對(duì)合理的評(píng)估系統(tǒng)性能承載能力,機(jī)器擴(kuò)容只憑借經(jīng)驗(yàn)進(jìn)行增加調(diào)整,缺乏評(píng)估依據(jù)。
什么是全鏈路壓測(cè)
當(dāng)接手ZLJ賣場(chǎng)所有業(yè)務(wù)性能測(cè)試后,重新調(diào)整性能測(cè)試流程和規(guī)范,每個(gè)項(xiàng)目進(jìn)行登記,不再是單一接口壓測(cè),都需要制定對(duì)應(yīng)的壓測(cè)場(chǎng)景,后續(xù)在雙十一、雙十二大促的時(shí)候,也把全鏈路壓測(cè)場(chǎng)景補(bǔ)充進(jìn)來(lái)。在此之前,自已也有了解過(guò)一些大廠的全鏈路壓測(cè)相關(guān)資料,感覺(jué)大同小異,差不多都是根據(jù)業(yè)務(wù)特性進(jìn)行全場(chǎng)的壓測(cè),各場(chǎng)景流量大小配置,數(shù)據(jù)模型,性能分析等等。
業(yè)內(nèi)通用標(biāo)準(zhǔn):基于實(shí)際的生產(chǎn)業(yè)務(wù)場(chǎng)景、系統(tǒng)環(huán)境,模擬海量的用戶請(qǐng)求和數(shù)據(jù)對(duì)整個(gè)業(yè)務(wù)鏈進(jìn)行壓力測(cè)試,并持續(xù)調(diào)優(yōu)的過(guò)程。
要精準(zhǔn)衡量業(yè)務(wù)承載能力,全鏈路壓測(cè)就需要做到保持跟生產(chǎn)環(huán)境一樣:用戶規(guī)模、業(yè)務(wù)場(chǎng)景、業(yè)務(wù)量級(jí)和流量來(lái)源,目的是讓服務(wù)系統(tǒng)提前進(jìn)行峰值承載能力演練,從而達(dá)到精準(zhǔn)衡量業(yè)務(wù)實(shí)際處理能力的目標(biāo),其關(guān)鍵核心:壓測(cè)環(huán)境、測(cè)試數(shù)據(jù)、壓測(cè)流量(模型)、流量發(fā)起、問(wèn)題定位、分析并調(diào)優(yōu)。
介入全鏈路壓測(cè)的時(shí)機(jī)
在可以預(yù)期的一段時(shí)間(如雙十一、雙十二),業(yè)務(wù)會(huì)有較快速的發(fā)展,線上機(jī)器必須要大幅度擴(kuò)容
機(jī)器擴(kuò)容以倍數(shù)增長(zhǎng),評(píng)估機(jī)器性能是否翻倍
繼續(xù)擴(kuò)容后,服務(wù)能力不一定翻倍增長(zhǎng),有可能會(huì)受限于其他的依賴關(guān)系,如 DB、redis、其他中間件等
ps:業(yè)務(wù)的不斷發(fā)展,依賴的模塊不斷增多,需要找出短板來(lái)進(jìn)行解決
業(yè)務(wù)線各模塊之間交互越來(lái)越多
無(wú)法單純以單業(yè)務(wù)場(chǎng)景的處理能力來(lái)評(píng)估接口的服務(wù)能力
ps:接口的服務(wù)能力取決于模塊中最低的那個(gè)《木桶理論》
對(duì)單機(jī)壓測(cè)結(jié)果不夠準(zhǔn)確
性能測(cè)試思路
性能模型設(shè)計(jì),是什么產(chǎn)品需求,有哪些業(yè)務(wù)接口,業(yè)務(wù)量多大,可以參考以往業(yè)務(wù)數(shù)據(jù)和壓測(cè)數(shù)據(jù)
測(cè)試數(shù)據(jù)及壓測(cè)腳本的準(zhǔn)備,造測(cè)試用戶,添加為白名單,在壓測(cè)腳本上添加標(biāo)簽和隨機(jī)數(shù),作為運(yùn)營(yíng)策略過(guò)濾條件
確定壓測(cè)時(shí)間段
壓測(cè)需求對(duì)應(yīng)的關(guān)聯(lián)業(yè)務(wù),要把對(duì)應(yīng)技術(shù)負(fù)責(zé)人通知到位,確保壓測(cè)期間有人支持
壓測(cè)過(guò)程,根據(jù)業(yè)務(wù)接口的調(diào)用比例, 采用逐步加壓,直接并發(fā)方式,獲取性能拐點(diǎn),確認(rèn)最終壓測(cè)用戶數(shù)
監(jiān)控工具,壓測(cè)過(guò)程中性能指標(biāo)實(shí)時(shí)壓測(cè)監(jiān)控,服務(wù)器監(jiān)控,被調(diào)用鏈路監(jiān)控等監(jiān)控工具,可以了解到各系統(tǒng)之間的調(diào)用鏈路,方便定位性能問(wèn)題
整理壓測(cè)報(bào)告,備注說(shuō)明性能問(wèn)題,需要跟進(jìn)處理事項(xiàng),什么時(shí)間點(diǎn)優(yōu)化完再重新復(fù)測(cè)
壓測(cè)結(jié)束,清理壓測(cè)數(shù)據(jù)(設(shè)置數(shù)據(jù)過(guò)期時(shí)間)
參與人員,運(yùn)維(支持環(huán)境擴(kuò)容和環(huán)境問(wèn)題解決);研發(fā)(支持服務(wù)業(yè)務(wù)梳理,代碼問(wèn)題解決);DBA(數(shù)據(jù)問(wèn)題處理,數(shù)據(jù)庫(kù)、緩存問(wèn)題處理);測(cè)試(功能業(yè)務(wù)梳理,性能測(cè)試);運(yùn)營(yíng)(提供業(yè)務(wù)數(shù)據(jù),配置活動(dòng)數(shù)據(jù))。整個(gè)壓測(cè)過(guò)程離不開(kāi)相關(guān)成員的支持和協(xié)助
全鏈路壓測(cè)開(kāi)展

1、環(huán)境確認(rèn)
接到壓測(cè)需求之后,最關(guān)鍵的是要確認(rèn)目標(biāo)壓測(cè)的環(huán)境,這個(gè)環(huán)節(jié)非常重要,因?yàn)楣緵Q定使用生產(chǎn)環(huán)境進(jìn)行壓測(cè),所以當(dāng)時(shí)確定在生產(chǎn)環(huán)境上做性能測(cè)試,在后續(xù)各種準(zhǔn)入條件都是要基于生產(chǎn)環(huán)境進(jìn)行準(zhǔn)備。
為什么選擇在生產(chǎn)環(huán)境做壓測(cè)?
模擬真實(shí)用戶訪問(wèn)流量
通過(guò)公網(wǎng)訪問(wèn)到服務(wù),直接暴露服務(wù)依賴之間的調(diào)用關(guān)系,不會(huì)因?yàn)榄h(huán)境影響調(diào)用
通過(guò)模擬真實(shí)流量,有利于機(jī)器容量得到充分評(píng)估
生產(chǎn)環(huán)境機(jī)器充分且配置較好,可承受最大壓測(cè)數(shù)量,從而推斷出生產(chǎn)可承受的最大壓力容量
節(jié)省重新配置一套壓測(cè)環(huán)境的成本,考慮到壓測(cè)環(huán)境需要與生產(chǎn)環(huán)境幾乎一樣的配置,成本也是不低的
生產(chǎn)環(huán)境的版本是最穩(wěn)定的,不會(huì)因?yàn)樾屡f版本而影響功能
節(jié)約人力維護(hù)成本,按照以往測(cè)試經(jīng)驗(yàn),在壓測(cè)環(huán)境去部署版本和準(zhǔn)備數(shù)據(jù),前期準(zhǔn)備的時(shí)間周期比較長(zhǎng),且需要長(zhǎng)期維護(hù),人力成本較高
鏈路梳理
鏈路是一個(gè)業(yè)務(wù)的核心,根據(jù)業(yè)務(wù)特性要快速梳理清楚
鏈路梳理,難點(diǎn)在于服務(wù)依賴的邊界
示例:首頁(yè)-》商列 ? 首頁(yè)跳轉(zhuǎn)到商列,商列服務(wù)又會(huì)查詢商品相關(guān)服務(wù)數(shù)據(jù)商列-》第三方服務(wù)(簡(jiǎn)稱S) ?商列除了查詢商品相關(guān)服務(wù)數(shù)據(jù),還會(huì)調(diào)用到依賴服務(wù)S,這里就涉及服務(wù)依賴的邊界,這也是在梳理鏈路時(shí)必須清楚的。
(1)真實(shí)性和可用性:可以從生產(chǎn)環(huán)境獲取完整數(shù)據(jù)(歷史數(shù)據(jù)),作為壓測(cè)的基礎(chǔ)數(shù)據(jù),通過(guò)分析歷史數(shù)據(jù)增長(zhǎng)趨勢(shì),作為預(yù)估判斷基準(zhǔn)
(2)數(shù)據(jù)脫敏:生產(chǎn)環(huán)境的全鏈路壓測(cè),要考慮到不能對(duì)生產(chǎn)環(huán)境造成影響和不能影響用戶體驗(yàn)等,因此在數(shù)據(jù)準(zhǔn)備時(shí),需要進(jìn)行數(shù)據(jù)脫敏
(3)數(shù)據(jù)隔離:不要污染正常數(shù)據(jù),梳理數(shù)據(jù)處理的每一個(gè)環(huán)節(jié)
提前準(zhǔn)備一批壓測(cè)用戶(白名單)
準(zhǔn)備優(yōu)惠券數(shù)據(jù)(支持多個(gè)用戶不限制領(lǐng)券次數(shù);判斷條件只給特定壓測(cè)用戶領(lǐng)取)
選用特定商品(過(guò)濾正式商戶商品)
訂單數(shù)據(jù)根據(jù)壓測(cè)用戶進(jìn)行過(guò)濾,生成訂單數(shù)據(jù)取消或者刪除
(4)在鏈路的基礎(chǔ)上,也有很多的分支業(yè)務(wù),而這些分支業(yè)務(wù)有的需要壓測(cè),有的不需要壓測(cè),如以下業(yè)務(wù)可考慮不壓測(cè):
給用戶下放 push 消息 ,這是定時(shí)執(zhí)行批量任務(wù),可以不用壓測(cè),本身push數(shù)據(jù)量是通過(guò)異步隊(duì)列處理,不是業(yè)務(wù)接口發(fā)起的
短信?,①短信跟push消息差不多,而且短信收費(fèi)的,如果壓測(cè)會(huì)產(chǎn)生無(wú)數(shù)條短信,費(fèi)用不低;②會(huì)產(chǎn)生很多無(wú)用的垃圾短信
支付,支付會(huì)涉及到調(diào)用第三方,可能有人想通過(guò)mock數(shù)據(jù)實(shí)現(xiàn),這也是一種壓測(cè)方式,但是壓測(cè)出來(lái)的結(jié)果跟實(shí)際對(duì)比肯定是有差異的,涉及生產(chǎn)環(huán)境,支付是不做壓測(cè)的
3、設(shè)計(jì)數(shù)據(jù)模型
預(yù)估數(shù)據(jù)模型
通過(guò)2/8定律計(jì)算吞吐量模型:80%請(qǐng)求數(shù)/20%時(shí)間=預(yù)期TPS
舉個(gè)例子說(shuō)明,假設(shè)以下數(shù)據(jù):
業(yè)務(wù)量預(yù)估模型,根據(jù)運(yùn)營(yíng)投放的業(yè)務(wù)量,統(tǒng)計(jì)各大促活動(dòng)階段的數(shù)據(jù)模塊

QPS預(yù)估模型,結(jié)合業(yè)務(wù)預(yù)估模型,統(tǒng)計(jì)各大促階段的峰值qps,預(yù)估下一階段大促活動(dòng)的qps

4、壓測(cè)平臺(tái)
(1)jmeter提供分布式壓測(cè)的方式(壓測(cè)平臺(tái)運(yùn)行模式是調(diào)用jmeter內(nèi)核)、壓測(cè)數(shù)據(jù)結(jié)合性能監(jiān)控平臺(tái)能夠?qū)崟r(shí)的收集、可以隨時(shí)停止壓測(cè)、一定時(shí)間內(nèi)實(shí)時(shí)錯(cuò)誤率達(dá)到閾值自動(dòng)熔斷等。考慮到壓測(cè)量較大的情況,測(cè)試結(jié)果異步處理。壓測(cè)平臺(tái)提供的能力是發(fā)起訪問(wèn)流量。

(2)代碼改造:構(gòu)造白名單用戶(壓測(cè)用戶,作為過(guò)濾條件),請(qǐng)求打上特殊的標(biāo)記、隨機(jī)數(shù)等等。因?yàn)榭紤]實(shí)際成本問(wèn)題,沒(méi)有配置影子庫(kù),只能通過(guò)特殊標(biāo)記和壓測(cè)用戶,過(guò)濾掉臟數(shù)據(jù),以免影響正常運(yùn)營(yíng)業(yè)務(wù)統(tǒng)計(jì)。
下單接口帶入key:create_xxxxx_xxx_lock_key過(guò)濾白名單用戶鎖定10秒
提供壓測(cè)分支,修改某個(gè)功能的判斷邏輯等
5、容量規(guī)劃
雙十一、雙十二 大促活動(dòng),公司的運(yùn)營(yíng)活動(dòng),專場(chǎng)活動(dòng)…… 業(yè)務(wù)場(chǎng)景復(fù)雜,推送數(shù)據(jù)量大等等特點(diǎn)針對(duì)業(yè)務(wù)場(chǎng)景越發(fā)復(fù)雜化、海量數(shù)據(jù)沖擊下整個(gè)業(yè)務(wù)系統(tǒng)鏈的可用性、服務(wù)能力的瓶頸,讓技術(shù)更好的服務(wù)業(yè)務(wù),創(chuàng)造更多的價(jià)值
容量規(guī)劃的目的,主要是讓各業(yè)務(wù)系統(tǒng)能明確知道:什么時(shí)候該加機(jī)器、什么時(shí)候該減機(jī)器?雙十一,雙十二等大促場(chǎng)景需要準(zhǔn)備多少機(jī)器,既要保障系統(tǒng)穩(wěn)定性、又要考慮節(jié)約成本。容量規(guī)劃四階段:
業(yè)務(wù)流量預(yù)估:通過(guò)歷史數(shù)據(jù)分析,設(shè)計(jì)業(yè)務(wù)預(yù)估模型,預(yù)估在某一個(gè)時(shí)間點(diǎn)業(yè)務(wù)的訪問(wèn)量會(huì)有多大
機(jī)器容量評(píng)估:初步計(jì)算每一個(gè)服務(wù)系統(tǒng)現(xiàn)有多少臺(tái)機(jī)器,預(yù)計(jì)需要增加多少機(jī)器
機(jī)器容量的精調(diào):通過(guò)全鏈路壓測(cè)手段來(lái)模擬大促時(shí)刻的用戶行為,對(duì)各服務(wù)系統(tǒng)的容量進(jìn)行精確調(diào)整
流量控制:對(duì)各服務(wù)系統(tǒng)(目標(biāo)服務(wù)和被依賴服務(wù))配置限流閾值等保護(hù)措施,防止實(shí)際的業(yè)務(wù)流量超過(guò)預(yù)估業(yè)務(wù)流量的情況下,導(dǎo)致服務(wù)系統(tǒng)無(wú)法正常運(yùn)行等
雙十一之前,組織各業(yè)務(wù)技術(shù)負(fù)責(zé)人把相關(guān)服務(wù)分布,以及服務(wù)依賴情況,環(huán)境設(shè)備的情況進(jìn)行一系列梳理,統(tǒng)計(jì)各業(yè)務(wù)領(lǐng)域歷史高峰數(shù)據(jù),進(jìn)行初步評(píng)估。
根據(jù)需求計(jì)劃,把相關(guān)業(yè)務(wù)接口進(jìn)行梳理,并制定壓測(cè)場(chǎng)景(性能策略、性能測(cè)試方案)和壓測(cè)計(jì)劃。
容量二次評(píng)估
通過(guò)業(yè)務(wù),了解大促期間業(yè)務(wù)量多少(push量),預(yù)估qps比現(xiàn)有高峰qps大3-6倍,計(jì)算并發(fā)預(yù)計(jì)達(dá)到多少?
進(jìn)行一輪基準(zhǔn)壓測(cè),收集和統(tǒng)計(jì)業(yè)務(wù)領(lǐng)域峰值qps,再進(jìn)行綜合評(píng)估。
進(jìn)行到 (業(yè)務(wù)流量預(yù)估階段)、(系統(tǒng)容量評(píng)估階段),我們完成了系統(tǒng)容量的粗略評(píng)估,做到這一步還不夠,真實(shí)的場(chǎng)景并非如此 我們需要做精準(zhǔn)的容量規(guī)劃,給服務(wù)做限流降級(jí)提供數(shù)據(jù)參考。
6、場(chǎng)景壓測(cè)-服務(wù)承載能力
獲取單臺(tái)機(jī)器的服務(wù)能力
為了精準(zhǔn)地獲取到單臺(tái)機(jī)器的服務(wù)能力,壓力測(cè)試都是直接在生產(chǎn)環(huán)境進(jìn)行,這有兩個(gè)非常重要的原因:?jiǎn)螜C(jī)壓測(cè)既需要保證環(huán)境的真實(shí)性,又要保證流量的真實(shí)性
模擬請(qǐng)求:通過(guò)對(duì)生產(chǎn)環(huán)境的某一臺(tái)機(jī)器發(fā)起壓測(cè)請(qǐng)求,以此來(lái)計(jì)算單機(jī)能力,從而達(dá)到壓力測(cè)試的目的
壓測(cè)工具:壓測(cè)平臺(tái)(綁定生產(chǎn)機(jī)器host,壓測(cè)請(qǐng)求指定到目標(biāo)被壓測(cè)機(jī)器)
選用場(chǎng)景:服務(wù)調(diào)用量比較大的場(chǎng)景
特點(diǎn):壓測(cè)后輸出的壓測(cè)結(jié)果非常精準(zhǔn),且不會(huì)在其他機(jī)器上產(chǎn)生臟數(shù)據(jù)
負(fù)載均衡:Nginx修改負(fù)載均衡設(shè)備的權(quán)重,請(qǐng)求流量指定到單獨(dú)的被壓測(cè)機(jī)器上
ps:在進(jìn)行壓測(cè)的同時(shí),實(shí)時(shí)探測(cè)壓測(cè)機(jī)器的系統(tǒng)負(fù)載,一旦服務(wù)系統(tǒng)負(fù)載達(dá)到預(yù)設(shè)的閾值立刻停止壓測(cè),同時(shí)輸出一份壓測(cè)報(bào)告,通過(guò)單機(jī)壓測(cè)獲取的單機(jī)服務(wù)能力值也是容量規(guī)劃一個(gè)非常重要的參考依據(jù)
計(jì)算公式:最小機(jī)器數(shù) = 預(yù)估的業(yè)務(wù)流量量 / 單機(jī)服務(wù)能力

根據(jù)業(yè)務(wù)數(shù)據(jù)、評(píng)估初步容量和經(jīng)過(guò)單機(jī)壓測(cè)的結(jié)果,把各業(yè)務(wù)領(lǐng)域單獨(dú)進(jìn)行峰值壓測(cè)(性能策略和性能測(cè)試方案在前期已經(jīng)準(zhǔn)備充分),采用逐步加壓,直接并發(fā)方式,獲取性能拐點(diǎn),壓測(cè)過(guò)程各方依賴調(diào)用量也會(huì)逐步呈現(xiàn)明確的數(shù)據(jù)。測(cè)試場(chǎng)景有單獨(dú)存在的,也有相互依賴的關(guān)系,有以下驗(yàn)證場(chǎng)景:
單接口場(chǎng)景:抽取單接口進(jìn)行壓測(cè),獲取接口本身qps,以及單機(jī)服務(wù)系統(tǒng)承載能力
頁(yè)面場(chǎng)景:獨(dú)立頁(yè)面接口進(jìn)行歸整,把頁(yè)面請(qǐng)求包含的多個(gè)接口組成一個(gè)頁(yè)面場(chǎng)景,其中接口也會(huì)有依賴其他服務(wù),形成一條鏈路,對(duì)頁(yè)面場(chǎng)景壓測(cè),主要是評(píng)估頁(yè)面訪問(wèn)流量對(duì)服務(wù)承載的壓力,壓測(cè)結(jié)果基本可以明確各業(yè)務(wù)場(chǎng)景具體的qps峰值
獲取鏈路壓測(cè)綜合能力

鏈路場(chǎng)景:把單個(gè)接口場(chǎng)景、多個(gè)單接口場(chǎng)景和多個(gè)頁(yè)面場(chǎng)景進(jìn)行結(jié)合,按照業(yè)務(wù)場(chǎng)景劃分,根據(jù)頁(yè)面訪問(wèn)量情況:
流量從大到小,對(duì)各個(gè)壓測(cè)場(chǎng)景進(jìn)行調(diào)整壓測(cè)線程數(shù)(遞增,并發(fā)),類似于:首頁(yè)>商品列表>商品詳情>購(gòu)物車>訂單>支付,目的是為了把各服務(wù)調(diào)用能力進(jìn)行全面評(píng)估。
7、流程注意事項(xiàng)
(1)業(yè)務(wù)中需要區(qū)分流量(正常流量/壓測(cè)流量)
(2)接收和發(fā)送 http / grpc 等請(qǐng)求
在向下游服務(wù)發(fā)起請(qǐng)求時(shí),增加隨機(jī)數(shù)透?jìng)骶彺鏀?shù)據(jù)
接收到壓測(cè)流量,使用相應(yīng)的壓測(cè)數(shù)據(jù)
(3)依賴模塊
MySQL:備份業(yè)務(wù)數(shù)據(jù),主庫(kù)從庫(kù)讀寫分離,壓測(cè)數(shù)據(jù)過(guò)濾;壓測(cè)完成后,清理數(shù)據(jù)
Redis:同 MySQL
(4)不需要參與壓測(cè)的做 mock 處理
給用戶發(fā)push、短信、支付……
8、性能監(jiān)控及問(wèn)題定位分析
(1)監(jiān)控工具
k8s資源監(jiān)控:k8s群集監(jiān)控,cpu,網(wǎng)絡(luò),pod節(jié)點(diǎn),內(nèi)存
kvm資源監(jiān)控:宿主機(jī)群集監(jiān)控,cpu,磁盤IO,網(wǎng)絡(luò),內(nèi)存
訪問(wèn)量集群列表監(jiān)控:cpu,網(wǎng)絡(luò),內(nèi)存,磁盤IO,JVM,redis……
nlog日志監(jiān)控:業(yè)務(wù)領(lǐng)域訪問(wèn)流量,響應(yīng)時(shí)間,請(qǐng)求分布,請(qǐng)求接口
壓測(cè)實(shí)時(shí)監(jiān)控:tps,響應(yīng)時(shí)間,請(qǐng)求數(shù),錯(cuò)誤率,錯(cuò)誤請(qǐng)求數(shù),請(qǐng)求接口,錯(cuò)誤接口
數(shù)據(jù)庫(kù)監(jiān)控:數(shù)據(jù)庫(kù)群集監(jiān)控,主庫(kù),從庫(kù),讀書能力,慢sql,cpu,內(nèi)存
調(diào)用量調(diào)整(限流)
問(wèn)題現(xiàn)象:壓測(cè)過(guò)程qps出現(xiàn)階段性下降,響應(yīng)時(shí)間階段性上升
例如:商品服務(wù)調(diào)用scf服務(wù),scf服務(wù)設(shè)定調(diào)用量是8萬(wàn)/分鐘,壓測(cè)300秒,當(dāng)商品qps達(dá)1400/s左右,scf服務(wù)出現(xiàn)4次限流,被限流請(qǐng)求走原邏輯(es查詢),可以計(jì)算出實(shí)際調(diào)用量為8.4萬(wàn)/s,要確保商品服務(wù)請(qǐng)求量在達(dá)到峰值不出現(xiàn)被限流的情況,需要把scf調(diào)整量提高到10萬(wàn)/分鐘。當(dāng)商品qps需要達(dá)到4000/s,那scf服務(wù)調(diào)用量至少需要調(diào)整到25萬(wàn)/分鐘。當(dāng)然調(diào)用量不是越大越好,需要考慮被調(diào)用方服務(wù)實(shí)際的承載能力和機(jī)器容量情況,如達(dá)不到25萬(wàn)調(diào)用量承載能力,應(yīng)當(dāng)設(shè)定限流閥值。

應(yīng)用降級(jí)
問(wèn)題現(xiàn)象:壓測(cè)關(guān)鍵業(yè)務(wù)場(chǎng)景時(shí),發(fā)現(xiàn)存在一些邊緣業(yè)務(wù)的接口
排查手段:梳理邊緣業(yè)務(wù)是否會(huì)影響關(guān)鍵業(yè)務(wù),跟業(yè)務(wù),技術(shù)負(fù)責(zé)人確認(rèn),把這些邊緣業(yè)務(wù)接口和功能列出來(lái),在入口處做降級(jí)處理
例如:app首頁(yè),會(huì)調(diào)用多個(gè)接口,其中有4個(gè)接口不是關(guān)鍵功能接口(活動(dòng)彈窗,訂單提示,回收提示,客服),在配置中心增加配置項(xiàng)開(kāi)關(guān),在壓測(cè)過(guò)程開(kāi)啟和關(guān)閉,對(duì)比壓測(cè),當(dāng)關(guān)閉降級(jí)開(kāi)關(guān),可以明確看到接口會(huì)占用主入口流量,除了關(guān)鍵接口數(shù)據(jù),4個(gè)接口非關(guān)鍵功能接口同樣請(qǐng)求到服務(wù)會(huì)把數(shù)據(jù)返回

開(kāi)啟降級(jí)開(kāi)關(guān),關(guān)鍵接口調(diào)用量明顯提升,4個(gè)接口只是返回空數(shù)據(jù),不會(huì)請(qǐng)求到服務(wù)

降級(jí)的作用是在大促高峰時(shí)段,保障應(yīng)用服務(wù)能正常運(yùn)行,且不影響主功能流程,所采用的應(yīng)急手段
其他問(wèn)題
優(yōu)化前:A服務(wù)功能并發(fā)壓測(cè)時(shí),A服務(wù)返回響應(yīng)時(shí)間非常慢,當(dāng)時(shí)nginx日志已發(fā)出被調(diào)用服務(wù)的告警信息,查看被調(diào)用依賴服務(wù)的監(jiān)控時(shí),發(fā)現(xiàn)被調(diào)用服務(wù)部署(k8s)的實(shí)例cpu占用100%,業(yè)務(wù)功能打開(kāi)已經(jīng)有部分出現(xiàn)異常響應(yīng)。

優(yōu)化后:k8s擴(kuò)容3個(gè)實(shí)例,重新壓測(cè) A服務(wù)功能,沒(méi)有出現(xiàn)響應(yīng)時(shí)間很慢的情況,被調(diào)用服務(wù)的cpu保持在40-50%之間,沒(méi)有出現(xiàn)100%的情況
應(yīng)用邏輯抽離(代碼改造)
P服務(wù)接口,每次請(qǐng)求qps比較低,與研發(fā)一同分析代碼邏輯,接口每次查詢都會(huì)查詢商列數(shù)據(jù),經(jīng)討論計(jì)劃把代碼進(jìn)行改造,把查詢商列數(shù)據(jù)的邏輯業(yè)務(wù)抽離,再進(jìn)行對(duì)比壓測(cè)。
老版本接口,邏輯會(huì)查詢所有商列數(shù)據(jù)

新版本接口,抽離業(yè)務(wù)邏輯,商列數(shù)據(jù)不查詢

老版本走老邏輯全部邏輯查詢?cè)谝粋€(gè)接口實(shí)現(xiàn),新版本抽離部分查詢邏輯,新增另外的接口查詢,降低接口查詢壓力
性能問(wèn)題肯定不止以上幾個(gè),還有緩存過(guò)期問(wèn)題,緩存命中率問(wèn)題,緩存穿透問(wèn)題,數(shù)據(jù)庫(kù)磁盤打滿,分布式鎖等等,具體的問(wèn)題就不一一列舉啦。
9、數(shù)據(jù)清理
壓測(cè)用戶(白名單):不能出現(xiàn)在真實(shí)業(yè)務(wù)當(dāng)中,壓測(cè)結(jié)束,會(huì)把這批用戶全部過(guò)濾被禁用
優(yōu)惠券數(shù)據(jù):設(shè)置過(guò)期時(shí)間,壓測(cè)結(jié)束后,通知運(yùn)營(yíng)過(guò)濾券數(shù)據(jù)
特定商品:創(chuàng)建自營(yíng)商品,不能影響正常業(yè)務(wù)使用,壓測(cè)結(jié)束后,商品下架
根據(jù)壓測(cè)用戶過(guò)濾訂單數(shù)據(jù),把訂單數(shù)據(jù)取消或者刪除,過(guò)濾用戶訂單數(shù)據(jù),不影響正常業(yè)務(wù)量統(tǒng)計(jì)
10、測(cè)試結(jié)果
經(jīng)歷雙十一大促全鏈路壓測(cè),大大小小性能優(yōu)化近50次,其中關(guān)鍵問(wèn)題有:服務(wù)cpu達(dá)100%需要機(jī)器擴(kuò)容,業(yè)務(wù)邏輯代碼改造,增加緩存策略,服務(wù)依賴優(yōu)化,數(shù)據(jù)庫(kù)連接異常,dns解析失敗,ES查詢阻塞等等,其余優(yōu)化問(wèn)題不一一列舉,性能測(cè)試總會(huì)遇到意想不到問(wèn)題,核心問(wèn)題提前發(fā)現(xiàn)并得以解決,也是為下次大促做保障。
而雙十二大促壓測(cè)有了雙十一大促壓測(cè)作為基礎(chǔ),核心問(wèn)題提前規(guī)避和檢查,在全鏈路壓測(cè)過(guò)程中除了存在部分服務(wù)cpu占用100%問(wèn)題和緩存問(wèn)題,影響核心業(yè)務(wù)的性能問(wèn)題基本上沒(méi)有出現(xiàn),有的只是邊緣業(yè)務(wù)問(wèn)題,不影響主業(yè)務(wù)流程。
對(duì)于雙十一、雙十二這類大促活動(dòng),全鏈路壓測(cè)必然是保障核心業(yè)務(wù)穩(wěn)定性的保障手段之一。
