有赞的交易系统架构困局以及破局之道
在開(kāi)始下面的話(huà)題之前,我們先看一看有贊原有的核心交易架構(gòu)。
初步看去,這套架構(gòu)方案似乎看不出什么問(wèn)題。事實(shí)情況也這樣,我們做這套交易方案支持了日百萬(wàn)級(jí)的交易規(guī)模,取得了很不錯(cuò)的成果。
在2016年,公司經(jīng)歷了飛速的成長(zhǎng), 整體團(tuán)隊(duì)人員擴(kuò)張了數(shù)倍, 公司整體業(yè)務(wù)線(xiàn)從單一的微商城電商交易型態(tài)擴(kuò)張到支持多個(gè)垂直行業(yè)。交易團(tuán)隊(duì)也碰到了很多尷尬的情況:
垂直行業(yè)接入交易很困難,交易團(tuán)隊(duì)對(duì)于業(yè)務(wù)團(tuán)隊(duì)的支撐響應(yīng)速度趕不上業(yè)務(wù)的迭代速度,最后垂直行業(yè)被迫自己完全重做了一套針對(duì)垂直業(yè)務(wù)的交易系統(tǒng)。比如:商業(yè)化服務(wù)訂購(gòu),收營(yíng),批發(fā)等業(yè)務(wù)。浪費(fèi)了公司寶貴的技術(shù)資源。
交易團(tuán)隊(duì)的新同學(xué),上手交易核心的開(kāi)發(fā)非常困難,在沒(méi)有完合弄懂整套系統(tǒng)之間,不敢放手讓新同學(xué)開(kāi)發(fā)。學(xué)習(xí)成本極高。
很多的玩法不能進(jìn)行組合,如果想進(jìn)行組合,必須要求進(jìn)行重新編碼,把組合的方案當(dāng)做一個(gè)新方案來(lái)做。比如:虛擬商品的拼團(tuán)業(yè)務(wù), 酒店的分銷(xiāo)業(yè)務(wù),等等, 都不能用很簡(jiǎn)單的方案做支持。 產(chǎn)品運(yùn)營(yíng)同學(xué)的創(chuàng)造性想法,得不到很快的支持。
上線(xiàn)了一個(gè)小需求,導(dǎo)致的主流的核心交易大面積出現(xiàn)故障。影響范圍不能進(jìn)行隔離。
我們的困難根源
在此之前,我們先看一看公司對(duì)于交易團(tuán)隊(duì)的要求,以及業(yè)務(wù)團(tuán)隊(duì)對(duì)于交易能力的訴求。
從上圖中,可以看到,從業(yè)務(wù)團(tuán)隊(duì)的視角上來(lái)看,交易能力,其實(shí)是一種云化能力。不管是什么樣的業(yè)務(wù)場(chǎng)景,只要交易場(chǎng)景存在,那么交易能力就應(yīng)該能覆蓋。換句話(huà)說(shuō),交易團(tuán)隊(duì)存在的價(jià)值,就是”能夠很快速地支持所有業(yè)務(wù)的交易“。
這個(gè)時(shí)候稍微清晰了一點(diǎn)當(dāng)前的困難的原因:原來(lái)的我們,一直是在做微商城的業(yè)務(wù),認(rèn)為”微商城的業(yè)務(wù)規(guī)則=交易的能力“。這個(gè)定位與垂直業(yè)務(wù)的期望很不匹配。
既然”微商城的交易規(guī)則“不等于”交易能力“,那么交易能力是什么? 有什么內(nèi)容?與垂直業(yè)務(wù)又有什么關(guān)系?
這三個(gè)是很有意思的問(wèn)題。 在弄明白這三個(gè)問(wèn)題之前,我們先把我們從一個(gè)互聯(lián)網(wǎng)從業(yè)者的角色,轉(zhuǎn)變成一個(gè)普通的人。假設(shè)我們要去做三件事情,我們看一看現(xiàn)實(shí)生活的交易細(xì)節(jié):
我要去路邊攤買(mǎi)一斤瓜子。
“老板,多少錢(qián)一斤瓜子” 。“12元一斤奶油的” 。“給我稱(chēng)一斤”。 然后老板給我稱(chēng)了一斤,我付錢(qián), 拿瓜子,走人。
我要去樓下吃一碗面。
“老板,熱干面多少錢(qián)一碗” 。“15元一碗”。“給我來(lái)一碗” 。然后我坐下, 吃完面,付錢(qián), 走人。
我要去售樓處,買(mǎi)一套期房。
這個(gè)場(chǎng)景就更復(fù)雜了,我需要先看房周邊的環(huán)境,看價(jià)格,然后弄清楚開(kāi)發(fā)商的承諾, 然后,找售樓小姐聊價(jià)格,拿合同,簽字, 付現(xiàn)金首付,然后找銀行貸款付完余下的錢(qián)。 待房子開(kāi)發(fā)完之后,再找開(kāi)發(fā)商確認(rèn)收房。最后整個(gè)交易才算完畢。(PS:如果房子跟原來(lái)說(shuō)的面積不一致,還需要補(bǔ)款。如果差距太大,還要房鬧退款等)。
上面例子,都很平常。但是平常的事情,蘊(yùn)含著幾千年的交易規(guī)律。我們仔細(xì)品味一下上面的細(xì)節(jié),發(fā)現(xiàn)從大到小的交易,有幾個(gè)共同的點(diǎn):
交易必須有買(mǎi)賣(mài)雙方。
在初期,買(mǎi)賣(mài)雙方必須達(dá)成一致(如何付錢(qián),如何交貨)。達(dá)不成一致,就不存在交易。(契約)
達(dá)到一致之后,買(mǎi)方付錢(qián),賣(mài)家交貨。PS:可能是先交貨,再付錢(qián)。也可能是多次付錢(qián)。也可能是多次交貨。
只有買(mǎi)賣(mài)雙方達(dá)不成一致,才存在交易退款維權(quán)的情況,包括售后服務(wù)。
從理論上來(lái)說(shuō), 線(xiàn)上系統(tǒng)處理的也是真實(shí)世界的問(wèn)題, 只是手段略有不同。我們?cè)倩仡櫼幌伦约浩匠E龅竭^(guò)的交易場(chǎng)景,都逃不出這個(gè)范疇。 我們完全有理由把這個(gè)結(jié)論當(dāng)成線(xiàn)上交易系統(tǒng)的指導(dǎo)思想。我們對(duì)于交易系統(tǒng)的抽象理解就是: 交易的本質(zhì)是:買(mǎi)賣(mài)雙方就付款細(xì)節(jié)/交貨細(xì)節(jié)/商品質(zhì)量細(xì)節(jié)/賠償細(xì)節(jié),先簽定一個(gè)契約。而后雙方履行契約的全過(guò)程。訂單僅僅表示雙方履約的過(guò)程和憑證。
我們看一下新交易的最骨干的模型。
破局之道
搞明白了我們的核心問(wèn)題, 那么很多事情就迎刃而解了。
快速接入問(wèn)題:如果我們的交易核心是穩(wěn)定的,不是給某個(gè)業(yè)務(wù)定制的,那么只要是契約精神可以解決的問(wèn)題,就應(yīng)該是交易系統(tǒng)能解決的問(wèn)題。業(yè)務(wù)系統(tǒng)只需要做一些適配,就可以無(wú)縫接入。接入速度會(huì)極大提升。
搞定小需求,影響主流交易的問(wèn)題:這個(gè)是原系統(tǒng)在代碼組織層面,只要做好隔離,就可以解決的。
新人學(xué)習(xí)成本高的問(wèn)題: 同理,交易的核心是穩(wěn)定的,不需要關(guān)心太多的業(yè)務(wù)上的問(wèn)題,理解成本就會(huì)極大的降低。新人接手速度會(huì)提升。
玩法不能組合的問(wèn)題:這個(gè)問(wèn)題同樣是原設(shè)計(jì)上的一些缺陷,沒(méi)有區(qū)分橫向業(yè)務(wù),跟垂直交易。PS:這個(gè)會(huì)在后面闡述。
要根治交易系統(tǒng)當(dāng)前碰到的困局,除了重構(gòu)之外,沒(méi)有別的捷徑可走。
架構(gòu)演進(jìn)
在進(jìn)行本章節(jié)的講解之前,我們?cè)倩仡櫼幌?#xff0c;上面講的三個(gè)生活中的交易場(chǎng)景,我們繼續(xù)仔細(xì)品味一下,三個(gè)交易場(chǎng)景的細(xì)節(jié)點(diǎn),突然有了一個(gè)驚人的發(fā)現(xiàn):
如何付錢(qián)是標(biāo)準(zhǔn)化程度很高。在日常生活中,付現(xiàn)金/刷卡/三方支付, 可以覆蓋大部分的場(chǎng)景。
跟賣(mài)家商量,簽定契約的過(guò)程,標(biāo)準(zhǔn)化程度稍低點(diǎn)。但是,似乎一個(gè)行業(yè)一個(gè)標(biāo)準(zhǔn)。但是都沒(méi)有逃出,“如何付錢(qián),如何交貨,售后保障約束,以及如何違約賠付”的范疇。
如何交貨,是標(biāo)準(zhǔn)化程度是最低的。每個(gè)場(chǎng)景似乎都不一樣。就算是同樣行業(yè)的不同的店也可能略有不同。PS:比如一頓飯,可以上門(mén)吃然后飯館準(zhǔn)備餐具,也可以是送貨上門(mén)自己吃。
整條交易的流程,是最不可控的,每個(gè)階段的過(guò)程,可能是亂序的。PS:比如去餐館吃飯,可能先付錢(qián)再吃飯,也可能是先吃飯?jiān)俑跺X(qián)。
弄明白這些特性,直接決定了,我們跟垂直行業(yè)的關(guān)系。即:什么東西應(yīng)該交給垂直行業(yè),什么東西,交易系統(tǒng)應(yīng)該搞定。
以下的新交易的架構(gòu)大圖:
在上圖中,明顯出現(xiàn)了幾個(gè)原來(lái)沒(méi)有出現(xiàn)過(guò)的一些名詞。我們做一下解釋:
buy: 業(yè)務(wù)的buy,由垂直業(yè)務(wù)掌控,它不一定是一個(gè)獨(dú)立系統(tǒng), 它的核心使命是包裝交易平臺(tái)提供的各種能力,根據(jù)垂直業(yè)務(wù)規(guī)則,做定制。例如,美業(yè)的理發(fā)業(yè)務(wù)調(diào)用下單接口的時(shí)候,可能要做預(yù)約時(shí)間的選擇,buy系統(tǒng)需要做一下這方面的校驗(yàn)與參數(shù)拼裝。另外,垂直業(yè)務(wù)的交易確認(rèn)頁(yè)面,也是有不同的顯示規(guī)則,這個(gè)需要buy系統(tǒng)做支持。
流程編排引擎:這個(gè)是整個(gè)新交易的核心思想。業(yè)務(wù)規(guī)則是通過(guò)配置化形成的。流程配置化的最小顆粒度是組件。引擎把所有的組件形成一個(gè)串,執(zhí)行業(yè)務(wù)規(guī)則。流程編排引擎的配置規(guī)則,是DB中的數(shù)據(jù),可以隨時(shí)添加數(shù)據(jù)。 所以這個(gè)引擎的設(shè)計(jì),對(duì)于快速支持新的業(yè)務(wù)形態(tài),起了至關(guān)重要的作用。
交貨/退貨路由引擎:對(duì)于交易系統(tǒng)來(lái)說(shuō),所有的交貨/退貨過(guò)程,都可以看成黑盒子。只要知道路由引擎會(huì)把相應(yīng)的交貨過(guò)程做掉就可以的。原因是:我們認(rèn)為交貨是一個(gè)不可歸納的行為。交貨的細(xì)節(jié),是需要交還給垂直業(yè)務(wù)自己去做的。
組件:對(duì)于流程中所有元素來(lái)說(shuō), 所有的東西都是組件,都可以納入到流程編排的范圍之內(nèi)。如:扣庫(kù)存組件,校驗(yàn)用戶(hù)合法性組件,校驗(yàn)地址可達(dá)性組件,進(jìn)入支付組件等等。
對(duì)于上面的解釋,可能還有三個(gè)問(wèn)題核心未回答:
1. 既然是通過(guò)流程編排來(lái)配置出一個(gè)業(yè)務(wù)流程,那么,如何定位到一個(gè)業(yè)務(wù)?
行業(yè)維度(酒店預(yù)訂,普通實(shí)物交易,外賣(mài),虛擬交易,批發(fā),美業(yè)等)
商品類(lèi)型維度(酒店商品,普通實(shí)物商品,會(huì)員卡商品,二維碼核銷(xiāo)商品等等)
營(yíng)銷(xiāo)維度(積分商城,拼團(tuán),秒殺,老拼團(tuán),普通營(yíng)銷(xiāo)/無(wú)營(yíng)銷(xiāo),等)
交貨方式維度(上門(mén)自提,快遞,同城送,二維碼核銷(xiāo),酒店入住,會(huì)員卡授權(quán)等)
付款方式維度(線(xiàn)上付,代付,貨到付款,線(xiàn)下收銀等)
2. 交易的核心流程階段與主模型數(shù)據(jù)模擬是怎么樣的?
橫向業(yè)務(wù)與垂直業(yè)務(wù)
垂直業(yè)務(wù):垂直業(yè)務(wù)就是我們要支持的業(yè)務(wù)場(chǎng)景,如“微商城的普通商品拼團(tuán)的業(yè)務(wù)”。
橫向業(yè)務(wù):各種橫向業(yè)務(wù)通過(guò)一定規(guī)則相互拼裝,可以形成垂直業(yè)務(wù)。在新交易里,橫向業(yè)務(wù)被包裝成一個(gè)一個(gè)的組件,可以通過(guò)流程編排的形式串成垂直業(yè)務(wù)。如:拼團(tuán)組件。
實(shí)施路徑
交易是非常核心的系統(tǒng),新交易系統(tǒng)的上線(xiàn)流程,無(wú)異于飛行中換發(fā)動(dòng)機(jī),難度可想而知。我們把實(shí)施路徑定為以下幾個(gè)階段:
1. 正向交易優(yōu)先啟動(dòng)重構(gòu),用新的模型做業(yè)務(wù)支持。
正向交易實(shí)行雙寫(xiě)策略,即新模型寫(xiě)一份,再同步寫(xiě)到老模型數(shù)據(jù)一份。為了不影響外圍系統(tǒng)。
上線(xiàn)時(shí),優(yōu)先灰度內(nèi)部商戶(hù),而后小商戶(hù),最后大商戶(hù)的原則。
上線(xiàn)后,通知外圍業(yè)務(wù),做消息機(jī)制的改造。
優(yōu)先支持新業(yè)務(wù),然后灰度老業(yè)務(wù)的原則。
2. 訂單管理啟動(dòng)重構(gòu),在正向交易做完全量切流程之后,再做灰度上線(xiàn)。
訂單管理的同步策略,不再依賴(lài)DB做數(shù)據(jù)的導(dǎo)出/查詢(xún)業(yè)務(wù)的存儲(chǔ)介質(zhì)。采用寬表的一些介質(zhì),做到dump可配置化,導(dǎo)出可配置化。通過(guò)這樣的方式,一次性丟棄老的數(shù)據(jù)模型,同時(shí)獲到業(yè)務(wù)配置化能力。如ES、HBase。
3. 逆向交易啟動(dòng)重構(gòu), 在正向交易做完全量切流程之后,再做灰度上線(xiàn)。遵循逆向交易流程配置化的原則。
4. 等到逆向交易與訂單管理做完全量分流之后, 再停用雙寫(xiě)策略(原有的老模型自然全量失效)。
總結(jié)
以上是生活随笔為你收集整理的有赞的交易系统架构困局以及破局之道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 发“加油,特种兵”有啥讲究不?
- 下一篇: PHP判断变量内容是什么编码(gbk?u