2天快速搭建一個(gè)互聯(lián)網(wǎng)電商全鏈路壓測(cè)平臺(tái)
2013 年小紅書(shū)成立之初,主要是讓大家分享自己所購(gòu)買(mǎi)的商品或者是使用好的商品、好的體驗(yàn)。
小紅書(shū)的前世今生
很多妹子看到這口紅不錯(cuò)、那個(gè)包包很好看;很多口紅是國(guó)外的,沒(méi)有地方買(mǎi)。由此在 2014 年構(gòu)建電商平臺(tái)開(kāi)始上業(yè)務(wù)。
目前小紅書(shū)已經(jīng)成為國(guó)內(nèi)***的社區(qū)跨境電商之一。現(xiàn)在在上海、鄭州、寧波和深圳有多個(gè)保稅倉(cāng),為全國(guó)提供各類(lèi)全球的好商品。
快速成長(zhǎng)的痛
記得在 2015 年的時(shí)候,阿里雙十一會(huì)場(chǎng)可能有上千號(hào)的人來(lái)同時(shí)進(jìn)行全鏈路壓測(cè)。
小紅書(shū)因?yàn)檫@三年的成長(zhǎng)非常迅速,與阿里、京東這兩個(gè)大廠(chǎng)曾經(jīng)遇到的穩(wěn)定性問(wèn)題一樣,需要去面對(duì)、解決。
主要有以下三個(gè)方面要解決:
- 隨著業(yè)務(wù)增長(zhǎng),人員、IT 資源的擴(kuò)張趕不上業(yè)務(wù)的快速發(fā)展。比如說(shuō),在負(fù)責(zé)穩(wěn)定性保障這塊,我們測(cè)試團(tuán)隊(duì)在構(gòu)建全鏈路壓測(cè)過(guò)程中也就兩三位同學(xué)。相對(duì)于阿里、京東來(lái)說(shuō)是數(shù)量級(jí)的差異。
- 以前基于單體 Python 的系統(tǒng)架構(gòu)在大促時(shí)常常成為瓶頸。
- 缺乏有效的性能和線(xiàn)上穩(wěn)定性保障策略和實(shí)踐。
全鏈路壓測(cè)系統(tǒng)架構(gòu)
對(duì)于全鏈路壓測(cè),阿里有 PDS、京東有全鏈路壓測(cè)平臺(tái)。大廠(chǎng)這樣的壓測(cè)系統(tǒng)都是經(jīng)過(guò)較長(zhǎng)的時(shí)間不斷迭代出來(lái)的。
我們?cè)趺崔k?我們沒(méi)有那么的人力和資源;最核心的就是要搞定問(wèn)題。
在電商高峰期場(chǎng)景下,它的流量可能是平時(shí)的 10 倍甚至是幾十倍。在這種情況下流量不是均勻地打到各個(gè)業(yè)務(wù)線(xiàn)的。
例如,90% 流量先進(jìn)到主會(huì)場(chǎng);再由主會(huì)場(chǎng)引流到各個(gè)分會(huì)場(chǎng),然后是下單等等。整個(gè)過(guò)程是一個(gè)漏斗模型;這個(gè)可以用接口的水位對(duì)比來(lái)表示。
為了保證模擬高峰期線(xiàn)上行為,我們需要基于水位對(duì)比對(duì)整個(gè)業(yè)務(wù)模型進(jìn)行全鏈路壓測(cè)。
據(jù)此,我們的全鏈路壓測(cè)系統(tǒng)架構(gòu)分為四大塊:
- 各個(gè)鏈路壓測(cè)腳本配置管理
- 壓測(cè)調(diào)度
- 統(tǒng)一壓測(cè)數(shù)據(jù)管理
- 被測(cè)業(yè)務(wù)系統(tǒng)狀態(tài)監(jiān)控
對(duì)于壓測(cè)系統(tǒng)來(lái)說(shuō),最核心的就是壓測(cè)腳本;怎么能夠快速、方便的開(kāi)發(fā)出來(lái)一大批鏈路的壓測(cè)腳本。
從 0 到 1 構(gòu)建全鏈路壓測(cè)
從 0 開(kāi)始
2017 年的 6 月 6 號(hào)大促是我們平常比較重要的三個(gè)大促之一。我們?cè)?5 月接到需要保障今年大促的任務(wù)。
當(dāng)時(shí)整個(gè)測(cè)試的同學(xué)只有兩人可以投入,運(yùn)維同學(xué)只有一位可以支持。而開(kāi)發(fā)的同學(xué)一直會(huì)致力于業(yè)務(wù)開(kāi)發(fā)直到 6 月 4 號(hào)。同時(shí)測(cè)試系統(tǒng)方面基本上是白紙一張。
壓測(cè)模型
要進(jìn)行全鏈路壓測(cè)需要構(gòu)建壓測(cè)模型,就是要知道壓什么、怎么壓、壓到什么樣的水平:
- 首先,我們需要做鏈路的梳理。我們和開(kāi)發(fā)、運(yùn)維協(xié)作通過(guò)運(yùn)維監(jiān)控系統(tǒng)將線(xiàn)上接口所有列表獲取到。
- 然后,通過(guò)調(diào)用監(jiān)控系統(tǒng)獲取各個(gè)鏈路之間的配比關(guān)系。同時(shí)根據(jù)去年和日常鏈路監(jiān)控的配比得知各個(gè)接口平時(shí)和去年大促在什么樣的水平。
- ***,依據(jù)前面兩個(gè)步驟去計(jì)算鏈路調(diào)用、壓測(cè)腳本以及施壓機(jī)等情況。
據(jù)此,我們?nèi)魏我粋€(gè)鏈路壓測(cè)腳本都一共有四個(gè)壓測(cè)的參數(shù),分別為:
- 輸出壓力 qps
- 當(dāng)前水位
- 施壓周期
- 壓測(cè)鏈路
密切協(xié)作
在這樣的情況下,對(duì)于我們測(cè)試的同學(xué)來(lái)說(shuō)就簡(jiǎn)單了許多;我們可以將這個(gè)工具打成一個(gè)包,方便部署。
這樣就可以和運(yùn)維同學(xué)一起合作,一次性生成多臺(tái)施壓機(jī)器同時(shí)去壓一個(gè)系統(tǒng)。
目前,我們大概可以在五分鐘之內(nèi)能夠創(chuàng)建出來(lái) 400 臺(tái)以上的壓測(cè)容器也就是說(shuō)快速輸出 5G 以上的壓力。
為了區(qū)分壓測(cè)流量和真實(shí)線(xiàn)上流量,我們和開(kāi)發(fā)同學(xué)全力協(xié)作對(duì)線(xiàn)上的每個(gè)測(cè)試數(shù)據(jù)進(jìn)行打標(biāo)。
這樣一來(lái)在出業(yè)務(wù)報(bào)告或數(shù)據(jù)報(bào)表的時(shí)候,我們有統(tǒng)一的框架將測(cè)試數(shù)據(jù)進(jìn)行剝離;進(jìn)而保證了測(cè)試數(shù)據(jù)不污染線(xiàn)上數(shù)據(jù)。
全鏈路壓測(cè)目標(biāo)就是模擬真實(shí)的大促情況下,我們的各個(gè)鏈路能夠承載多大流量以及各個(gè)業(yè)務(wù)系統(tǒng)的瓶頸點(diǎn)所在。
壓測(cè)之外
除了前述的全鏈路壓測(cè)之外,我們這里還包括容量預(yù)估、降級(jí)方案、應(yīng)急預(yù)案、大促演練以及值班計(jì)劃。
我們會(huì)通過(guò)流量歷史監(jiān)控來(lái)做容量的預(yù)估;同時(shí),為壓測(cè)基線(xiàn)和限流熔斷提供依據(jù)。
當(dāng)線(xiàn)上業(yè)務(wù)流量水位超過(guò)我們?cè)O(shè)置的閾值的時(shí)候,為了保障線(xiàn)上運(yùn)行穩(wěn)定我們會(huì)對(duì)相關(guān)的業(yè)務(wù)進(jìn)行功能降級(jí)。
另外當(dāng)線(xiàn)上水位超過(guò)我們?cè)瓉?lái)預(yù)期的時(shí)候,我們會(huì)有相應(yīng)的應(yīng)急預(yù)案以降低容量不足帶來(lái)的影響。
年中 66 大促全鏈路實(shí)踐
2017 年從 5 月 6 日立項(xiàng),到 8 號(hào)開(kāi)始***條鏈路施壓,只用了兩天我們實(shí)現(xiàn)了從 0 到 1 的跨越。
對(duì)于從 0 到 80% 的這個(gè)過(guò)程,大家是可以很快做到的,因?yàn)閷?duì)于運(yùn)維同學(xué)來(lái)說(shuō)這些工具、方法基本上是每天都在做的事情。復(fù)制從 0 到 1 的構(gòu)建思路,我們?cè)谌藛T緊缺的情況下實(shí)現(xiàn)了預(yù)期目標(biāo)。
***,對(duì)于有興趣開(kāi)展線(xiàn)上全鏈路壓測(cè)的同學(xué)有以下三點(diǎn)建議:
- 先不要想大而全的平臺(tái)化。
- 關(guān)注系統(tǒng)的本身,從監(jiān)控和限流開(kāi)始做起。
- 掌握全鏈路壓測(cè)方法,快速構(gòu)建實(shí)現(xiàn)從 0 到 1。