美菜網(wǎng)技術(shù)體系發(fā)展
美菜網(wǎng)作為一家B2B生鮮電商平臺(tái)創(chuàng)立于2014年,如今已服務(wù)于300萬(wàn)家商戶,遍布全國(guó)200多個(gè)城市。其發(fā)展不斷深耕供應(yīng)鏈、優(yōu)化服務(wù)、完成了獲客留存,為支持業(yè)務(wù)的持續(xù)迭代,其技術(shù)體系也在不斷的發(fā)展。
美菜網(wǎng)技術(shù)體系從2014年到現(xiàn)在逐漸摸索出一套涵蓋商城、供應(yīng)鏈、物流三大業(yè)務(wù)方向,支持了在線toB、toC的自營(yíng)模式和提供了三方的售賣、線上線下履約、配送的業(yè)務(wù)能力。
在2019年美菜網(wǎng)引入了中臺(tái)化策略,目的是消除各業(yè)務(wù)線重復(fù)建設(shè)電商基礎(chǔ)能力,提供統(tǒng)一的中臺(tái)服務(wù),包括用戶、貨主、商品、營(yíng)銷、交易、支付、搜索、推薦等能力,幫助業(yè)務(wù)快速迭代、優(yōu)化業(yè)務(wù)。

在技術(shù)支撐層,提供適合電商業(yè)務(wù)場(chǎng)景的各種基礎(chǔ)組件,如快速支持業(yè)務(wù)和中臺(tái)的分布式系統(tǒng)、消息傳遞系統(tǒng)、混合緩存系統(tǒng)、動(dòng)態(tài)擴(kuò)容系統(tǒng)、資源管控系統(tǒng)、自動(dòng)化監(jiān)控和部署系統(tǒng)等。
在2019年,為進(jìn)一步提供網(wǎng)站的數(shù)據(jù)和穩(wěn)定性,實(shí)現(xiàn)核心業(yè)務(wù)鏈路的雙活,通過(guò)數(shù)據(jù)備份提供了數(shù)據(jù)安全能力。
依托大數(shù)據(jù)能力不斷驅(qū)動(dòng)平臺(tái)發(fā)展,通過(guò)埋點(diǎn)接入、日志匯總、主動(dòng)采集等手段,建立了電商數(shù)據(jù)倉(cāng)庫(kù)。通過(guò)在線和離線數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí),構(gòu)建了全鏈路數(shù)字化體系、智能分析、決策輔助體系、智能策略和業(yè)務(wù)鏈路賦能。
早期階段
和傳統(tǒng)電商平臺(tái)不同,美菜業(yè)務(wù)涉及:用戶下單 -> 供應(yīng)商采購(gòu) -> 倉(cāng)庫(kù)分揀 -> 司機(jī)配送,鏈路較長(zhǎng),早期的架構(gòu)還是一體化架構(gòu),一套數(shù)據(jù)庫(kù)、一套代碼,牽一發(fā)動(dòng)全身,穩(wěn)定性差,擴(kuò)展能力低,交付周期長(zhǎng)。
服務(wù)化階段
之后系統(tǒng)進(jìn)行了服務(wù)化拆分,首先將商城、物流通過(guò)MQ解構(gòu)開(kāi),后續(xù)將其他系統(tǒng)服務(wù)化,所以服務(wù)做了分層處理,明確了系統(tǒng)邊界。
大促是考察一個(gè)系統(tǒng)穩(wěn)定性的試金石,單體系統(tǒng)時(shí)期是不敢做活動(dòng)的,經(jīng)過(guò)服務(wù)化拆分系統(tǒng)穩(wěn)定性大大提升。
每次大促前,商城、供應(yīng)鏈、倉(cāng)儲(chǔ)物流、支付財(cái)務(wù)全鏈路所有系統(tǒng)的研發(fā)需要自查、壓測(cè)、梳理可能存在的問(wèn)題環(huán)節(jié)。測(cè)試進(jìn)行全鏈路回歸測(cè)試,驗(yàn)證正確性。運(yùn)維人員線上擴(kuò)容,聯(lián)系服務(wù)商提前準(zhǔn)備CDN、寬帶資源等。經(jīng)過(guò)多次大促洗禮,美菜技術(shù)體系整體上完善和健全了,進(jìn)入了一個(gè)新階段。
技術(shù)基礎(chǔ)設(shè)施完善
技術(shù)基礎(chǔ)設(shè)施包括了MQ、配置中心、任務(wù)調(diào)度中心等基礎(chǔ)組件。主要看下MQ組件的迭代和發(fā)展。
美菜網(wǎng)歷史上是多套MQ共存的,大數(shù)據(jù)團(tuán)隊(duì)使用Kafka、線上業(yè)務(wù)使用NSQ和RocketMQ。
多集群共存的問(wèn)題:
維護(hù)成本和資源成本高:需要獨(dú)立部署一套,資源成本高;
易用性差:需要知道topic在哪套集群上,客戶端進(jìn)行接入;
可靠性低:NSQ是多通道之間復(fù)制,其本身是單副本,存在消息丟失風(fēng)險(xiǎn);
集群統(tǒng)一遷移方案:
綜合考慮希望以RocketMQ統(tǒng)一整體MQ方案,RocketMQ可以支持如消息延遲、順序消費(fèi)、事務(wù)消息、消息回溯等基本功能,基于多種刷盤和同步機(jī)制可以實(shí)現(xiàn)消息可靠性,公司主要技術(shù)棧為java,一脈相承。
遷移方式:
RocketMQ使用僅需要依賴一個(gè)jar,NSQ需要使用http協(xié)議。
Producer通過(guò)Http連接NSQ,對(duì)于生產(chǎn)者需要提供一個(gè)http網(wǎng)關(guān),用來(lái)接收業(yè)務(wù)生產(chǎn)的消息,轉(zhuǎn)發(fā)到RocketMQ。對(duì)于消費(fèi)者,實(shí)現(xiàn)一個(gè)transfer工具,將消息透?jìng)鞯絅SQ,這樣對(duì)消費(fèi)端是無(wú)感的,生產(chǎn)完成遷移后,消費(fèi)者可以逐步往RocketMQ上遷移了。

