<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          電商供應鏈系統(tǒng)的DDD架構設計實戰(zhàn)

          共 2434字,需瀏覽 5分鐘

           ·

          2021-10-20 06:40

          任何一套業(yè)務架構都可能存在一定的歷史問題,這是業(yè)務在不同階段做技術選型必然出現(xiàn)的狀況,如何用新的、合適的架構思想做恰到好處地改造,則是架構師們的必備能力。

          今天的主角是供應鏈系統(tǒng),又被稱為進銷存系統(tǒng)。這個系統(tǒng)主要是針對采購(進)—>入庫(存)—>銷售(銷)動態(tài)鏈條的管理系統(tǒng),核心能力是管理倉庫貨物庫存,在電商體系中起到承上啟下的作用,下圖中的 Skynet 系統(tǒng)和 ERP 系統(tǒng)分別扮演著供應鏈系統(tǒng)的核心角色,負責訂單發(fā)貨、售后退貨、采購補貨、倉間調(diào)撥以及特殊出入庫等核心流程。

          Skynet 系統(tǒng)和 ERP 系統(tǒng)作為元老級系統(tǒng),自 Keep 開啟電商賽道時開始建設,經(jīng)過多年需求快速迭代,期間系統(tǒng)包袱越來越重,運營過程中的問題也越來越多。供應鏈系統(tǒng)相對于 Keep 電商業(yè)務發(fā)展明顯滯后,甚至有可能進一步阻礙 Keep 電商業(yè)務發(fā)展,而當時的供應鏈系統(tǒng)因缺乏系統(tǒng)性規(guī)劃、代碼缺少規(guī)范,導致這個元老級系統(tǒng)積重難返。當時面臨的主要問題如下:

          • 系統(tǒng)邊界不清晰

          • 架構混亂,系統(tǒng)內(nèi)部分層不清晰

            • 越來越模糊 usecase,導致代碼邊界和事務不清晰;

            • 層后各層職責和接口職責不清晰,導致接口依賴混亂,甚至出現(xiàn)循環(huán)依賴。

          • 庫存不準,庫存變更上下文不清晰

            • 庫存不準,超賣甚至少賣情況頻繁

            • 庫存變更日志不規(guī)范,上下文不清晰,出現(xiàn)庫存問題時,查找原因困難重重

            • 庫存與庫存變更日志無法自證正確

            業(yè)務新要求

            • 店鋪庫存分配自動化

            • 智能采購

            • 庫存準確率保障

            • 履約率保障

            • 提升運營效率

          種種問題重壓,在老系統(tǒng)上修改已無法根除系統(tǒng)問題,且無法滿足未來業(yè)務發(fā)展需求,導致供應鏈系統(tǒng)正式提上日程。

          重構思路主要包括三大類梳理,分別是:

          • 梳理庫存業(yè)務場景

          • 梳理限界上下文

          • 梳理庫存模型

          • 占用庫存:已售賣未出庫庫存數(shù)

            可用庫存:倉庫實物庫存 - 占用庫存

            實物庫存:倉庫中的實際庫存數(shù)

            在途庫存:已采購未入庫庫存數(shù)

            凍結(jié)庫存:因秒殺等促銷活動或倉間調(diào)撥等預占的庫存數(shù)

          梳理清楚之后,關于 DDD 架構選型也是要重點考慮的內(nèi)容:

          • 梳理領域模型與非領域模型之間關系 - 六邊形架構

          • 保證核心領域模型的穩(wěn)定性

            分層設計采用依賴倒置原則,保證核心領域模型的穩(wěn)定性,領域?qū)硬灰蕾嚾魏纹渌麑樱讓臃湛梢砸蕾嚫邔臃账峁┑慕涌凇?

          • 防止定制化查詢腐化領域模型

          我們通過引入 CQRS 模式,隔離命令與查詢領域模型。

          • 防止與其他限界上下文交互導致領域模型腐化

          如下圖所示采購上下文通過防腐層 (ACL) 將倉儲庫存核心上下文中的倉庫信息映射為自身上下文中的倉庫值對象,防止倉庫信息依賴腐化。

          • 架構最終落地 -COLA

          • 庫存變更場景相關單據(jù)狀態(tài)一致性保障

          從庫存變更場景中,可以看到圍繞庫存變更在不同的業(yè)務層存在不同的業(yè)務單據(jù),上層業(yè)務層單據(jù)狀態(tài)變更依賴底層倉儲核心單據(jù)狀態(tài)變更,如采購入庫單入庫狀態(tài)變更為入庫完成則采購單狀態(tài)也會變更為已完成,如銷售出庫單狀態(tài)變更為出庫完成則銷售發(fā)貨單狀態(tài)會變更為已發(fā)貨。

          • 方案選擇

          最終我們采用 EventStore 方案,使用 EventStore 數(shù)據(jù)流程如下:

          上圖中黃色部分為領域事件異常處理。

          • 發(fā)布領域事件代碼如下:

          • 訂閱領域事件

            注冊訂閱組

          ????在訂閱組中聲明訂閱事件

          • 在持續(xù)集成開發(fā)過程中如何同時保障效率和質(zhì)量 - 單元測試保駕護航

            核心領域模型添加單元測試,對應 Domain 測試

            核心業(yè)務接口場景添加單元測試,對應 CmdExe 測試

            引入 Mockito 庫,mock 相關接口和數(shù)據(jù),驗證流程環(huán)節(jié)是否正確

            在單測代碼中造單測相關數(shù)據(jù),保證單測數(shù)據(jù)可靠性

            單測采用 H2 數(shù)據(jù)庫,避免測試過后留痕,影響后續(xù)單測,同時提升單測執(zhí)行效率

            減少或不依賴其他中間件,如 Dubbo、Kafka 等,如依賴可考慮直接 Mock

            git push 后 CI 開啟自動單元測試

          最終,回顧這次改造工作,我認為收益可以分為五點:

          • 實際庫存準確,徹底解決倉庫庫存不準問題,同時為校準銷售庫存提供基準參考;

          • 功能擴展方便,如后續(xù)快速對接財務系統(tǒng);

          • 快速定位問題(代碼結(jié)構清晰,庫存變更有據(jù)可查且上下文清晰);

          • 沉淀出較通用的事件組件 EventStore,后續(xù)在 Keep 電商內(nèi)部快速推廣復用;

          • 沉淀出一套比較成熟的 DDD 最佳實踐,后續(xù)快速推廣至 Keep 電商庫存系統(tǒng)重構、售后重構。

          可以看出,收益還是非常喜人的。大部分同學關注 DDD 是因為微服務,沒錯,DDD 可以說是與微服務天生互補的,DDD 領域面向劃分業(yè)務模型邊界,微服務面向?qū)误w架構拆分為多個微服務,至于如何拆微服務,DDD 領域拆分則是一個非常好的微服務拆分方式。

          歡迎關于 DDD,如果你想進一步交流探討,也可以在本文下留言,期待大家的分享能夠帶來更多的啟發(fā)。

          作者介紹

          武清明,從業(yè) 12 年,近 8 年一直在互聯(lián)網(wǎng)電商行業(yè)一線從事系統(tǒng)研發(fā),之前在京東和萬達電商負責過倉儲系統(tǒng)、訂單系統(tǒng)、促銷系統(tǒng)等研發(fā)工作。目前在 Keep 負責商業(yè)化業(yè)務中臺研發(fā)和規(guī)劃工作。擅長電商業(yè)務系統(tǒng)架構設計,采用 DDD 合理簡單化設計復雜電商系統(tǒng),提升系統(tǒng)功能模塊的復用性和擴展性。

          出處:https://blog.csdn.net/zhipengfang/article/details/120500445



          推薦閱讀:

          世界的真實格局分析,地球人類社會底層運行原理

          不是你需要中臺,而是一名合格的架構師(附各大廠中臺建設PPT)

          企業(yè)IT技術架構規(guī)劃方案

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺實踐】華為大數(shù)據(jù)中臺架構分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細280頁Docker實戰(zhàn)文檔!開放下載

          華為大數(shù)據(jù)解決方案(PPT)

          瀏覽 91
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  强伦轩人妻一区二区三区四区 | 三区麻豆传媒视频 | 成人免费视频 国产免费麻豆。 | 无码免费一区二区 | 日逼中文字幕 |