一、訂單系統(tǒng)概述
1.1 業(yè)務(wù)范圍
服務(wù)業(yè)務(wù)線:快遞、快運(yùn)、中小件、大件、冷鏈、國際、B2B合同物流、CLPS、京喜、三入三出(采購入、退貨入、調(diào)撥入、銷售出、退供出、調(diào)撥出)等
1.2 訂單中心價(jià)值
1、解耦(提升系統(tǒng)穩(wěn)定性)
原系統(tǒng):交易與生產(chǎn)耦合在一起,業(yè)務(wù)新增需求,涉及個(gè)上下游多個(gè)系統(tǒng)。ECLP、外單、運(yùn)單、終端系統(tǒng)等。多條業(yè)務(wù)線的邏輯耦合在一起,單一業(yè)務(wù)條線的需求改動(dòng),涉及原系統(tǒng)中其他業(yè)務(wù)線的關(guān)聯(lián)改造。
新系統(tǒng):交易與生產(chǎn)運(yùn)營解耦:交易相關(guān)的需求在訂單的域內(nèi)解決;生產(chǎn)側(cè)的需求,在生產(chǎn)域內(nèi)解決,減少上下游的相互影響。
業(yè)務(wù)條線接耦:不同業(yè)務(wù)線,業(yè)務(wù)流程不同,單一業(yè)務(wù)條線的需求改動(dòng),只在具體的流程中做迭代更新,不影響其他業(yè)務(wù)線。提升整個(gè)流程和業(yè)務(wù)的穩(wěn)定性。
2、提升新業(yè)務(wù)接入速度
訂單中心向前臺(tái)提供可復(fù)用的標(biāo)準(zhǔn)能力,提升新業(yè)務(wù)的導(dǎo)入速度。
訂單中心將原系統(tǒng)中的大應(yīng)用,拆分、抽象為多個(gè)小的應(yīng)用組合,并支持不同場(chǎng)景下按需編排業(yè)務(wù)流程。新業(yè)務(wù)通過對(duì)中臺(tái)公共標(biāo)準(zhǔn)能力的復(fù)用,可快速接入訂單中心,避免相同功能的重復(fù)建設(shè)。
3、提供全局化統(tǒng)一數(shù)據(jù)模型
原系統(tǒng):訂單分屬于多個(gè)系統(tǒng),外單、ECLP、大件系統(tǒng),有多套數(shù)據(jù)庫,業(yè)務(wù)語義不統(tǒng)一,不便于數(shù)據(jù)化建設(shè)。
新系統(tǒng):訂單中心統(tǒng)一定義訂單的標(biāo)準(zhǔn)數(shù)據(jù)模型,讓不同業(yè)務(wù)的數(shù)據(jù),沉淀在同一系統(tǒng),減少訂單域相關(guān)功能的重復(fù)建設(shè),避免資源浪費(fèi),打破部門壁壘。使得數(shù)據(jù)和流程可以集中得以管理和優(yōu)化,為集團(tuán)經(jīng)營分析、預(yù)測(cè)京東未來的創(chuàng)新空間,提供訂單域的標(biāo)準(zhǔn)數(shù)據(jù)。
二、架構(gòu)介紹
2.1 整體架構(gòu)設(shè)計(jì)
通過技術(shù)中臺(tái)架構(gòu)升級(jí)項(xiàng)目,將交易體系以新的接入-交易-履約-執(zhí)行四層架構(gòu)進(jìn)行重新搭建。其中交易訂單負(fù)責(zé)物流與客戶之間產(chǎn)生物流服務(wù)契約的單據(jù)流量收口,同時(shí)承載向下游OFC(訂單履約層)分發(fā)的職責(zé)。
2.2 實(shí)時(shí)數(shù)據(jù)層架構(gòu)設(shè)計(jì)
2.2.1 系統(tǒng)交互圖
系統(tǒng)交互如下:
訂單中心的標(biāo)準(zhǔn)接口在上層做了單據(jù)收口,同時(shí)我們?cè)跀?shù)據(jù)層也做了統(tǒng)一的收口。
將業(yè)務(wù)架構(gòu)與數(shù)據(jù)解耦,分布式數(shù)據(jù)庫、緩存、一致性等高可用、高性能設(shè)計(jì)從業(yè)務(wù)架構(gòu)范疇剝離,使業(yè)務(wù)架構(gòu)聚焦在業(yè)務(wù)自身。
持久化系統(tǒng):用于支撐接單、訂單修改、訂單取消、訂單刪除等數(shù)據(jù)持久化。
搜索系統(tǒng):提供訂單詳情查詢、訂單列表查詢、訂單狀態(tài)流水查詢、判斷是否百川訂單等服務(wù)。
中繼系統(tǒng):數(shù)據(jù)樞紐,通過消費(fèi)消息隊(duì)列將訂單數(shù)據(jù)寫入Elasticsearch、HBase、MySQL。
數(shù)據(jù)對(duì)賬系統(tǒng):用于對(duì)比多套存儲(chǔ)中間件的數(shù)據(jù)是否一致,以保障數(shù)據(jù)最終一致性。
數(shù)據(jù)同步系統(tǒng):將訂單列表查詢所需的查詢條件和列表展示字段從老系統(tǒng)同步至訂單中心,用于解決因切量過程中訂單數(shù)據(jù)存在于新老系統(tǒng)中而分頁困難的問題。
2.2.2 技術(shù)架構(gòu)圖
? 【讀寫分離架構(gòu)】采用讀寫分離架構(gòu)模式(CQRS),將訂單讀寫流量分離,以提高查詢性能和可擴(kuò)展性,同時(shí)達(dá)到讀、寫解耦。
? 【緩存】使用分布式緩存Redis緩存熱門訂單數(shù)據(jù)以及與訂單相關(guān)的信息提高并發(fā)和響應(yīng)速度減少對(duì)HBase的訪問,同時(shí),通過主、備、臨時(shí)3套高性能緩存以提升系統(tǒng)容災(zāi)能力。
? 【消息隊(duì)列】使用消息隊(duì)列JMQ實(shí)現(xiàn)異步處理訂單提升系統(tǒng)吞吐量,同時(shí)流量削峰減輕直接請(qǐng)求ES、HBase、數(shù)據(jù)庫的壓力。將不同業(yè)務(wù)場(chǎng)景(如下單、回傳)使用不同的Topic進(jìn)行隔離,可以更好地管理和維護(hù);將不同業(yè)務(wù)使用不同的Topic隔離,可以實(shí)現(xiàn)消息的并行處理和水平擴(kuò)展,提高系統(tǒng)的吞吐量和性能。
? 【復(fù)雜查詢】使用搜索引擎Elasticsearch解決訂單復(fù)雜查詢,先通過Elasticsearch獲取訂單號(hào),然后根據(jù)訂單號(hào)查詢分布式緩存Redis+列式數(shù)據(jù)庫HBase。
? 【低成本持久化存儲(chǔ)】采用HBase列式數(shù)據(jù)庫以支持海量數(shù)據(jù)規(guī)模的存儲(chǔ)和極強(qiáng)的擴(kuò)展能力。
? 【數(shù)據(jù)一致性】通過強(qiáng)事務(wù)、最終一致、冪等、補(bǔ)償、分布式鎖、版本號(hào)等實(shí)現(xiàn)
? 【多租戶架構(gòu)】系統(tǒng)中采用多租戶數(shù)據(jù)模型,將租戶的數(shù)據(jù)分離存儲(chǔ),以確保數(shù)據(jù)的隔離性和安全性。根據(jù)不同租戶的需求動(dòng)態(tài)擴(kuò)展系統(tǒng)的容量和資源,可以支持系統(tǒng)的水平擴(kuò)展。通過共享基礎(chǔ)設(shè)施和資源,多租戶架構(gòu)實(shí)現(xiàn)了更高的資源利用率和降低成本。
2.3 設(shè)計(jì)優(yōu)勢(shì)
2.3.1 高可用
? 應(yīng)用服務(wù)器、MySQL、Redis、HBase、JMQ等均跨機(jī)房部署;ES單機(jī)房部署,搭建ES主備雙機(jī)房集群
? 隔離、限流、熔斷、削峰、監(jiān)控
2.3.2 高性能
? 高性能緩存
? 異步化
2.3.3 海量數(shù)據(jù)處理
? 分庫分表
? 冷熱分離
? 列式存儲(chǔ)(HBase)
2.3.4 數(shù)據(jù)安全
敏感信息加密存儲(chǔ),Log、Redis、ES、MySQL、HBase等均采用加密存儲(chǔ),“誰存儲(chǔ)誰加密,誰使用誰解密”。
三、訂單數(shù)據(jù)模型
3.1 PDM模型
在訂單模型設(shè)計(jì)上,基于統(tǒng)一業(yè)務(wù)屬性、抽象通用模型、歸納共性實(shí)體的原則,將訂單模型主要分成了訂單的主檔信息、訂單的貨品信息、訂單的物流服務(wù)信息、訂單的營銷信息、訂單的財(cái)務(wù)信息、訂單的客戶渠道信息、訂單的收發(fā)貨信息、訂單的操作信息、訂單的擴(kuò)展信息等幾類
3.2 模型擴(kuò)展性
3.2.1 標(biāo)準(zhǔn)模型擴(kuò)展性設(shè)計(jì)
訂單中存在幾十上百個(gè)標(biāo)識(shí)字段,若每次都采用新增字段形式,訂單業(yè)務(wù)屬性、數(shù)據(jù)模型會(huì)大量膨脹,腐蝕模型,同時(shí)開發(fā)效率較低,故采用KV形式承接和存儲(chǔ)。將標(biāo)識(shí)劃分到各個(gè)業(yè)務(wù)域中,如訂單標(biāo)識(shí)、貨品標(biāo)識(shí)、營銷標(biāo)識(shí)等。
3.2.2 個(gè)性化業(yè)務(wù)模型擴(kuò)展性
針對(duì)個(gè)性化業(yè)務(wù),提供了一套可配置的數(shù)據(jù)庫字段管理方案,通過開箱即用的一些設(shè)置,訂單在提交、修改、查詢時(shí),可以根據(jù)業(yè)務(wù)身份+業(yè)務(wù)類型+業(yè)務(wù)字段找到不同的數(shù)據(jù)模型以及數(shù)據(jù)擴(kuò)展編碼,即找到存儲(chǔ)到哪張表哪個(gè)字段。在每張表都預(yù)留N個(gè)擴(kuò)展屬性,同一個(gè)擴(kuò)展屬性,不同的業(yè)務(wù)身份+業(yè)務(wù)類型表示不同的含義,以此實(shí)現(xiàn)擴(kuò)展存儲(chǔ)。
四、未來及挑戰(zhàn)
4.1 訂單個(gè)性化查詢
個(gè)性化查詢需求增多,如模糊查詢、根據(jù)查詢條件實(shí)時(shí)聚合等需求,若ES索引都放在同一個(gè)集群中,會(huì)影響整體集群穩(wěn)定性,但拆分后該業(yè)務(wù)數(shù)據(jù)無法與其他業(yè)務(wù)一塊查詢展示。
4.2 單元化架構(gòu)
當(dāng)前接單持久化TP99是47ms,在非跨機(jī)房情況下TP99是20ms,從數(shù)據(jù)來看,跨機(jī)房對(duì)性能影響很大。
單元化,可以讓同一個(gè)用戶的相關(guān)請(qǐng)求,只在一個(gè)機(jī)房內(nèi)完成所有業(yè)務(wù)「閉環(huán)」,不再出現(xiàn)「跨機(jī)房」訪問。單元化的部署方式,可以讓每個(gè)機(jī)房部署在任意地區(qū),隨時(shí)擴(kuò)展新機(jī)房。通過單元化,持續(xù)加強(qiáng)訂單平臺(tái)的基座穩(wěn)固。
4.3 硬件成本控制
訂單日均單量不斷上升,數(shù)據(jù)量越來越大,隨之而來是硬件成本的增加,如何控制硬件成本增加,是當(dāng)下及未來的一項(xiàng)挑戰(zhàn)。我們計(jì)劃通過數(shù)據(jù)歸檔、冷熱溫?cái)?shù)據(jù)分層等方式來降低數(shù)據(jù)存儲(chǔ)成本。
作者:京東物流 王衛(wèi)東文章來源:http://www.zghlxwxcb.cn/news/detail-710119.html
來源:京東云開發(fā)者社區(qū) 自猿其說Tech 轉(zhuǎn)載請(qǐng)注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-710119.html
到了這里,關(guān)于交易日均千萬訂單的存儲(chǔ)架構(gòu)設(shè)計(jì)與實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!