国产成人精品无码青草_毛片一级_嫩草一区二区三区_国产成人a片免费观看_国产精品中文字幕一区二区_欧美久久久一区二区三区

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐

來源:IT大咖說 | 2018-02-05 09:59

  內(nèi)容來源:2017年4月22日,貝法易集團(tuán)技術(shù)部總監(jiān)黃亮在“2017年MongoDB中文社區(qū)深圳用戶組大會”進(jìn)行《MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐》演講分享。IT 大咖說作為獨(dú)家視頻合作方,經(jīng)主辦方和講者審閱授權(quán)發(fā)布。

  閱讀字?jǐn)?shù):2896 | 4分鐘閱讀

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  摘要

  本次介紹下出口易跨境電商物流供應(yīng)鏈系統(tǒng)從單體應(yīng)用過渡到面向服務(wù)的分布式系統(tǒng)架構(gòu)的過程中,遇到的一些挑戰(zhàn)和實(shí)現(xiàn)。其中包括了基于MongoDB建模和數(shù)據(jù)持久化方面上具體實(shí)踐。

  嘉賓演講視頻回顧及PPT:http://t.cn/R82rZLw

  關(guān)于出口易物流

  出口易物流是廣州市貝法易商貿(mào)有限公司(簡稱貝法易)旗下,以全球倉儲為核心,整合全球物流網(wǎng)絡(luò)系統(tǒng),為跨境電商賣家提供海外倉儲、國際專線、國際小包、國際快遞、FBA頭程等物流服務(wù)以及本地化售前售后服務(wù),解決訂單管理、金融融資難題。我們不是物流的供應(yīng)商,我們是跨境電商全程物流解決方案提供商。

  我們公司的重資產(chǎn)是人員,我們了解跨境電商物流,包括跨境電商通關(guān)的環(huán)節(jié)、關(guān)于物流方面的國際法律以及離境品的相關(guān)信息,這些都是我們公司最寶貴的資源。

  我們公司底下有一大群長期合作的供應(yīng)商,這是我們最大的優(yōu)勢。我們的難點(diǎn)也是在于這些供應(yīng)商是不可控的,因?yàn)槲覀兪窃谑褂脛e人家的服務(wù)。

  所以除了訂單系統(tǒng)還有一個(gè)很重要的資產(chǎn)就是我們自營的海外倉儲,這也是我們最核心的價(jià)值。

  覆蓋歐美澳主要市場的服務(wù)網(wǎng)絡(luò)

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  上圖是我們?nèi)虿季值奈锪骶W(wǎng)絡(luò)。這些倉儲有大有小,英國倉庫是我們最核心的倉庫。截至2017年,在國內(nèi)我們一共有八個(gè)倉儲中心,重點(diǎn)的是在深圳、廣州和上海。

  全球主流電商平臺重點(diǎn)推薦物流服務(wù)提供商

  我們合作的平臺推薦我們的物流服務(wù)提供商有Amazon、ebay、wish、阿里國際、shopee、AliExpress還有LAZADA。

  出口易新老架構(gòu)演變過程

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  我們之前的系統(tǒng)是上圖左邊的架構(gòu),針對商家第三方的ERP和一些商家自己研發(fā)的一套系統(tǒng),還有一些平臺跟我們的系統(tǒng)都是有直接交互。有的是通過出口易提供了一套UI來進(jìn)行訪問,還有就是大量的線上發(fā)貨,我們會采用API來進(jìn)行接入。我們后臺有admin管理后臺,還有單獨(dú)的一塊WMS系統(tǒng)。

  我們認(rèn)為這個(gè)系統(tǒng)有些過于龐大,想做一些調(diào)整。新的架構(gòu)大部分還是沒有改動,只是在后端針對admin的系統(tǒng)想要往面向服務(wù)架構(gòu)方向落地?;跇I(yè)務(wù)場景的切分有兩塊,一塊是基于通用服務(wù),比如說用戶的認(rèn)證和授權(quán),還有就是日志。

  支付有一些支付網(wǎng)關(guān),有和paypal、alipay、payoneer還有銀行的接口。

  下面是我們業(yè)務(wù)最主要模塊,包括產(chǎn)品報(bào)價(jià)、客戶關(guān)系管理系統(tǒng),還有訂單、物流網(wǎng)絡(luò)和運(yùn)輸,包括WMS、支付、物流軌跡跟蹤、供應(yīng)商管理系統(tǒng),還有結(jié)算報(bào)表等等諸如此類。

  出口易老業(yè)務(wù)系統(tǒng)特點(diǎn)

  單體應(yīng)用:前后端系統(tǒng)共用一套WEB App Solution。

  單一數(shù)據(jù)庫:采用MS SQLServer 數(shù)據(jù)庫,核心業(yè)務(wù)功能共用一個(gè)數(shù)據(jù)庫。

  業(yè)務(wù)功能完整:IT系統(tǒng)隨業(yè)務(wù)的發(fā)展不斷擴(kuò)展新功能。滿足開展跨境電商物流業(yè)務(wù)最基本的功能性需求。

  容易測試和部署:單獨(dú)一個(gè)Solution,系統(tǒng)依賴少,一旦部署,全部功能即可測試。

  出口易老業(yè)務(wù)系統(tǒng)不足

  不夠靈活:對應(yīng)用程序做任何細(xì)微的修改都需要將整個(gè)應(yīng)用程序重新構(gòu)建、重新部署。

  妨礙持續(xù)交付:系統(tǒng)規(guī)模大,構(gòu)建和部署時(shí)間也相應(yīng)地比較長,不利于頻繁部署,阻礙持續(xù)交付。

  受技術(shù)棧限制:包括開發(fā)語言,開發(fā)工具,數(shù)據(jù)庫一旦選定,無法根據(jù)實(shí)際需要作其他選擇。

  技術(shù)負(fù)債:系統(tǒng)邏輯異常復(fù)雜,隨著時(shí)間推移,人員更迭,技術(shù)負(fù)債不斷累積。

  出口易新業(yè)務(wù)系統(tǒng)特點(diǎn)

  面向服務(wù):根據(jù)業(yè)務(wù)模塊切分不同的系統(tǒng)模塊,系統(tǒng)模塊采用面向服務(wù)架構(gòu)。服務(wù)與服務(wù)通過明確的接口定義進(jìn)行通訊。

  領(lǐng)域驅(qū)動設(shè)計(jì):每個(gè)業(yè)務(wù)模塊團(tuán)隊(duì)負(fù)責(zé)一個(gè)領(lǐng)域或業(yè)務(wù)功能相關(guān)的全部開發(fā)。核心領(lǐng)域根據(jù)DDD中明確定義的規(guī)則實(shí)現(xiàn)。

  獨(dú)立部署、升級、擴(kuò)展和替換:每個(gè)服務(wù)可以單獨(dú)部署,透明升級,不影響整個(gè)系統(tǒng)。

  異構(gòu)/采用多種語言:每個(gè)服務(wù)開發(fā)團(tuán)隊(duì),可以選擇自己熟悉開發(fā)語言,數(shù)據(jù)庫,開發(fā)工具和開發(fā)架構(gòu)。

  新架構(gòu)落地的切入點(diǎn)

  身份認(rèn)證:每個(gè)服務(wù)都需要統(tǒng)一的登錄認(rèn)證。

  鑒權(quán):不同的用戶使用相同的服務(wù)模塊都需要鑒權(quán)。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  由單點(diǎn)登錄的頁面包括基于OAuth2 API這樣的方式來接入。內(nèi)部采用的是DDD這樣的一個(gè)邏輯架構(gòu),包括應(yīng)用層、領(lǐng)域?qū)印nI(lǐng)域?qū)永锩嬗职祟I(lǐng)域模型、實(shí)體子對象、領(lǐng)域服務(wù)、領(lǐng)域事件和查詢的規(guī)格。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  基于倉儲,要存一個(gè)訂單,必須連接實(shí)體和子對象一起存儲刷新到數(shù)據(jù)庫。

  我們做應(yīng)用的時(shí)候更偏向于完成業(yè)務(wù),所以選用了mangoDB。我們有一套自己的架構(gòu),在封裝的過程中就會把mangoDB做一層封裝。

  上圖中面向切面的架構(gòu)包括了exertion、loading和cache等切面。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  上圖是TMS系統(tǒng)調(diào)撥單聚合根示意圖,它包括了物流軌跡的集合、預(yù)計(jì)到貨時(shí)間等信息,還有這些調(diào)撥單歷經(jīng)的節(jié)點(diǎn)信息。

  為什么選擇MongoDB?

  1、非事務(wù)緊密型。錯(cuò)誤數(shù)據(jù)容忍性相對比較高。

  2、團(tuán)隊(duì)成員有使用MongoDB開發(fā)經(jīng)驗(yàn)。對基于MongoDB方面的建模需要考慮的必要冗余有一定的了解。

  3、Portal 模塊數(shù)據(jù)庫讀大于寫,基于MongoDB讀寫方面的高性能,解決了高并發(fā)下系統(tǒng)卡頓問題。

  4、TMS 系統(tǒng)模型之間關(guān)系復(fù)雜,采用傳統(tǒng)關(guān)系數(shù)據(jù)庫,勢必增加一堆表。采用MongoDB,可以把復(fù)雜的模型,通過一個(gè)Doucment存儲到一起。

  基于MongoDB開發(fā)需要注意的問題

  集合之間不能Join,建模方面要特別注意。建議增加必要的冗余,減少二次查詢。

  僅僅支持單個(gè)Document級別事務(wù)。數(shù)據(jù)一致性錯(cuò)誤時(shí),要考慮增加必要數(shù)據(jù)監(jiān)控和數(shù)據(jù)修復(fù)功能。

  聚合查詢,需要通過MongoDB 聚合管道方式查詢,MongoDB C# 驅(qū)動提供了良好支持,但是相對Linq查詢還是比較繁瑣。

  基于MongoDB的持久化實(shí)現(xiàn)

  一、倉儲Repository

  倉儲限定在對整個(gè)聚合根的操作上,提供聚合根的持久化和重建或查詢。

  二、倉儲上下文Repository Context

  負(fù)責(zé)事務(wù)處理。每個(gè)聚合根的倉儲都會關(guān)聯(lián)到同一個(gè)倉庫上下文。但是MongoDB 不支持事務(wù),我們提供了虛擬實(shí)現(xiàn)。倉儲上下文應(yīng)用了工作單元模式。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  一些關(guān)注點(diǎn)

  一、領(lǐng)域模型采用POCO(POJO)

  簡單的CLR對象(簡單的Java對象),不繼承任何持久化框架中的基類,或?qū)崿F(xiàn)任何持久化框架中的接口。領(lǐng)域?qū)硬灰肕ongoDB類庫。MongoDB倉庫層使用lambda expression 實(shí)現(xiàn)類的Map。

  二、ID 生成器

  有多種ID生成器可供選擇。GuidGenerator,OjbectIdGenerator,String OjbectIdGenerator,etc。我們ID一律使用String類型。所以直接使用MongoDB的StringObjectIdGenerator。

  三、多態(tài)類的Map

  如果把多態(tài)類(繼承)映射到MongoDB,需要指定已知類型。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  四、一些需要了解的約定

  NamedIdMemberConvention可以指定類的哪些屬性可以作為ID。

  IgnoreExtraElementsConvention可以忽略Document中不存在于類中的字段,否則會拋出異常。

  EnumRepresentationConvention可以指定枚舉序列化的方式,我們都指定為BsonType.String。

  MongoDB聚合框架(C#)

  一、聚合框架

  MongoDB2.2版本引入了此功能,是數(shù)據(jù)聚合的一個(gè)新框架。

  這個(gè)框架一是對文檔進(jìn)行“過濾”,也就是篩選出符合條件的文檔;二是對文檔進(jìn)行“變換”,也就是改變文檔的輸出形式。其他的也包括按照某個(gè)指定字段分組和排序等。

  它其實(shí)是MapReduce的替代方案,但比MapReduce簡單。

  該框架使用聲明性管道符號來支持類似SQL 中的Group by 操作的功能。不需要自己編寫自定義的JavaScript。

  二、管道操作符

  $project:數(shù)據(jù)投影,主要用于重命名、增加和刪除字段。

  $match:過濾操作,篩選符合條件文檔,作為下一階段的輸入。

  $limit:限制經(jīng)過管道的文檔數(shù)量。

  $skip:從待操作集合開始的位置跳過文檔的數(shù)目。

  $unwind:將數(shù)組元素拆分為獨(dú)立字段。

  $group:對數(shù)據(jù)進(jìn)行分組。

  $sort:對文檔按照指定字段排序。

  $geoNear:會返回一些坐標(biāo)值,這些值以按照距離指定點(diǎn)距離由近到遠(yuǎn)進(jìn)行排序。這個(gè)在地理信息系統(tǒng)中比較常用。

  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  

MongoDB在跨境電商物流供應(yīng)鏈系統(tǒng)中的實(shí)踐


  總結(jié)

  對于大多數(shù)的聚合操作,聚合管道可以提供很好的性能和一致的接口。

  使用起來比較簡單,和MapReduce一樣,它也可以作用于分片集合。

  輸出的結(jié)果只能保留在一個(gè)文檔中,要遵守BSON Document大小限制(當(dāng)前是16M)。

  管道對數(shù)據(jù)的類型和結(jié)果的大小會有一些限制,對于一些簡單的固定的。

  聚集操作可以使用管道,但是對于一些復(fù)雜的、大量數(shù)據(jù)集的聚合任務(wù)還是使用MapReduce。

  今天的分享就到這里,謝謝大家!


【聲明】物流產(chǎn)品網(wǎng)轉(zhuǎn)載本文目的在于傳遞信息,并不代表贊同其觀點(diǎn)或?qū)φ鎸?shí)性負(fù)責(zé),物流產(chǎn)品網(wǎng)倡導(dǎo)尊重與保護(hù)知識產(chǎn)權(quán)。如發(fā)現(xiàn)文章存在版權(quán)問題,煩請聯(lián)系小編電話:010-82387008,我們將及時(shí)進(jìn)行處理。

