vivo?全球商城:商品系統(tǒng)架構(gòu)設(shè)計與實踐
作者:vivo官網(wǎng)商城開發(fā)團隊-Ju Changjiang
一、前言
隨著用戶量級的快速增長,vivo官方商城v1.0的單體架構(gòu)逐漸暴露出弊端:模塊愈發(fā)臃腫、開發(fā)效率低下、性能出現(xiàn)瓶頸、系統(tǒng)維護困難。
從2017年開始啟動的v2.0架構(gòu)升級,基于業(yè)務(wù)模塊進行垂直的系統(tǒng)物理拆分,拆分出來業(yè)務(wù)線各司其職,提供服務(wù)化的能力,共同支撐主站業(yè)務(wù)。
商品模塊是整個鏈路的核心,模塊的增多嚴(yán)重影響系統(tǒng)的性能,服務(wù)化改造勢在必行。
本文將介紹vivo商城商品系統(tǒng)建設(shè)的過程中遇到的問題和解決方案,分享架構(gòu)設(shè)計經(jīng)驗。
二、商品系統(tǒng)演進
將商品模塊從商城拆分出來,獨立為商品系統(tǒng),逐漸向底層發(fā)展,為商城,搜索,會員、營銷等提供基礎(chǔ)標(biāo)準(zhǔn)化服務(wù)。
商品系統(tǒng)架構(gòu)圖如下:
前期商品系統(tǒng)比較雜亂,包含業(yè)務(wù)模塊比較多,如商品活動業(yè)務(wù)、秒殺業(yè)務(wù),庫存管理,隨著業(yè)務(wù)的不斷發(fā)展,商品系統(tǒng)承載更多的業(yè)務(wù)不利于系統(tǒng)擴展和維護。
故思考逐漸將商品業(yè)務(wù)逐漸下沉并作為最底層、最基礎(chǔ)的業(yè)務(wù)系統(tǒng),并為眾多調(diào)用方提供高性能的服務(wù),下面介紹商品系統(tǒng)的升級歷史。
2.1 商品活動、贈品剝離
隨著商品活動的不斷增多,玩法多樣,同時與活動相關(guān)的額外屬性也相應(yīng)增加,這些都并不是與商品信息強關(guān)聯(lián),更偏向于用戶營銷,不應(yīng)該與核心商品業(yè)務(wù)耦合在一起,故將其合并入商城促銷系統(tǒng)。
贈品不僅僅是手機、配件,有可能會是積分、會員等,這些放在商品系統(tǒng)都不合適,也不屬于商品模塊的內(nèi)容,故同步將其合并入商城促銷系統(tǒng)。
2.2?秒殺獨立
眾所周知,秒殺活動的特點是:
- 限時:時間范圍很短,超過設(shè)置的時間就結(jié)束了
- 限量:商品數(shù)量很少,遠(yuǎn)低于實際庫存
- 訪問量大:價格低,可以吸引非常多的用戶
基于以上特性,做好一個秒殺活動不是一蹴而就,由于系統(tǒng)資源共享,當(dāng)突發(fā)的大流量沖擊會造成商品系統(tǒng)其他業(yè)務(wù)拒絕服務(wù),會對核心的交易鏈路造成阻塞的風(fēng)險,故將其獨立為單獨的秒殺系統(tǒng),單獨對外提供服務(wù)。
2.3?代銷系統(tǒng)成立
我們商城的主要銷售品類還是手機以及手機配件等,商品的品類比較少,為了解決非手機商品品類不豐富的問題,運營考慮與知名電商進行合作,期望引入更多的商品品類。
為了方便后續(xù)擴展,以及對原有系統(tǒng)的不侵入性,我們經(jīng)過考慮專門獨立出一個子系統(tǒng),用于承接代銷業(yè)務(wù),最后期望做成一個完備平臺,后續(xù)通過提供開放API的方式讓其他電商主動接入我們業(yè)務(wù)。
2.4?庫存剝離
庫存管理的痛點:
- 由于我們的庫存都是到商品維度,僅僅一個字段標(biāo)識數(shù)量,每次編輯商品都需要為商品調(diào)整庫存,無法動態(tài)實現(xiàn)庫存管理;
- 同時營銷系統(tǒng)也有自己活動庫存管理機制,入口分散,關(guān)聯(lián)性較弱;
- 可售庫存和活動庫存管理的依據(jù)都是實際庫存,造成容易配置錯誤。
基于以上痛點,同時為了更方便運營管理庫存,也為未來使用實際庫存進行銷售打下基礎(chǔ),我們成立庫存中心,并提供以下主要功能:
- 與ecms實際庫存進行實時同步;
- 可以根據(jù)實際庫存的倉庫分布情況,計算商品的預(yù)計發(fā)貨倉庫和發(fā)貨時間,從而計算商品預(yù)計送達(dá)時間;
- 完成低庫存預(yù)警,可以根據(jù)可用庫存、平均月銷等進行計算,動態(tài)提醒運營訂貨。
三、挑戰(zhàn)
作為最底層的系統(tǒng),最主要的挑戰(zhàn)就是具備穩(wěn)定性,高性能,數(shù)據(jù)一致性的能力。
3.1?穩(wěn)定性
- 避免單機瓶頸:根據(jù)壓測選擇合適的節(jié)點數(shù)量,不浪費,同時也能保證溝通,可以應(yīng)對突發(fā)流量。
- 業(yè)務(wù)限流降級:對核心接口進行限流,優(yōu)先保證系統(tǒng)可用,當(dāng)流量對系統(tǒng)壓力過大時將非核心業(yè)務(wù)進行降級,優(yōu)先保證核心業(yè)務(wù)。
- 設(shè)置合理的超時時間:對Redis、數(shù)據(jù)庫的訪問設(shè)置合理超時時間,不宜過長,避免流量較大時導(dǎo)致應(yīng)用線程被占滿。
- 監(jiān)控