目錄
一.前言
二.問題與挑戰?
1.庫存同步效率問題
2.并發超賣問題
3.共享庫存計算問題
三.核心設計方案
1.同步提效方案
2.防超賣解決方案
3.共享庫存計算方案
四.回顧總結
受疫情影響,越來越多的消費者在線上購買日常消費品,進一步加速了即時消費需求,隨著線上訂單量顯著升高,運維成本成了很大的瓶頸。傳統方式由運營人員維護線下、線上庫存,庫存維護不及時會引發商品缺勤率升高(有庫存無法售賣)、缺貨出(超賣)等問題,影響用戶購物體驗。本文主要介紹海博庫存系統是如何保證線下線上庫存統一、及時、準確的一體化解決方案。
即時零售需求下,線上、線下商品銷售采用一盤貨模式,即線上、線下商品種類相同,銷售同一份庫存。為了提升用戶體驗,線下所有商品種類(標品、箱包品、稱重品、組套品等)都能在線上售賣。庫存變更的同步流程,如圖所示:
線下門店庫存在線上三方渠道銷售會涉及到庫存的計算、轉換、同步等多種操作,商家實際運營過程中會出現以下幾種問題。假如門店剩余庫存如下列表所示:
商品名稱 | 商品規格 | 庫存數量 |
---|---|---|
可樂 | 瓶 | 10 |
酸奶 | 瓶 | 8 |
雞翅 | g | 1000 |
如圖所示,用戶A在線下門店購買5瓶可樂,付款后庫存剩余5瓶。線下庫存變更后未及時同步至線上三方渠道,用戶B在線上三方渠道購買6瓶可樂,結賬后庫存剩余4瓶,一共售賣11瓶可樂,線下門店庫存發生超賣。
如圖所示,用戶A在到家渠道購買可樂6瓶,付款后剩余4瓶,庫存變更后未及時同步至自有渠道,用戶B在自有渠道購買8瓶可樂,結賬后庫存剩余2瓶,一共售賣14瓶可樂,線下門店庫存發生超賣。
如圖所示,用戶A在線下門店購買酸奶4瓶,同時用戶B在線上渠道購買5瓶酸奶,線上線下總共售賣9瓶酸奶,線下門店庫存發生超賣。
如圖所示,用戶A在到家渠道購買酸奶3瓶,同時用戶B在自有渠道購買6瓶酸奶,線上庫存總共售賣9瓶酸奶,線下門店庫存發生超賣。
線上渠道包括單品、箱包品、多規格品、組套品等多種類商品售賣,由于線下門店、線上渠道共享庫存,根據門店庫存換算后,如圖所示,線上渠道可售庫存分別為:可樂(瓶裝)10瓶、可樂(提裝)1提、雞翅(500g)2份、可樂雞翅(可樂【瓶裝】*1 + 雞翅*200g)5份。
用戶A在到家渠道購買了1份可樂雞翅, 其中可樂共享庫存關聯商品包括瓶裝可樂和提裝可樂,雞翅關聯商品500g稱重雞翅,所有關聯品庫存重新計算,計算量大、計算復雜、同時人工維護變更困難。
1.同步提效方案
門店庫存發生變更,從門店同步到三方渠道,如果同步時間過長,三方渠道庫存不準確,商家很容易發生超賣。我們需要保證同步時間在可控的范圍內,避免出現超賣。解決該問題難點及分析如下:
庫存變更頻繁:高動銷商品庫存變更頻繁,需提高同步效率。
同步數據量大:部分商家為保證庫存準確,線下早八晚九全量同步,其他時間增量同步,同步數據量大,需提升同步頻次。
三方渠道限頻:線上各渠道庫存同步存在限頻,且限頻不一致。
由上述問題可知,庫存同步數據量大、流程長,會影響庫存的同步性能,為了提升性能,將服務進行隔離,拆分如下兩個模塊,避免大量同步影響庫存計算。 線下庫存:主要負責庫存數據的校驗、過濾線上庫存:主要處理海博庫存的計算和渠道同步
鑒于庫存同步數據量大,為避免與手動調整庫存過程中發生沖突,造成庫存錯誤,我們通過分布式鎖實現并發控制;為了提高處理效率,剝離非核心業務操作,通過消息中間件異步保存流水和同步任務,同步操作是基于分布式調度框架多線程并行同步,提升同步頻次和效率。
如前文所述,同步渠道采用分布式調度框架,該框架能讓商家所有門店品任務,動態的分配到多個主機jvm中,通過不同的線程組并行執行。在多線程情況下,這些同步任務通過劃分不同分片(每個分片為一組同步任務),每個線程執行一個或多個分片的任務,避免重復處理。
如果根據商家維度分配某個分片,在數據量大時,很容易出現任務積壓;無限增加分片,可能會觸發渠道限頻,以上兩種場景均會導致同步效率低。
如圖所示,我們的策略是根據商家同步任務的情況,均衡分配任務所屬分片,實現不觸發渠道限頻的情況下達到最高同步效率。
在實際業務場景中,除線下同步,還有手動調整、同步配置變更、線上銷售等多種場景觸發庫存變更。每種業務場景對庫存的影響和及時性要求不同。
舉個案例,假如線下同步10個庫存至渠道,同時商家在海博將庫存手動調整為5,此場景下手動調整的優先級比線下同步高,三方渠道最終庫存應該是5,否則會發生超賣。
我們的解決方案是根據特定算法和策略進行打分,分值高的任務優先同步,可實現線下變更同步控制在分鐘級延遲,手動調整、線上銷售同步控制在秒級延遲。
基于前面提到的數據同步方案,雖然解決了同步延遲(控制在分鐘級),但是無法解決商品在低庫存量時,線下線上同時銷售發生超賣的問題,需要保證商品銷售最大化的前提下有效控制缺貨出。
從業務角度考慮,增加安全庫存,可降低超賣率。
安全庫存:保留固定庫存只在線下門店售賣
線上可售庫存 = 線下門店庫存 - 安全庫存
由于線下門店用戶選購時間不固定,無法精準確定商品具體的安全庫存值,如何合理設置安全庫存?如果粗暴的將商品安全庫存統一設置為4,會出現以下兩種問題,如圖所示:
由上圖可知:8:31-9:00時段,線下門店庫存為10,線上可售庫存=總庫存(10)- 安全庫存(4), 此時線下一次賣出8個,在庫存同步生效之前,加上線上可售庫存6,理論上可能超賣個數=8+6-10;
10:01-10:30時段,線下門店庫存為10,線上可售庫存=總庫存(10)- 安全庫存(4),此時線下一次賣出2個,加上線上可售庫存6,理論上線下門店和線上三方渠道一共銷售庫存個數=2+6,其中有2個庫存在線上缺勤,無法售賣。
以上計算方法是在最理想的狀態下進行的計算,在實際計算中,動態安全庫存 ≈ 線下時段銷量。
此方案通過銷量預測算法,對線下門店各時段銷售庫存進行預測,動態設置安全庫存。
基于以上動態安全庫存設計,能夠降低線下線上同時銷售產生超賣問題,但無法避免渠道間并發銷售產生的超賣,通過增加同步系數,按比例同步各渠道可售庫存,降低超賣率,保證商品銷售最大化,如圖所示:
同步系數:線上可售庫存占用線下門店庫存比例
線上可售庫存 = 線下門店庫存 * 同步系數
線下涉及商品種類繁多(標品、箱包品、多規格稱重品、組套品等),為了提升用戶體驗,需保證所有商品種類在線上標品化銷售,并準確計算共享庫存的商品庫存。解決該問題難點及分析如下:
計算量大:線下門店庫存發生變更、線上銷售扣減庫存,關聯共享庫存商品都需重新計算,計算量大且極易發生并發。
時效要求高:所有共享庫存商品庫存需保證同時變更,否則會出現庫存不準確。
預占庫存:線上銷售未配送商品數量
線下可用庫存:共享庫存可用商品數量(線下門店庫存-共享庫存商品總預占)
可售庫存:可對外銷售的商品數量
現貨庫存:線上商品總數量(可售庫存 + 預占庫存)
針對計算量大,我們設計了可擴展、可編排的庫存計算引擎,如圖所示:
該方案支持標品、箱包品、稱重品以及共享庫存關聯品的并行計算,保證庫存變更的時效性、準確性。
庫存變動中,最關鍵的節點就是線上銷售扣減庫存,扣減規則如下:
預占:+預占,-可售
調整:-預占,+可售
換貨:【訂單品】-預占,+可售,【換貨品】+預占,-可售
出庫:-預占,-現貨
取消:-預占,+可售
為保證訂單處理流程性能和效率,線上銷售扣減庫存采用mq異步消息方式處理,由于mq無法保證與實際流程一致,按照錯誤順序處理庫存,會導致庫存數據錯誤。我們設計了訂單狀態機,在扣減庫存前,進行前置狀態校驗,避免此問題。
訂單狀態機主要包括訂單預占、訂單調整、訂單換貨、訂單出庫、訂單取消等節點,如圖所示:
為方便擴展,通過配置方式維護各節點的前置狀態,扣減庫存前根據當前節點狀態進行處理。
基于以上即時零售場景存在的痛點,我們在分析、梳理、解決這些的問題過程中沉淀了如下的庫存系統架構:
庫存架構從多方面進行考慮設計:
服務隔離方面,拆分線下、線上庫存兩個模塊,線下庫存負責接收ERP庫存數據,并進行數據過濾、清洗,線上庫存支持業務操作、庫存計算和渠道數據同步。
同步效率方面,設計了動態控頻同步組件,針對不同渠道動態控制同步頻率,保證渠道同步效率的最大化。
拓展性方面,設計了庫存計算引擎,根據不同業務場景可編排計算流程,同時支持新業務場景的拓展。
準確性方面,該架構支持全鏈路數據監控,保證數據在各環節的準確、可追溯;
以上為即時零售庫存系統的整體設計,我們通過合理的架構設計保證了庫存在整體業務流程的實時、準確、統一。
中郵無人機(北京)有限公司揭牌
2412 閱讀智能倉儲企業“智世機器人”完成數千萬元A輪融資
2362 閱讀這家老牌物流巨頭被整合重組,四千多名員工將何去何從?
1676 閱讀聊聊2025年物流企業如何做營銷規劃
1611 閱讀極兔速遞2024年第四季度包裹量增長32.5% 全球日均單量超8000萬件
1063 閱讀地緣政治重塑下的全球供應鏈:轉型、挑戰與新秩序
997 閱讀2024最值錢的物流上市企業是誰?哪些物流企業被看好,哪些被看跌?
1002 閱讀物流供應鏈領域“吸金”不力,但能給投融資事件頒幾個獎
1000 閱讀2024LOG供應鏈物流?突破創新獎候選案例——準時達國際供應鏈管理有限公司
931 閱讀京東緊急馳援西藏震區,首批救援物資已由專車送出
983 閱讀