10秒快速發(fā)布需求

讓物流專家來找您

主站蜘蛛池模板: 性饥渴艳妇性色生活片在线播放 | 日韩亚av无码一区二区三区 | 一千部毛片免费观看在线观看 | 伊人无码精品久久一区二区 | www.av天堂com | 亚洲VA天堂VA欧美VA在线 | 国产杨幂丝袜AV在线播放 | 日韩欧美亚洲综合久久影院d3 | 免费99精品国产自在现线 | 亚洲熟妇国产熟妇肥婆 | 亚洲制服丝袜精品久久 | 日日夜夜精品视频免费 | 理论片麻豆 | 九九热视频精品在线观看 | 婷婷综合缴情亚洲狠狠小说 | 人成午夜免费视频无码 | 千金被调教室跪趴SM | 免费a级| 亚洲中文字幕无码一区无广告 | 黄色天堂在线观看 | 国产精品人妻无码久久久郑州 | 在线观看美女网站大全免费 | 亚洲色成人网一二三区 | 久久视频在线视频观看天天看 | 粗壮挺进邻居人妻无码 | 免费的国产成人AV网站 | 成人无遮挡裸免费视频在线观看 | 国产亚洲欧美在线专区 | 免费的日本黄网站大全 | 99久久久无码国产精品不卡 | 奇米影视四色影音先锋 | 在线免费av网址 | 男女裸体下面进入的免费视频 | 免费观看添你到高潮视频 | 五月天婷婷久久 | 亚洲中文字幕成人无码 | 在线国产福利精品 | 亚洲交友中心首页 | 人人妻人人超人人 | 麻豆高清免费国产一区 | 久久9精品区-无套内射无码 |