0
本文作者: 史中 | 2016-11-19 14:43 |
雙十一,剁手黨的節(jié)日,恨不能是各大電商程序員的忌日。
京東,作為全國買買買炮火的主要目標(biāo),架構(gòu)師、碼農(nóng)們一邊承擔(dān)著全國人民打折購物的殷切期望,一邊承受著老板東哥如芒在背的犀利目光。
總之,一旦出現(xiàn)閃失,后果不堪設(shè)想。
那么,究竟架構(gòu)師們?nèi)绾稳f無一失地完成這樣“不允許失敗”的任務(wù)呢?
在今天的 SDCC 中國軟件開發(fā)者大會上,京東商城總架構(gòu)師、基礎(chǔ)平臺負(fù)責(zé)人劉海鋒為現(xiàn)場觀眾介紹了今年保衛(wèi)京東雙十一的“五大法寶”。
【京東商城總架構(gòu)師、基礎(chǔ)平臺負(fù)責(zé)人 劉海鋒】
說到底,雙十一最大的挑戰(zhàn)就是訪問和業(yè)務(wù)激增。如果能夠提供無限的帶寬和計算資源,那么雙十一和其他日期不會有任何可以感知的區(qū)別。
然而,資源永遠(yuǎn)是有限的。這就好像一個人往往不能又買房又買車還天天吃大餐。從這個角度來說,資源規(guī)劃就變得非常重要。
每當(dāng)各種電商節(jié)來臨之前,各路部門都變成了嗷嗷待哺的雛鳥。恨不能張口就要十倍于平時的資源。
不過劉海鋒說:
大家都覺得資源充分才不會出問題。但是事實證明,有些部門多準(zhǔn)備一些 CPU,心理上可能輕敵,在代碼上就放松了警惕,這樣未必可以活下;相反資源不那么充足的情況下,反而未必死掉。
那么,有限的 CPU 究竟分給誰呢?
【前端用戶下單方法調(diào)用雙十一峰值達(dá)到了平均值的16倍,而機(jī)房內(nèi)網(wǎng)絡(luò)流量峰值只有平均值的1.5倍】
根據(jù)劉海鋒的研究,京東商城前端的訪問系統(tǒng)在零點之前的十幾秒負(fù)載達(dá)到峰值。幾秒內(nèi)就可以達(dá)到平均值的16倍。這是因為大家都已經(jīng)選好了想要的商品,只等零點之前刷新下單。但是,這樣狂飆的訪問量在系統(tǒng)內(nèi)部卻沒有表現(xiàn)得如此恐怖。在系統(tǒng)內(nèi)部,訪問量可能只有平時的 1.5倍。
我們把各個系統(tǒng)分為兩類:平穩(wěn)型系統(tǒng)和毛刺型系統(tǒng)。
平穩(wěn)型系統(tǒng),包括商品的詳情頁、價格頁面、庫存信息等等;
毛刺型系統(tǒng),包括下單、秒殺頁面、搶購頁面等等。
做了細(xì)致的研究之后,對于資源的分配就有了依據(jù)。這樣就可以在保證核心流程充分?jǐn)U容的基礎(chǔ)上,再來滿足錦上添花的功能需求。
基礎(chǔ)架構(gòu)是京東商城的基礎(chǔ)。而在巨大訪問中一旦基礎(chǔ)架構(gòu)出現(xiàn)了問題,會影響無數(shù)附加其上的應(yīng)用。為了保證這個龐大的基礎(chǔ)架構(gòu),京東做了一些重點動作。
劉海鋒說,一個機(jī)房的安全系數(shù)永遠(yuǎn)不夠,一旦出問題將會造成不可估量的損失。所以京東采用了多數(shù)據(jù)中心的策略。
這種冗余策略存在于包括電商在內(nèi)的很多服務(wù)中。是一種通用的手段,當(dāng)然京東也不例外。
京東從2014年開始,對系統(tǒng)進(jìn)行 Docker 容器化改造。
通俗來說,“容器化”就是把系統(tǒng)的各項資源進(jìn)行虛擬化,可以更加自由地分配給各個服務(wù)。
這種改造有一個巨大的優(yōu)勢,那就是極大地加快了資源交付和速度,更小地細(xì)分了資源的粒度。劉海鋒說,2014年之前,大促時各個系統(tǒng)分資源還在分物理機(jī),而現(xiàn)在大家可以直接分 CPU,系統(tǒng)在后臺直接把 CPU 的計算能力分配給需要的部門。
在京東的構(gòu)架中,內(nèi)存可以被用作存儲器,而不是緩存。劉海鋒說,這就是所謂的 JIMDB(以內(nèi)存為中心的存儲)。
眾所周知,硬盤是在電子化的 IT 架構(gòu)中,唯一一個還在使用機(jī)械結(jié)構(gòu)的元件。它的效率之低令人發(fā)指。所以在大促的時候,訂單內(nèi)容和實時護(hù)具不會回到后臺存儲,直接在內(nèi)存中被調(diào)用。這樣就大大提縮短了系統(tǒng)響應(yīng)時間。
為此,京東的內(nèi)存容量儲備達(dá)到了 260T。
大促的時候,99%的訪問請求最高延遲都小于 5 毫秒。
劉海鋒說。
在京東的體系中,最重要的可能就是訂單和運單數(shù)據(jù)。而這些數(shù)據(jù)需要在許多系統(tǒng)內(nèi)部實時同步。
很多下游系統(tǒng)關(guān)心訂單信息。按照傳統(tǒng)的思路,所有下游系統(tǒng)都想要獲得訂單信息,必須通過訂單系統(tǒng),調(diào)用其他的接口才能實現(xiàn)。這樣就會給訂單系統(tǒng)帶來極大的壓力。
針對這個矛盾,京東開發(fā)了消息平臺 JMQ。JMQ 的工作原理很簡單,大致相當(dāng)于信息統(tǒng)籌的秘書。訂單系統(tǒng)只需要把數(shù)據(jù)交給 JMQ,其他系統(tǒng)只需要調(diào)用 JMQ 就可以查看信息。這在客觀上大大緩解了訂單系統(tǒng)的壓力。
雙十一,所有系統(tǒng)資源全部被調(diào)動起來。人工智能,這個正在井噴的高科技也可以在這個時候“幫工”。
不過,劉海鋒告訴雷鋒網(wǎng),這并不是什么虛頭巴腦的大概念,而是一些接地氣的小功能。所以他更愿意把它叫做“增強(qiáng)智能”。
增強(qiáng)智能在京東商城的體系內(nèi)應(yīng)用場景不少,例如:客服機(jī)器人、庫存優(yōu)化、信息合規(guī)校驗、智能物流倉儲等等。劉海鋒舉了兩個有趣的例子。
【替用戶冷靜的“訂單冷靜管道”】
如果我看到別人在大促的當(dāng)天買了一部手機(jī)送給女朋友。我一沖動,一次購買了兩臺,冷靜下來想想, 我還沒有女朋友。這個時候,我可能會選擇退貨。
劉海鋒說。
然而,京東的很多產(chǎn)品都是自營,在下單之后幾分鐘內(nèi)就已經(jīng)開始分揀打包。然而, 系統(tǒng)訂單是在幾小時內(nèi)都支持取消的。
這時,如果用戶選擇了取消訂單,那么打包工作就浪費了。這對于雙十一期間資源相對寶貴的京東來說,就是一種資源浪費。
這時,就到了人工智能顯示威力的時候。
如果系統(tǒng)探測到下單買兩部 iPhone 的用戶,經(jīng)常買奢侈品送給(不同的)女朋友,那么沒事。如果探測到這個用戶以前購買的最貴的商品就是200塊錢的食用油,并且通過大數(shù)據(jù)分析,這位用戶可能沒有女朋友。那么就在后臺自動把訂單“冷靜”10-20分鐘。如果用戶沒有后悔取消訂單,再繼續(xù)大寶流程。這有助于減少浪費的成本。
在雙十一當(dāng)天,凌晨第一單從下單到出庫到用戶簽收僅僅用了12分31秒。這個看起來有點假的成績是怎么取得的呢?
如果從下單開始,才從最大的倉庫備貨,12分鐘也許都不夠用來分揀。能夠做到這么快,要歸功于“訂單預(yù)測系統(tǒng)” 。
【訂單預(yù)測系統(tǒng)工作原理】
劉海鋒講解了訂單預(yù)測系統(tǒng)的工作原理:
一個商圈,將會在雙十一購買多少手機(jī)、電池、尿布、啤酒這類標(biāo)準(zhǔn)品,是可以通過大數(shù)據(jù)來預(yù)測的。而京東的庫房是分級的。有后端的倉儲和前端的倉儲。通過預(yù)測,京東會提前把一些商品前置到前端倉(FDC),這樣在用戶下單之后就可以瞬間從倉庫發(fā)出,就近送到用戶手里。
驗證技術(shù)團(tuán)隊可靠性的最好方式,莫過于真槍實彈的技術(shù)演習(xí)。
Chaos Monkey,是很多平臺都在使用的故障演習(xí)模式,簡單說來就是隨即關(guān)閉生產(chǎn)環(huán)境中的實例,然后檢查系統(tǒng)是否能經(jīng)受故障考驗。
劉海鋒把這個英語詞匯改成了更接地氣的中文名稱——響尾蛇。
總之,就是在雙十一真正的考驗來臨之前,用一種“自殘”的方式來檢查系統(tǒng)的可靠性。
劉海鋒介紹,京東的“響尾蛇”行動玩法如下:
把運維人員分為兩組,一組資深的運維工程師在會議室里,負(fù)責(zé)模擬故障。而在會議室外面,是負(fù)責(zé)解決問題的小組。對于將要出現(xiàn)什么問題,會議室外面的小組是毫不知情的。模擬故障五花八門,從機(jī)器到網(wǎng)絡(luò),到模塊,到服務(wù),到中間件和數(shù)據(jù)庫,甚至整個機(jī)房消失。應(yīng)急小組都必須給出合理的處置方法,拼死保證業(yè)務(wù)不出現(xiàn)問題。
劉海鋒說,“由于這種演練具有一定的破壞性,所以我們都是在半夜一點到三點之間進(jìn)行?!?/p>
所謂壓力測試,就是在真實模擬無數(shù)人訪問京東并作出各種請求的情況下, 測試系統(tǒng)能否正常運作。
雖然各個環(huán)節(jié)的工程師都會對自己的系統(tǒng)進(jìn)行壓力測試,但是畢竟這種測試是分散的,導(dǎo)致最終容易在各個業(yè)務(wù)的接口處產(chǎn)生問題。而且,普通的壓力測試,很難模擬真實用戶的訪問行為。
為此,劉海鋒專門讓團(tuán)隊開發(fā)了“軍演壓力測試機(jī)器人”。
這個機(jī)器人,就是模擬我們雇傭一億人同時訪問我們網(wǎng)站的行為。這套程序分布在全國各地,對我們的業(yè)務(wù)做全鏈路的讀寫混合壓力測試。
如同軍演一樣,全鏈路的壓力測試并不如想象般容易實現(xiàn)。例如,這樣的演習(xí)不能使用真正的銀行支付,不能影響真正的庫存數(shù)量,不能動用真的物流。所以,和演習(xí)相關(guān)的所有上下游業(yè)務(wù),都要設(shè)計一套虛擬系統(tǒng)。
在這套“軍事演習(xí)”里,最重要的步驟就是“黃金鏈路壓力測試”。所謂黃金鏈路,就是普通用戶使用京東的“標(biāo)準(zhǔn)流程”,包括:登錄,搜索,瀏覽,購物,結(jié)算,支付。這個鏈路,是雙十一用戶體驗的最主要體現(xiàn)。京東的工程師們不斷對這個鏈路進(jìn)行測試,就可以發(fā)現(xiàn)很多存在的問題。
【黃金鏈路壓力測試流程】
以上,就是京東保障正在看文章的你“剁手順利”的五大法寶。僅僅是24小時的買買買,背后卻涉及無數(shù)風(fēng)險控制手段和資源調(diào)度模型。
正如劉海鋒所說,
雙十一是電商企業(yè)整體技術(shù)能力的一個縮影,各個電商在保障的過程中都會有一些插曲,正是這些小問題,讓中國的電商行業(yè)不斷地成長。
SDCC,中國軟件開發(fā)者大會。由全球最大中文 IT 社區(qū) CSDN 于2007年創(chuàng)辦,每年舉辦。主題是下一代軟件開發(fā)技術(shù)趨勢與對各行業(yè)的深刻影響,以談干貨實料著稱。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。