vivo?全球商城:商品系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐
作者:vivo官網(wǎng)商城開發(fā)團(tuán)隊(duì)-Ju Changjiang
一、前言
隨著用戶量級(jí)的快速增長(zhǎng),vivo官方商城v1.0的單體架構(gòu)逐漸暴露出弊端:模塊愈發(fā)臃腫、開發(fā)效率低下、性能出現(xiàn)瓶頸、系統(tǒng)維護(hù)困難。
從2017年開始啟動(dòng)的v2.0架構(gòu)升級(jí),基于業(yè)務(wù)模塊進(jìn)行垂直的系統(tǒng)物理拆分,拆分出來業(yè)務(wù)線各司其職,提供服務(wù)化的能力,共同支撐主站業(yè)務(wù)。
商品模塊是整個(gè)鏈路的核心,模塊的增多嚴(yán)重影響系統(tǒng)的性能,服務(wù)化改造勢(shì)在必行。
本文將介紹vivo商城商品系統(tǒng)建設(shè)的過程中遇到的問題和解決方案,分享架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)。
二、商品系統(tǒng)演進(jìn)
將商品模塊從商城拆分出來,獨(dú)立為商品系統(tǒng),逐漸向底層發(fā)展,為商城,搜索,會(huì)員、營(yíng)銷等提供基礎(chǔ)標(biāo)準(zhǔn)化服務(wù)。
商品系統(tǒng)架構(gòu)圖如下:

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