多語(yǔ)言支持:
消息生產(chǎn)提供http網(wǎng)關(guān)接入;消費(fèi)處理器,不斷從RocketMQ拉取消息,通過(guò)消費(fèi)網(wǎng)關(guān)的http方式發(fā)送到消費(fèi)端;基于topic做SLA維度的路由、流量調(diào)度等工作。

穩(wěn)定性:
1. 集群隔離:按照SLA隔離出業(yè)務(wù)集群、日志集群、計(jì)算集群。業(yè)務(wù)集群采用主從同步、同步落盤,計(jì)算集群采用主從異步、異步落盤;日志集群采用單主結(jié)構(gòu);

2. 完善故障預(yù)案:節(jié)點(diǎn)故障時(shí):可以快速下線,一鍵擴(kuò)容;主節(jié)點(diǎn)掛掉:從節(jié)點(diǎn)提升為主節(jié)點(diǎn),主節(jié)點(diǎn)改為只讀;
3. 完善監(jiān)控報(bào)警機(jī)制:生產(chǎn)延遲告警、TPS告警、TP99告警等多維度指標(biāo)數(shù)據(jù)告警;
同城雙活:
如果所有數(shù)據(jù)都在一個(gè)機(jī)房,一旦這個(gè)機(jī)房出現(xiàn)問(wèn)題,數(shù)據(jù)就有丟失風(fēng)險(xiǎn),不能實(shí)現(xiàn)數(shù)據(jù)的可靠性;單機(jī)房維度,資源容量有限,多機(jī)房可以分單流量。
實(shí)現(xiàn)雙機(jī)房容災(zāi)可以有兩種方案:
同城冷備:備用服務(wù)不對(duì)外提供功能,只有當(dāng)在線服務(wù)流量出現(xiàn)問(wèn)題時(shí)才切換流量到備用服務(wù),但當(dāng)出現(xiàn)問(wèn)題時(shí)一般不敢切流量。
同城雙活:平時(shí)就是雙機(jī)房對(duì)外提供功能,在出現(xiàn)問(wèn)題時(shí)切掉故障機(jī)房流量,實(shí)現(xiàn)真正的容災(zāi)目的。
有了雙活機(jī)房的目標(biāo)后,有如下幾點(diǎn)訴求:
機(jī)房就近,生產(chǎn)者在a機(jī)房的話,生成后的數(shù)據(jù)最好也在a機(jī)房的broker里面;消費(fèi)者在b機(jī)房的話,消費(fèi)者的消息最好也在b機(jī)房的broker里面;
平滑遷移,支持按topic粒度的逐步平滑遷移能力;
故障發(fā)生時(shí),可以快速切換;
關(guān)鍵設(shè)計(jì):
就近識(shí)別算法:
IP段識(shí)別方式:不同IP段表示不同機(jī)房,這個(gè)方案對(duì)公司網(wǎng)絡(luò)要求高,公司網(wǎng)絡(luò)調(diào)整時(shí),也需要修改算法、升級(jí)客戶端;
協(xié)議層增加機(jī)房標(biāo)識(shí):在生產(chǎn)和消費(fèi)的client通信的時(shí)候都添加所在機(jī)房標(biāo)識(shí),改造成本高;
broker名稱增加機(jī)房標(biāo)識(shí):客戶端clientID增加機(jī)房標(biāo)識(shí),改造成本低,對(duì)MQ核心功能無(wú)入侵;
數(shù)據(jù)復(fù)制:
實(shí)現(xiàn)主-從-從結(jié)構(gòu),基于slave異步復(fù)制,減輕master節(jié)點(diǎn)的壓力;
故障預(yù)案:
機(jī)房或鏈路出現(xiàn)問(wèn)題時(shí),需要關(guān)閉一層機(jī)房的寫權(quán)限;機(jī)房接入層故障,無(wú)影響;
后續(xù)需要提升的包括,無(wú)人值守的運(yùn)維能力;按SLA進(jìn)行自動(dòng)topic路由調(diào)整能力等;

