新聞中心
隨著持續(xù)集成,持續(xù)交付等理念的傳播,很多軟件開發(fā)團(tuán)隊(duì)都搭建了自己的staging、UAT等類生產(chǎn)環(huán)境。這些環(huán)境的軟硬件及網(wǎng)絡(luò)配置會(huì)盡量貼近真實(shí)的生產(chǎn)環(huán)境,起到沙盤演練的作用。

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對(duì)手中脫穎而出成都創(chuàng)新互聯(lián)公司。
類生產(chǎn)環(huán)境畢竟前面還有一個(gè)類字,沙盤畢竟不是真實(shí)的戰(zhàn)場,盡量貼近畢竟還不是完全吻合。
類生產(chǎn)環(huán)境與真實(shí)生產(chǎn)環(huán)境的一個(gè)重要差異就是訪問量。稍具規(guī)模的互聯(lián)網(wǎng)應(yīng)用每天幾百萬訪問量是很正常的,而類生產(chǎn)環(huán)境的訪問量一般都會(huì)相形見絀。
有各種工具可以彌合這個(gè)差異,比如Apache JMeter,Gatling。測試人員可以和開發(fā)人員一起設(shè)計(jì)測試用例,以自動(dòng)化或者半自動(dòng)化的方式對(duì)類生產(chǎn)環(huán)境進(jìn)行壓力測試。
不過即便是精心設(shè)計(jì)出來的用例也還是用例,不是真實(shí)請(qǐng)求。真實(shí)請(qǐng)求具有多樣性,會(huì)隨著晝夜交替而變化,會(huì)隨著時(shí)事熱點(diǎn)而波動(dòng),這是很難用工具模擬出來的。
這就引出了這篇文章的主角-影子流量(shadow traffic)。
簡言之,影子流量(shadow traffic)就是將發(fā)給生產(chǎn)環(huán)境的請(qǐng)求復(fù)制一份轉(zhuǎn)發(fā)到類生產(chǎn)環(huán)境上去,以此來達(dá)到壓力測試和正確性測試的目的。
這就如同把真實(shí)戰(zhàn)場上的敵方炮火投放到演習(xí)場里去。
一、實(shí)現(xiàn)方式
Shadow traffic通常有兩種實(shí)現(xiàn)方式:服務(wù)端實(shí)現(xiàn),客戶端實(shí)現(xiàn)。
下圖描述的是服務(wù)端實(shí)現(xiàn)的簡化示例。
生產(chǎn)環(huán)境接收到來自于用戶或者是上游系統(tǒng)的請(qǐng)求,在響應(yīng)該請(qǐng)求的同時(shí),將這個(gè)請(qǐng)求原封不動(dòng)的也發(fā)送給類生產(chǎn)環(huán)境。
下圖描述的是客戶端的實(shí)現(xiàn)。
客戶設(shè)備或者上游系統(tǒng)在發(fā)給生產(chǎn)環(huán)境請(qǐng)求的同時(shí),給類生產(chǎn)環(huán)境也發(fā)送一個(gè)一模一樣的請(qǐng)求。
這兩種實(shí)現(xiàn)方式各有優(yōu)劣,放到服務(wù)端做可以減少客戶端設(shè)備的流量消耗,這一點(diǎn)對(duì)于移動(dòng)應(yīng)用很重要。
客戶端的實(shí)現(xiàn)則較簡單,通常只需要幾行代碼即可。如果后端架構(gòu)較復(fù)雜,則可以選擇前端實(shí)現(xiàn)。
無論前端還是后端實(shí)現(xiàn),都需要遵循發(fā)射后不管(fire and forget)的原則,以免阻塞正常流程或者增加響應(yīng)時(shí)間。
1. 適用場景
籠統(tǒng)來說,shadow traffic可以適用于所有互聯(lián)網(wǎng)應(yīng)用。而在以下場景中,shadow traffic的作用格外明顯:
- 要用新系統(tǒng)替換掉老舊系統(tǒng)
- 系統(tǒng)經(jīng)歷了大規(guī)模改造,直接上線面對(duì)客戶風(fēng)險(xiǎn)較大
- 系統(tǒng)更新,需要提供向后兼容性
- 試驗(yàn)性質(zhì)的架構(gòu)調(diào)整
在以上場景運(yùn)用shadow traffic,可以在不影響終端用戶的情況下完成驗(yàn)證與測試。
2. 啟用時(shí)機(jī)
在上線之前一段時(shí)間集中地進(jìn)行測試固然是一種可行的方式,不過我個(gè)人更傾向于在項(xiàng)目運(yùn)轉(zhuǎn)的早期引入shadow traffic。
這樣做可以讓開發(fā)團(tuán)隊(duì)盡早的并且持續(xù)的接觸到真實(shí)的外界壓力。相當(dāng)于用一種成本并不怎么高的方式構(gòu)建出了具有產(chǎn)品運(yùn)維經(jīng)驗(yàn)的開發(fā)團(tuán)隊(duì)。
二、配套機(jī)制
Shadow traffic的原理和實(shí)現(xiàn)方式并不深?yuàn)W,但要讓它發(fā)揮出應(yīng)有的價(jià)值還需要一些前期工作的配合。
1. 基礎(chǔ)設(shè)施監(jiān)控
要了解系統(tǒng)的表現(xiàn),基礎(chǔ)設(shè)施監(jiān)控是必不可少的。
上圖是我所經(jīng)歷過的一個(gè)項(xiàng)目的可視化監(jiān)控界面。監(jiān)控范圍涵蓋了docker container的數(shù)量,請(qǐng)求數(shù)量,響應(yīng)時(shí)間,以4或者5打頭的HTTP狀態(tài)碼的數(shù)量,網(wǎng)絡(luò)、內(nèi)存、CPU用量等等。
通過如上的可視化圖表,開發(fā)團(tuán)隊(duì)可以實(shí)時(shí)得到反饋。
2. 日志
基礎(chǔ)設(shè)施監(jiān)控可以提供一個(gè)外部視角,日志則能夠窺見應(yīng)用內(nèi)部。
日志可以幫助開發(fā)團(tuán)隊(duì)定位shadow traffic中發(fā)現(xiàn)的問題,shadow traffic也可以促使開發(fā)團(tuán)隊(duì)提升日志的質(zhì)量。這二者可以起到雙向的積極促進(jìn)作用。
3. 下游系統(tǒng)的配合
如果一個(gè)系統(tǒng)開啟了shadow traffic,可以想見它的下游系統(tǒng)所面對(duì)的壓力也會(huì)陡升。
這時(shí)有必要與下游系統(tǒng)負(fù)責(zé)團(tuán)隊(duì)做好事先溝通。
三、用法變式
Shadow traffic并非是一成不變的技術(shù)實(shí)踐,可以按需微調(diào)。
1. 請(qǐng)求挑取
并非每一個(gè)請(qǐng)求都有被轉(zhuǎn)發(fā)的必要??梢詢?yōu)先選取流量大或者業(yè)務(wù)價(jià)值高的請(qǐng)求。
2. 流量控制
如果想做極限壓力測試,可以把每一個(gè)請(qǐng)求重復(fù)發(fā)送多次給類生產(chǎn)環(huán)境。
當(dāng)然也可以只挑取10%的請(qǐng)求來發(fā)送給類生產(chǎn)環(huán)境,隨著團(tuán)隊(duì)信心的提升而逐步升高。
3. 重播
可以截取并保存每天尖峰時(shí)刻的請(qǐng)求,在其他時(shí)段反復(fù)重播。
這種考驗(yàn)可以有效的鍛煉團(tuán)隊(duì)的心理素質(zhì),并促使團(tuán)隊(duì)形成應(yīng)急預(yù)案。
四、小結(jié)
如果明天要上線,今天會(huì)是一個(gè)讓人惴惴不安的日子。
系統(tǒng)性能表現(xiàn)如何?會(huì)不會(huì)有奇形怪狀的用戶行為導(dǎo)致系統(tǒng)異常?與上下游系統(tǒng)的銜接會(huì)不會(huì)出現(xiàn)問題?
這些問題的答案,可以通過測試人員的精心模擬來尋找。但仍難免會(huì)掛一漏萬。
啟用shadow traffic,如果開發(fā)團(tuán)隊(duì)可以習(xí)慣于有shadow traffic的日常,也就具有了應(yīng)對(duì)線上運(yùn)維問題的能力。
【本文是專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號(hào):思特沃克,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】
戳這里,看該作者更多好文
新聞名稱:讓你的系統(tǒng)在上線之前就接受炮火的洗禮-影子流量
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/ccidhso.html


咨詢
建站咨詢
