? 雖然經(jīng)歷過很多次壓測,但是最近跟進(jìn)的一個(gè)項(xiàng)目淌山,在預(yù)估 qps 高裸燎、業(yè)務(wù)玩法個(gè)性強(qiáng)復(fù)雜度高的情況下,整個(gè)過程中還是出現(xiàn)了一些問題:
- 與下游交互的模塊泼疑,不能通過直接屏蔽來進(jìn)行內(nèi)部邏輯驗(yàn)證
- 壓測需要單獨(dú)配置德绿,內(nèi)測期間不能同時(shí)進(jìn)行壓測
- 壓測接口底層數(shù)據(jù)依賴交叉,并發(fā)搶鎖與線上場景不符退渗,賬號(hào)編排進(jìn)行了二次更新
- 多壓測接口并發(fā)窗口重疊有差異移稳,用例編排多次優(yōu)化才保證了業(yè)務(wù)邏輯依賴
- 需求節(jié)奏緊張,壓測流量復(fù)用需要多次調(diào)整壓測用例
? 雖然準(zhǔn)備工作提前開展会油,卻還是不夠充分个粱,因此總結(jié)下壓測準(zhǔn)備工作的內(nèi)容,希望下次的壓測能更加順利钞啸。
? 首先聊一下上面問題的初步解法建議:
- 評(píng)估好與下游交互的模塊對(duì)業(yè)務(wù)邏輯的影響面積几蜻,若下游動(dòng)作對(duì)服務(wù)影響較小時(shí),除了正式壓測外体斩,調(diào)試和復(fù)壓驗(yàn)證內(nèi)部服務(wù)性能時(shí)都可以采用配置屏蔽的方式減少對(duì)下游的影響梭稚,使壓測時(shí)間更靈活
- 在服務(wù)開發(fā)階段就結(jié)合服務(wù)架構(gòu)設(shè)計(jì),除了基礎(chǔ)架構(gòu)支持的壓測流量識(shí)別能力絮吵,業(yè)務(wù)自己的服務(wù)基于自身服務(wù)特征也做好壓測識(shí)別弧烤,這樣就可以多維度測試同時(shí)進(jìn)行又不會(huì)相互干擾
- 壓測前明確數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),cr 開發(fā)代碼蹬敲,明確哪些接口是會(huì)搶占或改變同一份數(shù)據(jù)暇昂,是否單用戶會(huì)同時(shí)發(fā)生多個(gè)接口請(qǐng)求,通過用戶段或?qū)嶋H用戶行為來控制好搶鎖的事件符合線上真實(shí)場景
- 分析每個(gè)接口觸發(fā)的時(shí)機(jī)伴嗡,在壓測過程中明確每個(gè)接口峰值疊加階段急波,保證全部峰值和單接口峰值能夠合理配合
- 通過復(fù)制和分組管理的方式將不同復(fù)用場景創(chuàng)建到不同分組,隨用隨取指定組別用例即可瘪校;同時(shí)與工具平臺(tái)聯(lián)動(dòng)優(yōu)化接口/域名的管理功能
? 有了初步解法后澄暮,還是要詳細(xì)回顧下關(guān)于壓測的準(zhǔn)備工作到底要關(guān)注哪些內(nèi)容。
一阱扬、壓測方案的設(shè)計(jì)
? 壓測方案是壓測執(zhí)行的標(biāo)準(zhǔn)依據(jù)泣懊,但是每次需求下準(zhǔn)備壓測方案的時(shí)機(jī)都可能是不同的。有些情況下需要在技術(shù)方案梳理結(jié)束后就要開始著手準(zhǔn)備麻惶,而有些在測試快結(jié)束時(shí)準(zhǔn)備也是沒問題的馍刮,個(gè)人認(rèn)為壓測方案的產(chǎn)出時(shí)機(jī),除了受業(yè)務(wù)本身排期和人力限制外窃蹋,優(yōu)先考慮的是待壓測服務(wù)的現(xiàn)狀和壓測場景的復(fù)雜程度卡啰。
1. 壓測服務(wù)的現(xiàn)狀
? 考慮壓測服務(wù)現(xiàn)狀主要是看服務(wù)是否必須進(jìn)行壓測静稻,以及壓測的目標(biāo)是什么,有了明確的壓測目標(biāo)才能更好的設(shè)計(jì)壓測方案:
- case1:線上穩(wěn)定運(yùn)行的服務(wù)有新增邏輯:判斷新邏輯對(duì)舊邏輯的影響碎乃,評(píng)估是否只壓測新增模塊相關(guān)功能即可
- case2:新服務(wù)有歷史同類/類似業(yè)務(wù)參考:依據(jù)已有類似業(yè)務(wù)評(píng)估流量量級(jí)和性能瓶頸姊扔,看是否必要全量功能壓測
- case3:新服務(wù)沒有歷史類似業(yè)務(wù)參考:拆分代碼組成惠奸,預(yù)估全量功能的流量量級(jí)梅誓,明確是否需要單獨(dú)摸底,是否必須全量接口覆蓋
2. 壓測場景的復(fù)雜度
? 壓測場景的復(fù)雜程度決定了數(shù)據(jù)和測試用例的準(zhǔn)備和編排工作要投入的人力資源成本佛南,要提前考慮才能在壓測開始前就準(zhǔn)備好壓測所需的數(shù)據(jù)供給梗掰。
- case1:業(yè)務(wù)流程、接口單一或者相互獨(dú)立:每個(gè)接口單獨(dú)設(shè)計(jì)壓測場景準(zhǔn)備壓測數(shù)據(jù)即可
- case2:接口嗅回、業(yè)務(wù)流程間有數(shù)據(jù)耦合或者有動(dòng)作耦合:需要按照用戶使用場景拆分+組合的方式編排場景壓測用例及穗,并確認(rèn)好壓測數(shù)據(jù)的混合方案
二、 壓測配置的約定
? 正常情況下绵载,壓測的配置要確保不對(duì)數(shù)據(jù)造成污染埂陆、不能對(duì)已有服務(wù)造成干擾,所以壓測前應(yīng)該明確好到底哪些配置要單獨(dú)做隔離娃豹,哪些配置必須要確認(rèn)好唯一壓測標(biāo)識(shí)焚虱;若服務(wù)不能滿足壓測隔離,大概率需要進(jìn)行專門開發(fā)懂版,服務(wù)隔離能力的開發(fā)和測試驗(yàn)證成本都要提前規(guī)劃鹃栽。
? 把壓測配置單獨(dú)拿出來講,是因?yàn)楹芏嘈枨笤趬簻y進(jìn)行時(shí)才發(fā)現(xiàn)躯畴,常規(guī)測試和壓測的部分配置沖突民鼓,造成無法同時(shí)進(jìn)行多種測試,所以壓測和正常配置的區(qū)分其實(shí)非常關(guān)鍵蓬抄。
? 具體的壓測配置/壓測隔離的方式方法需要結(jié)合業(yè)務(wù)代碼框架來看丰嘉,這里不做過多說明。
三嚷缭、壓測數(shù)據(jù)的處理
1. 壓測數(shù)據(jù)的生成
? 壓測數(shù)據(jù)間接限制了壓測 case 對(duì)線上場景的擬合程度饮亏,需要特定狀態(tài)的數(shù)據(jù)才能保證壓測場景的發(fā)生。
- case1:壓測數(shù)據(jù)是實(shí)時(shí)隨著壓測產(chǎn)生的:那不需要單獨(dú)構(gòu)造數(shù)據(jù)
- case2:壓測數(shù)據(jù)是需要前置條件的:那么就要考慮是通過接口順序編排就可以產(chǎn)生數(shù)據(jù)峭状,還是需要提前人為構(gòu)造
- case3:壓測數(shù)據(jù)是需要前置條件的克滴,且需要完全擬合實(shí)際用戶場景:那么更要確認(rèn)數(shù)據(jù)構(gòu)造的方案,若不是簡單數(shù)據(jù)的構(gòu)造优床,數(shù)據(jù)構(gòu)造能力的開發(fā)和構(gòu)造效果的驗(yàn)證同樣需要人力時(shí)間投入劝赔;擬合用戶操作的數(shù)據(jù),還要考慮同一個(gè)用戶多接口并發(fā)是否有關(guān)聯(lián)影響胆敞,以便更好的模擬用戶行為
2. 壓測數(shù)據(jù)的清理
? 壓測數(shù)據(jù)的清理原本是壓測結(jié)束后才要考慮的內(nèi)容着帽,但是杂伟,必須要提前明確哪些數(shù)據(jù)要做清理、是什么類型的數(shù)據(jù)仍翰、在什么時(shí)機(jī)進(jìn)行清理赫粥。
- case1:非持久存儲(chǔ)類數(shù)據(jù):不需要單獨(dú)清理,設(shè)置好過期時(shí)間即可
- case2:非持久存儲(chǔ)類數(shù)據(jù)予借,但對(duì)后續(xù)壓測有干擾:那么需要每輪壓測結(jié)束后專門清理
- case3:持久存儲(chǔ)數(shù)據(jù):需要確認(rèn)如何控制人工清理
四越平、壓測用例的編排
? 單接口用例就不多說,單個(gè)接口不需要特殊編排灵迫,考慮好用例的用戶操作行為貼合度和業(yè)務(wù)特性模擬即可秦叛,場景用例/混合壓測的用例就需要考慮好用例編排了;下面羅列的場景并不能涵蓋所有情況瀑粥,但可以在此基礎(chǔ)上結(jié)合壓測訴求和已有壓測能力做擴(kuò)展挣跋。
1. 簡單場景
? 簡單的場景下基公,一般不需要考慮過多的接口時(shí)序和實(shí)際觸發(fā)時(shí)機(jī)汰瘫,只需要保證流量峰值的發(fā)生和持續(xù)即可硅确,所以簡單場景下大概有以下幾種編排方式:
- 接口獨(dú)立執(zhí)行
- 接口順序執(zhí)行
- 接口同步并發(fā)
2. 復(fù)雜場景
? 復(fù)雜場景往往需要接口之間做好配合授霸,不僅僅是時(shí)序和觸發(fā)時(shí)間渗饮,還要考慮接口實(shí)際作用效果的傳遞和實(shí)際作用對(duì)數(shù)據(jù)流轉(zhuǎn)的影響牵素,所以在簡單場景基礎(chǔ)上要求更高鼎姊,就可以考慮下面的編排方式:
- 返回依賴接口需要聯(lián)動(dòng)串行
- 邏輯/用戶行為的流量錯(cuò)峰
- 單用戶多動(dòng)作接口并發(fā)需要?jiǎng)討B(tài)窗口化
- 多用戶多動(dòng)作接口同時(shí)刻疊加
方法或思路整體并不難映企,難的還是要分析好用戶行為和接口作用割按,明確評(píng)估出如何排列/組合接口才能更加貼合線上的真實(shí)流量分布膨报,盡可能擬合線上場景才能讓壓測的可信度更高。