來(lái)自京東商城技術(shù)團(tuán)隊(duì)的內(nèi)部分享材料,其中一些涉及太多技術(shù)細(xì)節(jié)的ppt沒(méi)有放出來(lái)屡立,但在文字中都有提到直晨。
京東商城系統(tǒng),融合了自營(yíng)模式膨俐、商城模式勇皇、三方平臺(tái)等模式,跟淘寶焚刺、天貓以商城模式為主的電商系統(tǒng)相比敛摘,業(yè)務(wù)模式上要豐富很多,包括許多WMS檩坚、TMS着撩、OMS的部分。國(guó)內(nèi)中小型電商公司匾委,如果要學(xué),最好是學(xué)習(xí)京東的業(yè)務(wù)架構(gòu)氓润,因?yàn)闃I(yè)務(wù)模式上相近一些赂乐。
01
超大型電商系統(tǒng)架構(gòu)目標(biāo)
1.構(gòu)建超大型電商交易平臺(tái),兼顧效率和性能咖气,達(dá)到高人效挨措、高時(shí)效和低成本的目標(biāo)。
2.低成本崩溪,增加服務(wù)的重用性浅役,提高開(kāi)發(fā)效率,降低人力成本伶唯;利用成熟開(kāi)源技術(shù)觉既,降低軟硬件成本;利用虛擬化技術(shù)乳幸,減少服務(wù)器成本瞪讼。
3.高擴(kuò)展,系統(tǒng)架構(gòu)簡(jiǎn)單清晰粹断,應(yīng)用系統(tǒng)間耦合低符欠,容易水平擴(kuò)展,業(yè)務(wù)功能增改方便快捷瓶埋。
4.高可用希柿,自動(dòng)化運(yùn)維诊沪。整體系統(tǒng)可用性99.99%,單個(gè)系統(tǒng)可用性99.999%曾撤。全年故障時(shí)間整個(gè)系統(tǒng)不超過(guò)50分鐘娄徊,單個(gè)系統(tǒng)故障不超過(guò)5分鐘。
02
京東商城業(yè)務(wù)架構(gòu)設(shè)計(jì)原則
1.業(yè)務(wù)平臺(tái)化
業(yè)務(wù)平臺(tái)化盾戴,相互獨(dú)立寄锐。如交易平臺(tái)、倉(cāng)儲(chǔ)平臺(tái)尖啡、物流平臺(tái)橄仆、支付平臺(tái)、廣告平臺(tái)等 衅斩∨韫耍基礎(chǔ)業(yè)務(wù)下沉,可復(fù)用畏梆。如用戶您宪、商品、類目奠涌、促銷宪巨、時(shí)效等。
2.核心業(yè)務(wù)溜畅、非核心業(yè)務(wù)分離
? 電商核心業(yè)務(wù)與非核心業(yè)務(wù)分離捏卓,核心業(yè)務(wù)精簡(jiǎn)(利于穩(wěn)定),非核心業(yè)務(wù)多樣化慈格。如怠晴,主交易服務(wù)、通用交易服務(wù) 浴捆。
3.區(qū)分主流程蒜田、輔流程
? 分清哪些是電商的主流程。運(yùn)行時(shí)选泻,優(yōu)先保證主流程的順利完成冲粤,輔流程可以采用后臺(tái)異步的方式。避免輔流程的失敗導(dǎo)致主流程的回滾滔金。如色解,下單時(shí),同步調(diào)用快照餐茵,異步通知臺(tái)賬科阎、發(fā)票 。
4.隔離不同類型的業(yè)務(wù)
? 交易業(yè)務(wù)是簽訂買(mǎi)家和賣(mài)家之間的交易合同忿族,需要優(yōu)先保證高可用性锣笨,讓用戶能快速下單蝌矛,履約業(yè)務(wù)對(duì)可用性沒(méi)有太高要求,可以優(yōu)先保證一致性 错英,閃購(gòu)業(yè)務(wù)對(duì)高并發(fā)要求很高入撒,應(yīng)該跟普通業(yè)務(wù)隔離。
京東電商系統(tǒng)-業(yè)務(wù)架構(gòu)圖? (來(lái)源于@京東技術(shù)部)
京東業(yè)務(wù)架構(gòu)實(shí)例:基礎(chǔ)業(yè)務(wù)下沉? ? (來(lái)源于@京東技術(shù)部)
03
應(yīng)用架構(gòu)設(shè)計(jì)原則
1椭岩、穩(wěn)定性原則
一切以穩(wěn)定為中心茅逮;架構(gòu)盡可能簡(jiǎn)單、清晰判哥;不過(guò)度設(shè)計(jì)献雅。
2、接耦/拆分
穩(wěn)定部分與易變部門(mén)分離塌计;核心業(yè)務(wù)與非核心業(yè)務(wù)分離挺身;電商主流程與輔流程分離;應(yīng)用與數(shù)據(jù)分離锌仅;服務(wù)與實(shí)現(xiàn)細(xì)節(jié)分離章钾。
3、抽象化
應(yīng)用抽象化:應(yīng)用只依賴服務(wù)抽象热芹,不依賴服務(wù)實(shí)現(xiàn)細(xì)節(jié)贱傀、位置。
數(shù)據(jù)庫(kù)抽象化:應(yīng)用只依賴邏輯數(shù)據(jù)庫(kù)剿吻,不需要關(guān)心物理庫(kù)的位置和分片窍箍。
服務(wù)器抽象化:應(yīng)用虛擬化部署,不需要關(guān)心實(shí)體機(jī)配置丽旅,動(dòng)態(tài)調(diào)配資源。
4纺棺、松耦合榄笙。
跨域調(diào)用異步化,不同業(yè)務(wù)域之間盡量異步接耦祷蝌。
非核心業(yè)務(wù)盡量異步化茅撞,核心和非核心業(yè)務(wù)之間,盡量異步接耦巨朦。
5米丘、容錯(cuò)設(shè)計(jì)。
服務(wù)自治:服務(wù)能彼此獨(dú)立修改糊啡、部署拄查、發(fā)布和管理。避免引發(fā)連鎖反應(yīng)棚蓄。
集群容錯(cuò):應(yīng)用系統(tǒng)集群堕扶,避免單點(diǎn)碍脏。
多機(jī)房容災(zāi):多機(jī)房部署,多活稍算。
04
京東商城應(yīng)用架構(gòu)分層
表現(xiàn)層典尾。包含首頁(yè)、列表頁(yè)糊探、詳情頁(yè)钾埂。
業(yè)務(wù)流程層。商品系統(tǒng)科平、交易系統(tǒng)褥紫、訂單系統(tǒng)、財(cái)務(wù)系統(tǒng)匠抗、物流系統(tǒng)等故源。
服務(wù)層,服務(wù)構(gòu)建層汞贸,其中包含:商品服務(wù)绳军、交易服務(wù)、訂單服務(wù)矢腻、財(cái)務(wù)服務(wù)门驾、物流服務(wù)。
在治理方面多柑,包括服務(wù)質(zhì)量層奶是、數(shù)據(jù)架構(gòu)層、治理層等竣灌。
京東應(yīng)用架構(gòu)分層? (來(lái)源于@京東技術(shù)部)
05
京東商城應(yīng)用架構(gòu)拆分原則
1聂沙、水平擴(kuò)展。也就是復(fù)制的能力初嘹,應(yīng)用系統(tǒng)實(shí)現(xiàn)多機(jī)集群及汉、提升并發(fā)能力,數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)分離屯烦,如商品讀庫(kù)坷随、商品寫(xiě)庫(kù)。
2驻龟、垂直拆分温眉。指的是不同業(yè)務(wù)系統(tǒng)的拆分,如商品系統(tǒng)翁狐、交易系統(tǒng)类溢;數(shù)據(jù)庫(kù)方面也是相應(yīng)拆成商品庫(kù)、訂單庫(kù)谴蔑。
3豌骏、業(yè)務(wù)分片龟梦。同業(yè)務(wù)進(jìn)行分片,比如秒殺系統(tǒng)窃躲、常規(guī)下單系統(tǒng)计贰,要分開(kāi);數(shù)據(jù)庫(kù)方面蒂窒,如把訂單表按ID取模運(yùn)算后分庫(kù)分表躁倒。
4、水平拆分洒琢。服務(wù)層面秧秉,功能與非功能分開(kāi),穩(wěn)定業(yè)務(wù)與易變業(yè)務(wù)分開(kāi)衰抑;數(shù)據(jù)庫(kù)方面象迎,冷熱數(shù)據(jù)分離、歷史數(shù)據(jù)分離呛踊。
06
京東商城服務(wù)設(shè)計(jì)的依賴原則
1砾淌、依賴穩(wěn)定的部分。穩(wěn)定部分不依賴易變的部分谭网、易變的部分可以依賴穩(wěn)定的部分汪厨、堅(jiān)決避免循環(huán)依賴。
2愉择、跨域弱依賴劫乱。跨業(yè)務(wù)域調(diào)用的時(shí)候锥涕,盡可能異步弱依賴衷戈。
3、基于服務(wù)依賴层坠⊥讯瑁基于服務(wù)不能向上依賴流程服務(wù);組合服務(wù)窿春、流程服務(wù)可以向下依賴基本服務(wù)。條件是基本服務(wù)要穩(wěn)定采盒。
4旧乞、非功能性服務(wù)依賴。非功能性服務(wù)不能依賴功能性服務(wù)磅氨;功能性服務(wù)可依賴非功能性服務(wù)尺栖。條件:非功能性服務(wù)穩(wěn)定。
5烦租、平臺(tái)服務(wù)依賴延赌。平臺(tái)服務(wù)不依賴上層應(yīng)用除盏;上層應(yīng)用可依賴平臺(tái)服務(wù);條件:平臺(tái)服務(wù)穩(wěn)定挫以。
6者蠕、核心服務(wù)依賴。核心服務(wù)不依賴非核心服務(wù)掐松;非核心服務(wù)可依賴核心服務(wù)踱侣;條件:核心服務(wù)穩(wěn)定。
07
服務(wù)設(shè)計(jì)基本原則
1大磺、無(wú)狀態(tài)抡句。盡量不要把狀態(tài)數(shù)據(jù)保存在本機(jī),接口調(diào)用冪等性杠愧。
2待榔、可復(fù)用。復(fù)用顆粒度是有業(yè)務(wù)邏輯的抽象服務(wù)流济,不是服務(wù)實(shí)現(xiàn)細(xì)節(jié)锐锣。服務(wù)引用只依賴于服務(wù)抽象。
3袭灯、松耦合刺下。跨業(yè)務(wù)調(diào)用稽荧,盡可能異步解耦橘茉。必須同步調(diào)用時(shí),設(shè)置超時(shí)和隊(duì)列大小姨丈。相對(duì)穩(wěn)定的基本服務(wù)與易變流程服務(wù)分層畅卓。
4、可治理蟋恬。制定服務(wù)契約翁潘、服務(wù)可降級(jí)、服務(wù)可限流歼争、服務(wù)可開(kāi)關(guān)拜马、服務(wù)可監(jiān)控、白名單機(jī)制沐绒。
京東商城應(yīng)用架構(gòu)實(shí)例圖? (來(lái)源于@京東技術(shù)部)
08
京東商城數(shù)據(jù)架構(gòu)設(shè)計(jì)原則
1俩莽、統(tǒng)一數(shù)據(jù)視圖。保證數(shù)據(jù)的及時(shí)性乔遮,一致性扮超、準(zhǔn)確性、完整性。
2出刷、數(shù)據(jù)璧疗、應(yīng)用分離。應(yīng)用系統(tǒng)只依賴邏輯數(shù)據(jù)庫(kù)馁龟;應(yīng)用系統(tǒng)不直接訪問(wèn)其它宿主數(shù)據(jù)庫(kù)崩侠,只能通過(guò)服務(wù)訪問(wèn)。
3屁柏、數(shù)據(jù)異構(gòu)啦膜。源數(shù)據(jù)和目標(biāo)數(shù)據(jù)內(nèi)容相同時(shí),做索引異構(gòu)淌喻,如商品庫(kù)不同維度僧家。內(nèi)容不同時(shí),做數(shù)據(jù)庫(kù)異構(gòu)裸删,如訂單買(mǎi)家?guī)旌唾u(mài)家?guī)臁?/p>
4八拱、數(shù)據(jù)讀寫(xiě)分離。訪問(wèn)量大的數(shù)據(jù)庫(kù)做讀寫(xiě)分離涯塔,數(shù)據(jù)量大的數(shù)據(jù)庫(kù)做分庫(kù),不同業(yè)務(wù)域數(shù)據(jù)庫(kù)做分區(qū)隔離爹谭,重要數(shù)據(jù)配置備庫(kù)。
5、用Mysql等主流數(shù)據(jù)庫(kù)。除成本因素外,Mysql數(shù)據(jù)庫(kù)擴(kuò)展能力強(qiáng)配深,運(yùn)維積累了大量豐富經(jīng)驗(yàn)。
6缸托、合理使用緩存哺哼。數(shù)據(jù)庫(kù)有能力支撐時(shí),盡量不要引入緩存枢里。合理利用緩存做容災(zāi)豆胸。
(來(lái)源于@京東技術(shù)部)
(來(lái)源于@京東技術(shù)部)
09
京東商城技術(shù)架構(gòu)總覽
1、基本平臺(tái)。數(shù)據(jù)存取方面的技術(shù)組件包括:緩存服務(wù)有JFS/Jimstore尉尾、圖片服務(wù)JSS班套、即時(shí)服務(wù)JDW吆豹、索引服務(wù)Search、數(shù)據(jù)庫(kù)服務(wù)DBS宙橱。
2、集成層蘸拔。服務(wù)流程引擎PAF师郑、服務(wù)中間件SAF、MQ服務(wù)JDMQ调窍、數(shù)據(jù)庫(kù)中間件JDAL宝冕、調(diào)度服務(wù)JDWorker、業(yè)務(wù)規(guī)則服務(wù)JDRules陨晶、配置服務(wù)JDCenter猬仁、推送服務(wù)JMP。
3先誉、質(zhì)量層湿刽。監(jiān)控服務(wù)UMP、日志服務(wù)Loghub褐耳、風(fēng)控系統(tǒng)JDriskM诈闺、應(yīng)用管理jdcenter。
其它還包括治理層铃芦、虛擬平臺(tái)雅镊、運(yùn)營(yíng)管理等等。
(來(lái)源于@京東技術(shù)部)
10
京東商城系統(tǒng)運(yùn)維原則
1刃滓、可監(jiān)控仁烹。服務(wù)的TPS和RT是否符合SLA,是否出現(xiàn)超預(yù)期流量咧虎。
2卓缰、應(yīng)用可回滾,功能可降級(jí)砰诵。應(yīng)用出現(xiàn)問(wèn)題時(shí)征唬,要求能回滾到上一版本,或做功能降級(jí)茁彭。
3总寒、在線擴(kuò)容。超預(yù)期流量時(shí)理肺,應(yīng)用系統(tǒng)可選擇在線水平擴(kuò)展摄闸。
4善镰、安全保證。確保系統(tǒng)和保密性和完整性贪薪。具有足夠的防攻擊能力媳禁。
5、可容錯(cuò)性画切。核心應(yīng)用要求多活,避免單點(diǎn)設(shè)計(jì)囱怕,并且自身有容錯(cuò)和修復(fù)能力霍弹。故障恢復(fù)時(shí)間短。
6娃弓、可故障轉(zhuǎn)移典格。多機(jī)房部署,發(fā)生故障時(shí)能及時(shí)切換台丛。
(來(lái)源于@京東技術(shù)部)
以上跟大家分享了京東商城業(yè)務(wù)架構(gòu)耍缴、技術(shù)架構(gòu)、數(shù)據(jù)架構(gòu)挽霉,以及架構(gòu)原則防嗡、運(yùn)維原則。如果覺(jué)得本文對(duì)您有幫助侠坎,請(qǐng)點(diǎn)在看蚁趁、分享朋友圈,感謝您的支持实胸!