京東商城架構(gòu)峰值系統(tǒng)設(shè)計(jì)
小白叨一叨:有別于社交網(wǎng)絡(luò)、搜索和游戲等網(wǎng)站,電商網(wǎng)站的用戶流量具有操作性強(qiáng)、隨時(shí)令變化等特點(diǎn)。高流量、高并發(fā)情況下,如何保證整個(gè)系統(tǒng)的可靠性和穩(wěn)定性,是眾多電商企業(yè)研發(fā)團(tuán)隊(duì)都在思考的問題。
高流量、高并發(fā)情況下,如何保證整個(gè)系統(tǒng)的可靠性和穩(wěn)定性,是眾多電商企業(yè)研發(fā)團(tuán)隊(duì)都在思考的問題。為了盡量緩解峰值帶來的壓力,京東峰值系統(tǒng)的設(shè)計(jì)主要從性能提升、流量控制、災(zāi)備降級、壓測預(yù)案四個(gè)角度來進(jìn)行。
有別于社交網(wǎng)絡(luò)、搜索和游戲等網(wǎng)站,電商網(wǎng)站的用戶流量具有操作性強(qiáng)、隨時(shí)令變化等特點(diǎn)。在歐美國家,Black Friday和Cyber Monday標(biāo)志著節(jié)假日消費(fèi)的高峰。影響電商流量峰值的主要因素是搶購、促銷和惡意攻擊,尤其是京東618店慶和雙11等大規(guī)模的促銷活動。高流量、高并發(fā)情況下,如何保證整個(gè)系統(tǒng)的可靠性和穩(wěn)定性,是眾多電商企業(yè)研發(fā)團(tuán)隊(duì)都在思考的問題。
京東電商系統(tǒng)的設(shè)計(jì)是圍繞系統(tǒng)穩(wěn)定性、可靠性、高并發(fā)和可擴(kuò)展性為核心開展的。如何在峰值來臨時(shí),保證用戶有平滑流暢的體驗(yàn),且系統(tǒng)不會出現(xiàn)異常呢?我們先來看看京東系統(tǒng)的一些特點(diǎn)(圖1)。
圖1 系統(tǒng)架構(gòu)龐大復(fù)雜
京東的業(yè)務(wù)種類繁多,涉及SKU幾千萬種,這使得系統(tǒng)龐大,外部需要對接供應(yīng)商、消費(fèi)者和第三方商家三大板塊。內(nèi)部系統(tǒng)包括了商品供應(yīng)鏈中除商品設(shè)計(jì)和生產(chǎn)外的幾乎所有環(huán)節(jié),包括登錄、交易、后臺、供應(yīng)鏈、倉配、客服等。所有這些涉及大小系統(tǒng)幾千個(gè),造就了一個(gè)極其復(fù)雜龐大的體系。除此之外,京東系統(tǒng)交互強(qiáng),各個(gè)功能模塊之間關(guān)聯(lián)性強(qiáng),牽一發(fā)而動全身,做任何修改都需要慎之又慎。因此,一切優(yōu)化方案都以保持系統(tǒng)穩(wěn)定為前提。
為了在復(fù)雜的系統(tǒng)基礎(chǔ)之上,盡量緩解峰值帶來的壓力,京東峰值系統(tǒng)的設(shè)計(jì)主要從性能提升、流量控制、災(zāi)備降級、壓測預(yù)案四個(gè)角度來進(jìn)行。
性能提升
1.切分業(yè)務(wù)系統(tǒng)
我們先將整個(gè)業(yè)務(wù)體系拆分為幾個(gè)相對獨(dú)立的子系統(tǒng)如SSO、交易平臺、POP平臺、訂單下傳系統(tǒng)、WMS和倉儲配送(圖2)。每個(gè)子系統(tǒng)又可細(xì)分為若干部分,逐級簡化,直至可操作可優(yōu)化的層級。例如,交易平臺包括價(jià)格、購物車、結(jié)算、支付和訂單中心等;網(wǎng)站系統(tǒng)包括首頁、登錄、列表頻道、單品和搜索等。接下來,針對每個(gè)功能模塊的關(guān)鍵部分進(jìn)行切分,有針對性地做性能優(yōu)化。
圖2 業(yè)務(wù)切分方案
例如,交易的秒殺系統(tǒng),原來是根植于普通交易系統(tǒng)之內(nèi)的,缺點(diǎn)非常明顯。當(dāng)流量突然增大時(shí),不僅會導(dǎo)致秒殺系統(tǒng)反應(yīng)遲鈍,而且會影響普通交易系統(tǒng)的正常運(yùn)作。于是我們將其與其他業(yè)務(wù)系統(tǒng)物理分開,成為相對獨(dú)立的子系統(tǒng)。并且針對秒殺的特性,減少對后臺存儲的依賴。同時(shí)優(yōu)化中間層存儲機(jī)制,使得相對熱點(diǎn)分散部署。甚至支持單一SKU多點(diǎn)部署,從而大大提升了秒殺系統(tǒng)的吞吐量和可靠性。
2.分布式
分布式的交易系統(tǒng)是電商的未來。分布式系統(tǒng)解決兩大難題:提高用戶體驗(yàn)和增強(qiáng)容錯(cuò)能力。由于分布式系統(tǒng)設(shè)計(jì)時(shí)就會留有相當(dāng)?shù)牧髁吭鲩L空間,所以當(dāng)一處數(shù)據(jù)中心飽和時(shí),可以將其余的流量切入其他相對寬松的數(shù)據(jù)中心去,從而達(dá)到互為備份、互相支持的目的。與此同時(shí),由于為提供用戶就近服務(wù),所以減少了網(wǎng)絡(luò)延時(shí),頁面反應(yīng)速度加快了。舉一個(gè)例子,Google搜索是全球服務(wù),歐亞美各地都有不同的IP提供服務(wù)。當(dāng)其中的某一個(gè)IP出現(xiàn)故障時(shí),Google能夠從容地將其服務(wù)切換至最近的IP,繼續(xù)搜索服務(wù)。對于電商來說,情況更復(fù)雜一些,需要同步的數(shù)據(jù)要求更精確,數(shù)據(jù)量較大,對延時(shí)的容忍度更低,建設(shè)周期也就更長。京東正在此方面著力改進(jìn),從只讀的系統(tǒng)入手,一步一步實(shí)現(xiàn)系統(tǒng)的分布式。
3.API服務(wù)化
在各個(gè)系統(tǒng)中,總是有很多相同的組件。前端的負(fù)載均衡自不必說,中間件的處理就是非常典型的例子。如何高效統(tǒng)一地管理這些組件,API服務(wù)化是我們的答案。最好由一個(gè)訓(xùn)練有素的團(tuán)隊(duì)集中管理這些組件并對外提供接口服務(wù),將軟件的使用復(fù)雜性隱藏起來,調(diào)用的是簡單利索的API。讓專業(yè)人員去處理復(fù)雜邏輯,確保系統(tǒng)的可用性和擴(kuò)展性,既能大大降低出錯(cuò)概率,又能實(shí)現(xiàn)規(guī)模效益。
Redis是我們常用的緩存組件。 過去都是由各個(gè)業(yè)務(wù)實(shí)現(xiàn)團(tuán)隊(duì)進(jìn)行分別維護(hù),專業(yè)性不強(qiáng),使用多有不當(dāng)之處。后來我們進(jìn)行了集中管理,統(tǒng)一定制開發(fā)新功能和升級,并通過API服務(wù)化提供給各級用戶。這樣不僅豐富了應(yīng)用場景,還提升了性能和可靠性。
4.架構(gòu),代碼優(yōu)化
一個(gè)合理的電商系統(tǒng)架構(gòu)是與一家公司的研發(fā)水平和技術(shù)管理水平密不可分的,這直接決定了可支撐峰值流量的多少和未來能達(dá)到的高度。選取適合自身發(fā)展的框架,既能充分發(fā)揮其效能,又可節(jié)約資源。代碼優(yōu)化也能提高效能,例如對于SQL語句的優(yōu)化,能更好地利用索引;Java/C++邏輯的優(yōu)化,減少了不必要的循環(huán)和復(fù)雜的操作;算法優(yōu)化,使之更高效;功能實(shí)現(xiàn)邏輯的優(yōu)化,變得更簡潔和清晰;等等。但代碼優(yōu)化終究不能沖破極限, 難以追求極致,適可為止為宜。
5.系統(tǒng)虛擬彈性化
當(dāng)磁盤I/O不是瓶頸時(shí),解決系統(tǒng)水平擴(kuò)展就會變得容易許多。可以通過ZooKeeper或類ZooKeeper將軟件棧有機(jī)地串聯(lián)起來,并配以有效的性能監(jiān)管。當(dāng)事務(wù)處理成為瓶頸時(shí),利用當(dāng)今流行的虛擬化技術(shù)(如LXC或VM)可以在沒有人為干預(yù)的狀況下自動進(jìn)行彈性擴(kuò)展。
本文作者:@翁志;轉(zhuǎn)載自:產(chǎn)品中國
- 目前還沒評論,等你發(fā)揮!