每年的11.11促銷富纸,都是對(duì)幾大電商的軟硬件平臺(tái)服務(wù)能力的一次大考。在系統(tǒng)升級(jí)改造的過程中旨椒,京東商城引入了自己的云平臺(tái)晓褪,將交易、訂單综慎、倉儲(chǔ)涣仿、搜索等核心系統(tǒng)需要的一些基礎(chǔ)設(shè)施抽象了出來,以服務(wù)的形式提供示惊。面對(duì)峰值負(fù)載好港,很多壓力都會(huì)傳導(dǎo)到底層的云設(shè)施。京東的云平臺(tái)是如何準(zhǔn)備來應(yīng)對(duì)云存儲(chǔ)的呢米罚?為此InfoQ采訪了京東商城技術(shù)研發(fā)體系云平臺(tái)首席架構(gòu)師劉海峰钧汹。他負(fù)責(zé)的是包括存儲(chǔ)、緩存和消息隊(duì)列在內(nèi)的基礎(chǔ)系統(tǒng)录择,還有服務(wù)框架拔莱。
穩(wěn)定的云平臺(tái)
劉海峰首先介紹了發(fā)展歷史,過去兩年隘竭,京東以自主研發(fā)為主塘秦,開發(fā)了適合自己業(yè)務(wù)模式的存儲(chǔ)系統(tǒng)——京東文件系統(tǒng)(JFS ethos),并基于JFS向外提供私有云存儲(chǔ)服務(wù)动看。最大的一個(gè)客戶就是圖片存儲(chǔ)尊剔,京東的每一張圖片都存在JFS平臺(tái)上,另外還有訂單菱皆、庫房的報(bào)文等须误。自主研發(fā)使得系統(tǒng)更加可控,其可靠性仇轻、穩(wěn)定性霹期,都能很好地把握。JFS采用了主動(dòng)復(fù)制策略拯田,保證絕對(duì)的強(qiáng)一致性,通過自己設(shè)計(jì)的復(fù)制算法甩十,能夠保證在機(jī)器故障船庇、磁盤故障、甚至文件刪除等問題存在時(shí)侣监,數(shù)據(jù)都不會(huì)丟失鸭轮。
緩存云也是云平臺(tái)的核心產(chǎn)品之一¢厦梗可以分為兩個(gè)方面窃爷,一是純緩存,為各個(gè)業(yè)務(wù)提供統(tǒng)一的緩存服務(wù)。如果電商的各個(gè)業(yè)務(wù)都自己設(shè)計(jì)和維護(hù)一套緩存按厘,成本會(huì)非常高医吊。而將全集團(tuán)的緩存統(tǒng)一管理,通過細(xì)粒度的混合部署逮京,完全彈性的卿堂、多租戶的管理懒棉,實(shí)現(xiàn)彈性伸縮草描,極大地提高機(jī)器的使用效率,節(jié)省成本策严。
另一個(gè)是Jimdb——基于內(nèi)存與SSD的分布式緩存與高速KV存儲(chǔ)服務(wù)穗慕,這在搜索系統(tǒng)、推薦系統(tǒng)等中都有應(yīng)用妻导。
可靠的消息隊(duì)列
消息隊(duì)列(MQ)逛绵,或者叫消息平臺(tái),隨著互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展栗竖,微服務(wù)這種形式越來越流行暑脆,也就是一個(gè)模塊做一件事情,模塊之間盡量松耦合狐肢,模塊之間用消息隊(duì)列串聯(lián)起來添吗。可以認(rèn)為消息隊(duì)列是數(shù)據(jù)中心里面份名,各業(yè)務(wù)系統(tǒng)之間的管道碟联。在京東,消息隊(duì)列的開發(fā)經(jīng)歷了三個(gè)階段僵腺。前兩代是基于開源軟件實(shí)現(xiàn)的鲤孵,現(xiàn)在的產(chǎn)品是完全自主研發(fā)的JMQ,在11.11之前已全面上線辰如。商品相關(guān)的隊(duì)列和訂單相關(guān)的隊(duì)列都依賴此服務(wù)普监,MQ如果出現(xiàn)問題,會(huì)導(dǎo)致訂單等購物行為出現(xiàn)故障琉兜。不過11.11目前運(yùn)行比較平穩(wěn)凯正,能夠做到消息絕對(duì)不丟失。
MQ有一個(gè)很大的技術(shù)挑戰(zhàn)豌蟋,要能夠快速地收廊散,可靠地存。如果下游的消息消費(fèi)者處理比較慢梧疲,系統(tǒng)就需要能夠緩存大量消息允睹。因?yàn)樽约洪_發(fā)运准,這里可以做很多優(yōu)化。舉例而言缭受,有的大隊(duì)列可能是1個(gè)發(fā)送者胁澳,有100個(gè)消費(fèi)者,很多開源系統(tǒng)可能會(huì)存100份贯涎。但這里通過優(yōu)化听哭,可以只存一份,消費(fèi)者可以通過偏移量或指針去訪問塘雳。從今天的效果來看陆盘,在這個(gè)方向上的技術(shù)投入非常值得。
微服務(wù)之得失
在服務(wù)框架方面败明,進(jìn)行了微服務(wù)化改造隘马。一個(gè)模塊就做一件事,各個(gè)模塊可降級(jí)妻顶、可監(jiān)控酸员、可分解。除了通過消息隊(duì)列串聯(lián)不同模塊讳嘱,還有些地方需要同步調(diào)用幔嗦,京東大概有上萬個(gè)服務(wù)接口,也接入了非常多的服務(wù)器沥潭,整個(gè)服務(wù)的注冊(cè)邀泉、發(fā)現(xiàn)、互相之間的服務(wù)調(diào)用钝鸽,再就是請(qǐng)求的序列化汇恤、反序列化,都是通過自主研發(fā)的服務(wù)框架實(shí)現(xiàn)的拔恰。
提到微服務(wù)因谎,劉海峰也深入介紹了一些自己在這方面的感悟。他認(rèn)為颜懊,微服務(wù)對(duì)互聯(lián)網(wǎng)而言是很好的技術(shù)方向财岔,對(duì)電商也是如此。將系統(tǒng)分為不同的服務(wù)模塊河爹,系統(tǒng)的韌性會(huì)更好使鹅,當(dāng)然有得必有失。這種架構(gòu)對(duì)基礎(chǔ)設(shè)施的要求會(huì)更高昌抠,對(duì)軟件底層平臺(tái)的要求也更高。因?yàn)槟K之間的通信有不同方式鲁僚,比如通過直接調(diào)用炊苫、消息隊(duì)列或存儲(chǔ)系統(tǒng)裁厅,那如何跟蹤系統(tǒng)的服務(wù)鏈條,也是一個(gè)問題侨艾。測試整個(gè)系統(tǒng)的峰值性能执虹,抗壓能力,也是個(gè)很大的挑戰(zhàn)唠梨。
充分的11.11備戰(zhàn)
談到11.11的備戰(zhàn)袋励,劉海峰介紹說,首先一點(diǎn)就是需要把更多的工作放在平時(shí)当叭,實(shí)際上技術(shù)是瓶頸茬故,不是靠堆機(jī)器就能解決的,所以要靠平時(shí)的積累蚁鳖,設(shè)計(jì)好磺芭、做出好的系統(tǒng)。另外醉箕,在出現(xiàn)問題時(shí)钾腺,團(tuán)隊(duì)更加重要,要確保及時(shí)響應(yīng)讥裤;而這時(shí)候也越來越體會(huì)到自主研發(fā)的好處放棒,有任何問題,都可以快速地定位并修復(fù)己英,甚至是直接線上修復(fù)间螟。只有從零寫起才有這種感覺。
我們也談到了京東云的路線圖問題剧辐。劉海峰提到寒亥,目前還是小步快跑的模式,先抓住一些重點(diǎn)業(yè)務(wù)荧关,應(yīng)用起云服務(wù)溉奕,形成示范效應(yīng),再快速地規(guī)娜唐。化加勤。京東也正在開發(fā)一個(gè)數(shù)據(jù)中心操作系統(tǒng)項(xiàng)目——JDOS,基本的事情是統(tǒng)一管理包含物理機(jī)同波、虛擬機(jī)和輕量級(jí)容器鳄梅,配合自主研發(fā)的存儲(chǔ)以及非常靈活的SDN互聯(lián)。
InfoQ后續(xù)還將發(fā)布對(duì)京東的運(yùn)維未檩、訂單戴尸、倉儲(chǔ)、搜索等業(yè)務(wù)負(fù)責(zé)人的訪談冤狡,敬請(qǐng)期待孙蒙。
如果讀者對(duì)京東云之前的演進(jìn)情況感興趣项棠,可以查看劉海峰在QCon北京2013上的演講:《京東文件系統(tǒng)與統(tǒng)一數(shù)據(jù)中心存儲(chǔ)》。