电商系统的库存管理
涉及實體貨物的電商系統均需要進行庫存管理。
一般來講,庫存管理的核心基礎為減少或避免超售(取決于貨物的價值以及稀缺程度),更高階的庫存管理相關需求可能涉及到發貨時效、倉位自動分配、多倉均衡、物流成本等方面。
一、 庫存交互的幾種場景
以下幾種場景涉及對庫存進行操作:
- 采購/進貨/生產
- 銷售/預售
- 退貨/換貨
- 盤點
- 調貨
以上操作可能會有并發場景,所以在設計相關數據庫操作時要特別考慮安全的鎖操作。
二、 庫存的三個層級
為了區分幾大不同場景的庫存操作,通常將庫存分為銷售層、調度層、倉庫層三種。
2.1 銷售層庫存
銷售層庫存主要關注面向終端顧客的庫存變動及配置,通常有以下幾個概念:
- 可用庫存:當前可以售賣的庫存;
- 訂單保留庫存:當訂單尚未正式付款生成時,為此單按照一定時限保留的庫存,訂單超時取消時隨之釋放;
- 已售庫存:已經生成了正式訂單的庫存;
- 活動庫存:大型促銷活動時為了保證活動的庫存準確性以及獨立性,通常會單獨為活動設立一個專屬庫位,稱為活動庫存;
- 虛擬庫存/預售庫存:當商品暫未擁有現貨時,可以設立虛擬庫存來安排預售活動;
- 安全庫存/鎖定庫存:針對某些特殊的庫位(例如與實體門店共享庫存的庫位),可以設立安全庫存來避免某一渠道將庫存全部售空,觸及安全庫存以后的銷售需要經過審核流程方可流轉;
2.2 調度層庫存
調度層庫存更多關注于倉庫-訂單之間以及倉庫-倉庫之間的庫存分配及流轉,通常有以下概念:
- 賬面庫存:倉庫中實際擁有的庫存總量;
- 可用庫存:可以用來滿足顧客訂單或者轉貨單的庫存數量;
- 在途庫存:工廠已生產,或已從外部采購,但尚未抵達倉庫的庫存,或倉庫之間轉貨操作中在途的庫存;
- 不可售庫存:由于質量或其它原因不可用來對外售賣的庫存;
- 已用庫存:已經被分配到具體銷售單上的庫存;
2.3 倉庫層庫存
倉庫層庫存是以倉庫為單位進行庫存管理:
- 可用庫存:本倉庫可以用來立即滿足OMS下發訂單的庫存;
- 已占用庫存:本倉庫已經被顧客訂單或者轉貨單占用的庫存;
- 不可用庫存:由于質量問題或者是顧客退貨訂單退回的,尚未準備好再次銷售的庫存;
- 已出庫庫存:已經交由快遞/物流并且成功出庫的庫存;
三、 庫存的流動同步及更新
庫存一般有兩個流動方向,從顧客終端流向倉庫,或從倉庫反向流到電商前端。前者為正常銷售情況下的扣減,后者則為轉貨、進貨后向前端系統推送可用庫存的流動。
由于現代的電商管理系統常常涉及多種不同組件(例如前端頁面、前端CMS、訂單處理中臺、OMS、SAP、WMS等等),庫存的同步更新需要妥善處理好多系統之間的同步問題,否則很容易出現超賣的情況。
通常庫存更新及流動的架構會采取分布式事務以確保各個系統的同時更新與同步。目前主流的消息隊列解決方案基本都可以確保終端一致性來達成庫存消息的有序流動以及同步更新。
另外對于一些實時性要求不太高的庫存場景也可以使用異步二次確認的方式來確保一致性。
后續待有空繼續更新。
總結
- 上一篇: Python笔记 之 矩阵元素选取
- 下一篇: 王道操作系统考研笔记——2.1.9 调度