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