數(shù)據(jù)驅(qū)動(dòng)
新階段主要推進(jìn)了中臺(tái)建設(shè)和數(shù)據(jù)驅(qū)動(dòng)。
基于區(qū)塊鏈技術(shù)實(shí)現(xiàn)了業(yè)務(wù)全鏈路數(shù)字化,美菜積累了大量餐廳食材需求、生鮮供應(yīng)鏈數(shù)據(jù)、農(nóng)產(chǎn)供給采購(gòu)需求數(shù)據(jù)等,成為了美菜最優(yōu)價(jià)值的數(shù)字資產(chǎn)。

在業(yè)務(wù)全鏈路數(shù)字化基礎(chǔ)上,美菜大數(shù)據(jù)實(shí)現(xiàn)了全鏈路智能分析與決策輔助。比如銷售智能助手、智能營(yíng)銷系統(tǒng)、采購(gòu)智能輔助、區(qū)縣指揮等輔助系統(tǒng),大幅提高了業(yè)務(wù)鏈路各環(huán)節(jié)的運(yùn)營(yíng)效率,支持了業(yè)務(wù)快速增長(zhǎng)。
同時(shí)業(yè)務(wù)鏈路各環(huán)節(jié)策略建模與自動(dòng)化,開(kāi)始賦能業(yè)務(wù)。餐廳商品需求模型、商品銷量預(yù)測(cè)、商品區(qū)域價(jià)格彈性、市場(chǎng)供需指數(shù)、供應(yīng)商評(píng)級(jí)畫像等基礎(chǔ)決策在業(yè)務(wù)上開(kāi)始賦能。
總結(jié)來(lái)說(shuō),美菜網(wǎng)經(jīng)歷了3個(gè)主要階段。
公司初創(chuàng)、業(yè)務(wù)規(guī)模小。這個(gè)階段的主要目標(biāo)是讓業(yè)務(wù)運(yùn)行起來(lái),系統(tǒng)相對(duì)簡(jiǎn)單,依托業(yè)務(wù)現(xiàn)狀,開(kāi)發(fā)了一些工具;
搭建完整技術(shù)體系。建立完整業(yè)務(wù)閉環(huán),包括營(yíng)銷、商品采購(gòu)、供應(yīng)鏈、物流配送等業(yè)務(wù)及系統(tǒng)能力;
中臺(tái)化及數(shù)據(jù)驅(qū)動(dòng)階段。為降低個(gè)業(yè)務(wù)線重復(fù)建設(shè),提高效率,驅(qū)動(dòng)整個(gè)體系中臺(tái)化,同時(shí)做了新技術(shù)的引入;
賦能合作伙伴
通過(guò)數(shù)據(jù)驅(qū)動(dòng),為供應(yīng)商提供了“天眼”功能。通過(guò)天眼可以實(shí)時(shí)看到供應(yīng)商每天的銷售額、采購(gòu)數(shù)量、銷售數(shù)量、庫(kù)存數(shù)量、用戶復(fù)購(gòu)率等情況,識(shí)別整個(gè)環(huán)節(jié)中哪些可能存在問(wèn)題。
同時(shí)可以把履約的客戶反饋情況及服務(wù)診斷情況進(jìn)行反饋,每個(gè)合作伙伴可以看到客戶的滿意情況,退貨、投訴、缺貨等信息,幫助供應(yīng)商自我改進(jìn)。
天眼可以與美菜供應(yīng)鏈預(yù)測(cè)協(xié)同,讓供應(yīng)商可以提前洞察可能的用戶需求,提前指定、調(diào)整采購(gòu)計(jì)劃,打造智慧供應(yīng)鏈。
