雙十一倒計時還有三天,你做好剁手的準(zhǔn)備了嗎丹擎?淘寶戰(zhàn)績驚人的背后到底會隱藏怎樣的手法呢?想知道就跟隨我來吧蛮穿。
2009年11月11日,淘寶首次推出11.11購物狂歡節(jié)单刁。該活動最早的出發(fā)點只是在“光棍節(jié)”當(dāng)天做一個屬于淘寶商城的節(jié)日府适,以提高其知名度檐春。隨著“雙十一”活動的深入,淘寶商城每年11月11號都戰(zhàn)績驚人疟暖。
那么每次雙十一俐巴,面對如此高的一個負(fù)載和并發(fā)量,天貓在此階段都要評估哪些因素擎鸠?制訂哪些基準(zhǔn)缘圈?如何根據(jù)這些事先評估好的指標(biāo)對硬件和軟件進(jìn)行一個部署和規(guī)劃的呢?
天貓性能評測負(fù)責(zé)人绢涡,性能技術(shù)專家王德山這樣回答:
——從性能角度來講遣疯,幾個方面來看一下另锋,第一個就是說狭归,我們發(fā)起接受這個項目,他應(yīng)該開始是從大眾的需求室梅、產(chǎn)品、營運和開發(fā)角度上亡鼠,把測試作為出發(fā)點间涵,幫我們介入雙十一的挑戰(zhàn)。我們性能角度有這么幾個方面抗蠢,一個是我們首先會評估當(dāng)前的天貓這套應(yīng)用體系的性能和容量支撐思劳。第二個,因為產(chǎn)品是有需求的秽褒,我們對這個產(chǎn)品有準(zhǔn)確的評估威兜,會做一個比較有意思的預(yù)測,像10年票堵、11年逮栅、12年,它的數(shù)量級是在整個的跨越甚至跳躍的特纤。這對我們做性能測試或性能保障是一個比較大的挑戰(zhàn)侥加,正好接下來担败,我們聊聊這方面的行動:第一個就是對當(dāng)前性能的容量評估,包括當(dāng)前產(chǎn)品應(yīng)用代碼本身的健壯性吗货、是否有瓶頸宙搬;第二勇垛,因為大促是一個比較煩雜谆级、比較有挑戰(zhàn)的一個事情币砂,所以我們要做好一些保障亿蒸;再有一個,專業(yè)技能方面就是預(yù)案,一個預(yù)案是我們預(yù)知當(dāng)前所掌控的,另外一個是非掌控性的斥铺,我們要做一個后續(xù)的處理預(yù)案眠屎,出現(xiàn)類似異常的時候改衩,我們從應(yīng)用層面,或者從整個容量層面來做一個比較強的處理。最后就是說容量規(guī)劃,需要非常有效惋戏,目前的跨機房的棕孙,包括網(wǎng)絡(luò)流量的內(nèi)容钦铺,是一個重頭戲烫映。
淘寶自創(chuàng)立以來,對性能測試要求也越來越高。從最初的系統(tǒng)框架性能測試绢片、TOP-API接口性能測試巢株,到現(xiàn)在的web應(yīng)用性能測試熙涤,進(jìn)軍無線性能測試領(lǐng)域祠挫,淘寶性能測試在不斷向前發(fā)展,橫向等舔、縱向都在不斷深入慌植、拓寬,不斷創(chuàng)新涤浇。
1. 性能測試通過標(biāo)準(zhǔn)
性能測試從需求只锭、設(shè)計、準(zhǔn)備喉誊、執(zhí)行到分析纵顾,最后需要判斷性能測試是否通過施逾。性能測試工程師最終需要考慮很多因素,判斷的標(biāo)準(zhǔn)相應(yīng)的也會有多個維度曹仗。 ?此處蠕搜,引入超時閥值和超時概率兩個概念。超時閥值妓灌,是指在框架模板中定義的超時時間轨蛤,當(dāng)服務(wù)器響應(yīng)超過該定義值時蜜宪,被測程序仍然響應(yīng)請求,同時Profiler會打印超時日志祥山。超時概率端壳,是指超時次數(shù)除以總請求次數(shù)所得的值。
性能測試通過標(biāo)準(zhǔn)枪蘑,是判斷性能測試通過與否的最全面的參考依據(jù)。隨著淘寶性能測試的發(fā)展岖免,這些標(biāo)準(zhǔn)估計也會隨之做出相應(yīng)改動岳颇,要求也會越來越嚴(yán)格。
2. 性能測試流程
性能測試是一個系統(tǒng)工程话侧,涉及到PDM、PM闯参、性能測試工程師瞻鹏、DBA、SCM鹿寨、OPS等多個角色新博。從性能測試申請,到性能測試設(shè)計脚草、性能測試環(huán)境赫悄、性能測試數(shù)據(jù)、性能測試執(zhí)行馏慨、性能測試調(diào)優(yōu)埂淮,都離不開這些角色的相互配合,共同協(xié)助写隶。因此倔撞,淘寶網(wǎng)確立了一整套性能測試流程,采取團(tuán)隊合作的方式慕趴,降低溝通成本痪蝇,提高工作效率。
3. 監(jiān)控工具
性能測試通常采用下列工具進(jìn)行監(jiān)控:
a. Profiler ?一個記錄log的類冕房,阿里巴巴集團(tuán)自主開發(fā)霹俺,嵌入到應(yīng)用代碼中使用。
b. Jstat ? 監(jiān)控java 進(jìn)程GC情況毒费,判斷GC是否正常丙唧。
c. JConsole ? 監(jiān)控java內(nèi)存、java CPU使用率觅玻、線程執(zhí)行情況等想际,需要在JVM參數(shù)中進(jìn)行配置培漏。
d. JMap ? 監(jiān)控java程序是否有內(nèi)存泄漏,需要配合eclipse插件或者M(jìn)emoryAnalyzer來使用胡本。
e. JProfiler ? 全面監(jiān)控每個節(jié)點的CPU使用率牌柄、內(nèi)存使用率、響應(yīng)時間累計值侧甫、線程執(zhí)行情況等珊佣,需要在JVM參數(shù)中進(jìn)行配置。 ?
f. Nmon ? 全面監(jiān)控linux系統(tǒng)資源使用情況披粟,包括CPU咒锻、內(nèi)存、I/O等守屉,可獨立于應(yīng)用監(jiān)控惑艇。
g. Valgrind ? 監(jiān)控C/C++程序是否存在內(nèi)存泄漏,基于linux環(huán)境拇泛。
h. Vmmap和ApplicationVerifier ? 監(jiān)控C/C++程序是否存在內(nèi)存泄漏滨巴,基于windows環(huán)境。
那么當(dāng)雙十天當(dāng)天上線后俺叭,項目出現(xiàn)性能故障恭取,卡死,這種情況阿里又是怎么解決的呢熄守?
王德山:這是一個“驚喜”秽荤,帶雙引號的驚喜。當(dāng)我收到這種信息的時候柠横,一個是通過郵件窃款,一個是通過手機短信、旺旺通知牍氛,要么線上報警晨继,要么線上故障,當(dāng)我們遇到這種報警的時候搬俊,作為性能測試人員紊扬,我們有責(zé)任去協(xié)助研發(fā)團(tuán)隊把這個事情搞清楚,大概有這樣幾個步驟:首先看唉擂,假如是一般的報警餐屎,我們?nèi)ゴ_認(rèn),排查問題解決掉玩祟。第二個腹缩,本身這個故障對業(yè)務(wù)產(chǎn)生了影響,造成了用戶損害,我們需要立馬修復(fù)這個BUG藏鹊。還有就是從性能測試角度润讥,有幾個方面:一個是我們?nèi)f(xié)助開發(fā)一起來定位,通過各種的一些分析技術(shù)盘寡,像分析日志抓取缺陷楚殿,包括這種報警時的一些異常、用戶的反饋竿痰,把這些信息收集起來脆粥,迅速的把它整理出有用的信息出來。第二個就是我們把這個問題在生產(chǎn)線上重現(xiàn)影涉,变隔,根據(jù)重現(xiàn)場景,捕獲代碼性能瓶頸常潮,進(jìn)而目標(biāo)性優(yōu)化。第三個就是楷力,當(dāng)我們把這些問題優(yōu)化了以后喊式,在線下做功能、性能的測試回歸萧朝,確定沒有問題了岔留,通過語法預(yù)發(fā)測試、打補丁的方式去把性能瓶頸解決检柬;杰茜萊就是故障的Review會議献联,我們要避免這種問題重演。