合合信息啟信產業(yè)大腦攜手市北新區(qū)打造“一企一畫像”平臺,加速數字化轉型重慶:力爭今年智能網聯(lián)新能源汽車產量突破 100 萬輛,到 2027 年建成萬億級產業(yè)集群微信iOS最新版上線:iPhone用戶可在朋友圈發(fā)實況照片了蘋果有線耳機或將停產沖上熱搜!閑魚相關搜索量暴漲384%2024 vivo開發(fā)者大會官宣:OriginOS 5/自研藍河系統(tǒng)2降臨真·AI程序員來了,阿里云「通義靈碼」全面進化,全流程開發(fā)僅用幾分鐘東方甄選烤腸全網銷量及銷售額領先鴻蒙PC要來了 界面很漂亮!余承東:目前華為PC將是最后一批搭載Windows上半年中國AR/VR出貨23.3萬臺,同比下滑了 29.1%IDC:2024 上半年中國 AR / VR 頭顯出貨 23.3 萬臺,同比下滑 29.1%英特爾AI加速器Gaudi3下周發(fā)布,挑戰(zhàn)NVIDIA統(tǒng)治地位!大屏技術邂逅千年色彩美學!海信激光電視成為電影《只此青綠》官方合作伙伴OpenAI將最新AI模型o1擴展到企業(yè)和教育領域三星新專利探索AR技術新應用:檢測屏幕指紋殘留,提高手機安全性猛瑪傳奇C1:直播圖傳技術的革新者JFrog推出首個運行時安全解決方案,實現從代碼到云的全面軟件完整性和可追溯性亞馬遜推出一大波生成式 AI 工具,購物體驗全面升級機器人公司1X推出世界模型Apple Intelligence測試版現已開放革命性AI對話系統(tǒng)Moshi問世:機器也能說人話了?
  • 首頁 > 數據存儲頻道 > 數據庫頻道 > 軟件架構

    vivo全球商城:庫存系統(tǒng)架構設計與實踐

    2023年03月13日 15:58:06   來源:官網商城開發(fā)團隊

      本文是vivo商城系列文章,主要介紹vivo商城庫存系統(tǒng)發(fā)展歷程、架構設計思路以及應對業(yè)務場景的實踐。

      一、業(yè)務背景

      庫存系統(tǒng)是電商商品管理的核心系統(tǒng),本文主要介紹vivo商城庫存中心發(fā)展歷程、架構設計思路及應對各種業(yè)務場景的實踐。

      vivo商城原庫存系統(tǒng)耦合在商品系統(tǒng),考慮到相關業(yè)務邏輯復雜度越來越高,庫存做了服務拆分,在可售庫存管理的基礎上新增了實物庫存管理、秒殺庫存、物流時效 、發(fā)貨限制、分倉管理等功能,滿足了商城庫存相關業(yè)務需求。

      本文將介紹vivo商城庫存系統(tǒng)架構設計經驗以及一些問題的解決方案。

      二、系統(tǒng)架構設計

      2.1 vivo大電商庫存架構

      根據vivo大電商的銷售渠道與業(yè)務場景可以將庫存業(yè)務架構分為3個層級:倉庫層、調度層以及銷售層。

      倉庫層對應實體倉庫,包括自營倉庫、順豐倉等第三方倉庫以及WMS系統(tǒng)、ERP系統(tǒng)等;調度層負責庫存調度與訂單發(fā)貨管理;銷售層包含多個服務終端,vivo官方商城、vivo門店、第三方電商分銷渠道等。其分層結構如圖所示:

      本文探討的vivo官方商城庫存架構設計,從整個vivo大電商庫存架構來看,vivo官方商城庫存系統(tǒng)涉及銷售層內部架構以及銷售層與調度層的交互。

      2.2 商城庫存系統(tǒng)架構演變

      早期商城的庫存冗余在各業(yè)務系統(tǒng)中,如可售庫存在商品系統(tǒng)、活動庫存在營銷系統(tǒng)等,庫存流轉也只有扣減與釋放,無法針對庫存進行整合與業(yè)務創(chuàng)新,存在諸多限制:

      不能進行精細化管理,庫存未分層,無法針對實物庫存、分倉策略、活動庫存進行精細化管理。

      沒有分倉策略,無法提前獲取商品收發(fā)地址,物流時效無法估算。

      無法針對地區(qū)、商品等進行發(fā)貨管控。

      實時性差,無法及時同步實物庫存以及分倉策略。

      性能弱,與其他系統(tǒng)耦合大,不能靈活擴展。

      基于上述限制與產品期望,21年庫存系統(tǒng)完成初版架構設計,此后系統(tǒng)不斷迭代完善,形成當前的系統(tǒng)架構:

      庫存系統(tǒng)提供兩個核心能力:交易能力和庫存管理。上層業(yè)務方可以調用提供的API完成庫存查詢、庫存扣減等操作;管理臺可以按成分倉策略、庫存同步等操作。

      三、系統(tǒng)業(yè)務架構

      3.1 庫存類型&分倉管理

      3.1.1 庫存類型結構

      庫存系統(tǒng)一共包含4類庫存:可售庫存、實物庫存、預占庫存、活動庫存。

      可售庫存:運營配置的普通商品庫存,商品維度到SKU。

      實物庫存:由倉儲系統(tǒng)同步到庫存系統(tǒng)的實物庫存,細化到具體倉庫。

      預占庫存:用戶下單完成庫存預占,倉儲系統(tǒng)發(fā)貨后釋放預占庫存,預占庫存可以監(jiān)控已下單未發(fā)貨庫存量。

      活動庫存:用于秒殺、搶購等各類營銷活動的商品庫存。

      基于不同類型庫存,可以構建一個簡單的庫存分層體系:

      3.1.2 分倉管理

      庫存中心還維護了倉庫信息、分倉策略、倉庫實物庫存信息等等:

      倉庫信息:倉庫基礎信息,包括倉庫地址、類型、編碼等。

      分倉策略:倉庫功能信息,倉庫可發(fā)貨區(qū)域、無實物庫存后的備選倉庫;訂單根據收貨地址對應優(yōu)先發(fā)貨的倉庫,爭取盡快發(fā)貨盡早到貨。

      倉庫庫存:倉庫實物庫存,由倉庫調度系統(tǒng)同步到商城庫存系統(tǒng)。

      3.2 商城庫存流轉方案

      商品庫存流轉涉及兩個主要操作:正向庫存扣減、逆向庫存回退,整套庫存變更流程如下:

      3.2.1 正向庫存扣減流程

      對于庫存扣減,目前常見有兩種庫存扣減方案:

      (1)下單時扣庫存。

      優(yōu)點是:實時扣庫存,避免付款時因庫存不足而阻斷影響用戶體驗。

      缺點是:庫存有限的情況下,惡意下單占庫存影響其他正常用戶下單。比如說有100臺手機,如果沒有限制下單數量,這100個庫存可能被一個用戶惡意占用,導致其他用戶無法購買。

      (2)支付時扣庫存。

      優(yōu)點是:不受惡意下單影響。

      缺點是:當支付訂單數大于實際庫存,會阻斷部分用戶支付,影響購物體驗。比如說只有100臺手機,但可能下了1000個訂單,但有900個訂單在支付時無法購買。

      從用戶體驗考慮,我們采用的是下單時扣庫存 + 回退這種方案。

      下單時扣減庫存,但只保留一段時間(比如15分鐘),保留時間段內未支付則釋放庫存,避免長時間占用庫存。

      3.2.2 逆向庫存回退流程

      庫存回退基于庫存變更日志逐個回退。

      庫存回退基本流程:訂單出庫前用戶申請退款,回退可售庫存、回退預占庫存、軟刪除扣減日志、增加回退日志;一旦商品出庫,用戶申請退貨走處理機流程,可售庫存和實物庫存均不回退。

      3.3 精細化發(fā)貨管控

      庫存系統(tǒng)還提供了一系列定制輔助功能:分倉策略、發(fā)貨限制、物流時效等等。

      (1)分倉策略

      為了給用戶更快的發(fā)貨,我們采用的是分倉策略,即由最近的倉庫(存在優(yōu)先級)給用戶發(fā)貨;同時存在備選倉庫,當所有倉庫無實物庫存時可走備選倉庫。

      3.3.1 發(fā)貨限制

      發(fā)貨限制分地區(qū)限制時間限制。

      地區(qū)限制:根據收貨地址批量設置部分區(qū)域無法發(fā)貨等規(guī)則,粒度到省市區(qū)維度。

      時間限制:倉庫的發(fā)貨時效管理,包括每天的發(fā)貨時段、大促發(fā)貨時段、以及特殊情況下的停發(fā)時段。

      3.3.2 物流時效預估

      根據用戶收貨地址,基于分倉策略確定發(fā)貨地址,再基于發(fā)貨時效確定發(fā)貨時間,提升用戶體驗。

      四、系統(tǒng)架構技術要點

      4.1 庫存扣減防重

      訂單重復提交會導致庫存重復扣減,比如用戶誤提交、系統(tǒng)超時重試等,針對此類問題有如下常見解決方案:

      訂單提交按鈕單擊置灰,避免重復提交。

      注:對于按鈕置灰這種方案,可以減少用戶誤觸重復提交的可能性,但不能從根本上解決庫存被重復扣減的問題,比如通過腳本來刷扣減庫存的接口,依舊造成庫存的重復扣減。

      保證庫存扣減接口的冪等性。

      注:保證接口冪等的方案有很多,比如每次扣減庫存時,帶上唯一的流水號,利用數據庫的唯一索引保證冪等等。

      采用令牌機制。用戶提交訂單會進行令牌校驗,校驗通過才能提交訂單。

      注:這種方案保證每次提交的訂單是唯一的,如果用戶多次下單,那么會產生多個訂單。

      本系統(tǒng)采用的是保證接口冪等性的方案。

      在庫存扣減接口入參中增加訂單序列號作為唯一標識,庫存扣減時增加一條扣減日志。當接口重復請求時,會優(yōu)先校驗是否已經存在扣減記錄,如果已存在則直接返回,避免重復扣減問題,具體流程如下:

      4.2 防超賣與高并發(fā)扣減方案

      4.2.1 常規(guī)渠道防超賣方案

      常規(guī)下單渠道流量小且對超賣風險厭惡度極高,常用的防超賣方案有:

      方案一:

      直接數據庫扣減。通過sql判斷剩余庫存是否大于等于待扣庫存,滿足則扣減庫存。該方案利用樂觀鎖原理即update的排他性確保事務性,避免超賣。

      偽代碼sql:

      sql:update store set store = store - #{deductStore } where (store-#{deductStore }) >= 0

      該方案的優(yōu)點是:

      實庫實扣,不會出現超賣;

      數據庫樂觀鎖保證并發(fā)扣減一致性;

      數據庫事務保證批量扣減正;貪L。

      該方案的缺點是:

      行級鎖的原因存在性能瓶頸,高并發(fā)會出現請求堵塞超時問題;

      直連數據庫,每次扣庫存都是寫操作,接口性能較低。

      方案二:

      利用分布式鎖,強制串行化扣減同一商品庫存。

      該方案的優(yōu)點是:

      減輕數據庫壓力,同時還能確保不會超賣。

      該方案的缺點是:

      每次只能有一個請求搶占鎖,不能應對高并發(fā)場景。

      對于常規(guī)渠道,庫存扣減是后置邏輯,流量不高,我們采用的是直接數據庫扣減,且針對弊端做了一些措施:

      前置校驗嚴格,同時針對刷單場景會有嚴格限流,保證最終扣減庫存的流量可控;

      庫存系統(tǒng)讀寫分離,減少數據庫的壓力。

      4.2.2 高并發(fā)庫存扣減方案

      針對高并發(fā)庫存扣減,比如秒殺,一般采用的是緩存扣減庫存的方式(redis+lua腳本實現單線程庫存更新)作為前置流程,代替數據庫直接更新。

      在redis中扣減庫存雖然性能高,可以大大減輕數據庫壓力,但需要保證緩存數據能完整、正確的入庫,以保證最終一致性。

      針對緩存數據更新至數據庫,目前主流方案有兩種:

      方案一:Redis數據直接異步更新至數據庫。

      優(yōu)點:簡單、沒有復雜的流程。

      缺陷:redis宕機或者故障,可能會造成緩存內庫存數據的丟失。

      方案二:Redis扣減庫存時,同步在業(yè)務數據中insert庫存信息。

      這里大家可能會有兩個疑問:

      有數據庫的插入操作,性能怎么保證?

      有數據庫的操作,又有redis的更新,事務性怎么保證?

      異步更新業(yè)務庫存在延遲,庫存逆向回退如何保證?

      對于疑問1:由于數據庫insert比update性能優(yōu),insert是在表的末尾直接插入,沒有尋址的過程,可以保證性能比較快。

      對于疑問2:方案2不同于緩存直接扣減,而是把緩存扣減放在數據庫insert的事務內,通過數據庫的事務保證整體的事務。

      insert的表被稱為庫存任務表,其中保存了庫存扣減的信息,庫存任務表結構可以設計的非常簡單,主鍵 + 庫存信息(json字符串)就可以了。

      后續(xù)通過異步任務,從庫存任務表表中查詢出庫存更新信息,將其同步到具體的庫存表中,實現最終一致性,這種方案可以避免數據的丟失。

      對于疑問3:庫存回退是根據業(yè)務庫中扣減記錄進行回退的,由于異步更新業(yè)務庫必定存在延遲(延遲極低,數秒以內),所以極端場景會存在走退款逆向流程時業(yè)務庫的庫存扣減記錄還未更新。

      針對這種情況庫存回退設置延遲重試機制,如果再極端點達到重試閾值依舊沒有扣減記錄,則返回回退成功,不做阻斷。

      目前我們針對秒殺庫存扣減,采用的是方案2。但畢竟涉及數據庫的更新,為了避免風險,在前置流量校驗上做了限制,保證流量的可控:

      4.2.3 庫存熱點問題

      什么是熱點問題?熱點問題就是因熱點商品導致的redis、數據庫等性能瓶頸。在庫存系統(tǒng)中,熱點問題主要存在:

      采用直接扣減庫存數據庫的方式,存在數據庫的行鎖問題。常規(guī)渠道的庫存扣減,我們采用的就是的就是這種方式。

      采用緩存扣減庫存的方式,大流量的情況下,熱點商品扣減庫存操作會打向redis單片,造成單片性能抖動,從而出現redis性能瓶頸。

      對于第1種熱點問題,在vivo商城常見的場景是:新發(fā)的爆品手機,在準點售賣時會有搶購效應,容易造成庫存數據庫單行的瓶頸問題。針對這種熱點問題,我們的解決方案是“分而治之”:

      對于潛在的熱點爆款手機,我們會將庫存平均分為多行(比如M行),扣減庫存時,隨機在M行中選取一行庫存數據進行扣減。該方案突破了數據庫單行鎖的瓶頸限制,解決了爆款商品的熱點問題。

      對于第2種redis單片熱點問題,解決方案也是分而治之。將數據庫中的庫存數據同步到redis時,把key值打散,分散在多個redis單片中。注:我們目前線上的流量峰值還達不到會造成redis單片瓶頸的問題,為避免過度設計,只做了前置限流,沒有進行key值的打散。

      4.3 庫存同步方案

      庫存系統(tǒng)存在一些庫存同步場景:

      對接倉儲系統(tǒng),完成實物庫存同步。

      兼容歷史架構,商品系統(tǒng)庫存的可售庫存同步等。

      (1)實物庫存同步:

      實物庫存同步,對接的是倉儲系統(tǒng),通過接口來獲取商品的實際庫存。實物庫存同步分成兩種:定時全量同步、指定單品更新。

      定時全量同步:每天定時全量拉取庫存調度平臺的實物庫存進行全量同步。

      制定單品:運營也可以手動觸發(fā)單個sku的商品即時同步實物庫存。

      (2)商品系統(tǒng)庫存同步:

      由于庫存系統(tǒng)多個場景涉及庫存變更,運營手動編輯、用戶下單退款導致庫存扣減回退,還有商品系統(tǒng)內編輯庫存數據也會導致庫存變更(以前庫存系統(tǒng)未獨立,庫存數據維護在商品系統(tǒng))。同時很多業(yè)務在查詢庫存時,參考的依舊是商品系統(tǒng)的庫存數據。

      這里有一個問題:庫存系統(tǒng)已經獨立出來,為什么還會依賴商品系統(tǒng)的庫存數據?

      這有兩點原因:

      商城多個業(yè)務的后臺有商品篩選的需要,商品篩選會有庫存數量的篩選項。商品數量很多,篩選是分頁的,如果將庫存數據全部替換成庫存系統(tǒng)的,那么存在跨系統(tǒng)分頁問題,分頁篩選會存在問題;

      歷史遺留問題,很多業(yè)務方依賴的是商品系統(tǒng)的庫存數據(包括依賴商品庫存離線表的業(yè)務方),全部切換到庫存系統(tǒng),成本和影響范圍大。

      因此,我們需要保證商品系統(tǒng)和庫存系統(tǒng)兩邊庫存數據的一致。

      庫存變更場景多,為了降低業(yè)務復雜度、采用簡單的方式實現庫存同步,我們利用了團隊自研的CDC系統(tǒng)(魯班平臺),整體流程如下:

      庫存數據庫發(fā)生變更后,魯班平臺通過binlog采集獲取庫存變更日志,再通過自定義規(guī)則篩選,然后發(fā)送mq變更消息,最后商品系統(tǒng)消費消息完成庫存同步變更。

      五、總結及展望

      最后對庫存系統(tǒng)進行一個總結:

      庫存系統(tǒng)完成服務拆分,在單一的可售庫存扣減功能基礎上拓展了很多功能,賦能業(yè)務的發(fā)展。

      完成庫存架構分層,抽象多個庫存類型,更靈活地滿足當前業(yè)務需求。

      針對庫存扣減防重、高并發(fā)場景下的庫存扣減、庫存熱點問題、庫存同步等技術問題,我們根據業(yè)務實際情況設計合理方案。

      展望

      目前vivo商城庫存系統(tǒng)平臺化能力不足,部分能力分散在其他系統(tǒng)中,未來我們希望能為vivo新零售提供一體化的庫存管理方案。

      文章內容僅供閱讀,不構成投資建議,請謹慎對待。投資者據此操作,風險自擔。

    即時

    TCL實業(yè)榮獲IFA2024多項大獎,展示全球科技創(chuàng)新力量

    近日,德國柏林國際電子消費品展覽會(IFA2024)隆重舉辦。憑借在核心技術、產品設計及應用方面的創(chuàng)新變革,全球領先的智能終端企業(yè)TCL實業(yè)成功斬獲兩項“IFA全球產品設計創(chuàng)新大獎”金獎,有力證明了其在全球市場的強大影響力。

    新聞

    敢闖技術無人區(qū) TCL實業(yè)斬獲多項AWE 2024艾普蘭獎

    近日,中國家電及消費電子博覽會(AWE 2024)隆重開幕。全球領先的智能終端企業(yè)TCL實業(yè)攜多款創(chuàng)新技術和新品亮相,以敢為精神勇闖技術無人區(qū),斬獲四項AWE 2024艾普蘭大獎。

    企業(yè)IT

    重慶創(chuàng)新公積金應用,“區(qū)塊鏈+政務服務”顯成效

    “以前都要去窗口辦,一套流程下來都要半個月了,現在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關材料,僅幾秒鐘,重慶市民曾某的賬戶就打進了21600元。

    3C消費

    “純臻4K 視界煥新”——愛普生4K 3LCD 激光工程投影

    2024年3月12日,由愛普生舉辦的主題為“純臻4K 視界煥新”新品發(fā)布會在上海盛大舉行。

    研究

    2024全球開發(fā)者先鋒大會即將開幕

    由世界人工智能大會組委會、上海市經信委、徐匯區(qū)政府、臨港新片區(qū)管委會共同指導,由上海市人工智能行業(yè)協(xié)會聯(lián)合上海人工智能實驗室、上海臨港經濟發(fā)展(集團)有限公司、開放原子開源基金會主辦的“2024全球開發(fā)者先鋒大會”,將于2024年3月23日至24日舉辦。