多業(yè)務(wù)模式下的交易鏈路探索與實(shí)踐
一、背景
二、交易中臺(tái)面臨的問(wèn)題
三、交易鏈路實(shí)踐與探索
3.1、交易鏈路實(shí)踐之FSM有限狀態(tài)機(jī)
3.2、交易鏈路實(shí)踐之基于future的分階段并發(fā)模型
3.3、交易鏈路探索之基于事件驅(qū)動(dòng)并發(fā)模型
四、總結(jié)
一、背景
??轉(zhuǎn)轉(zhuǎn)作為國(guó)內(nèi)頭部的二手閑置交易平臺(tái),從2015年成立至今,業(yè)務(wù)模式由C2C拓展至B2C、C2B、B2B、C2B2C等多模式并存的新格局,品類覆蓋手機(jī)3C、圖書、游戲、奢侈品等三十余大類。
??轉(zhuǎn)轉(zhuǎn)目前采用的是中臺(tái)業(yè)務(wù)架構(gòu)模式,中臺(tái)(全文默認(rèn)指交易中臺(tái))負(fù)責(zé)提供通用,穩(wěn)定的交易能力,靈活快速響應(yīng)前臺(tái)業(yè)務(wù)需求;業(yè)務(wù)負(fù)責(zé)前臺(tái)探索持續(xù)創(chuàng)新,為用戶提供有價(jià)值的服務(wù)。
二、交易中臺(tái)面臨的問(wèn)題
??交易中臺(tái)訂單系統(tǒng)承載了全公司各業(yè)務(wù)的通用訂單流轉(zhuǎn)能力,但是各業(yè)務(wù)模式的交易鏈路復(fù)雜多樣、同中有異,例如下圖:

1、不同業(yè)務(wù)模式交易鏈路主節(jié)點(diǎn)有差異,且鎖庫(kù)存、發(fā)貨、結(jié)算等節(jié)點(diǎn)也有差異 2、需要同時(shí)支持多種業(yè)務(wù)模型共存,且互不影響 3、交易鏈路可拓展,節(jié)點(diǎn)可復(fù)用,維護(hù)成本低,響應(yīng)速度快,滿足業(yè)務(wù)日常快速迭代 4、鏈路穩(wěn)定,數(shù)據(jù)準(zhǔn)確,流程可視化,能快速定位問(wèn)題
顯然傳統(tǒng)硬編碼的方式已無(wú)法滿足需求,F(xiàn)SM有限狀態(tài)機(jī)呼之欲出。
三、交易鏈路實(shí)踐與探索
3.1、交易鏈路實(shí)踐之FSM有限狀態(tài)機(jī)
FSM有限狀態(tài)機(jī)是什么?
??FSM有限狀態(tài)機(jī)(Finite-state machine, FSM), 簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)計(jì)算模型,常用來(lái)描述對(duì)象在它的生命周期內(nèi)所經(jīng)歷的狀態(tài)序列,以及如何響應(yīng)外界的各種事件等。轉(zhuǎn)轉(zhuǎn)交易中臺(tái)根據(jù)其原理,結(jié)合業(yè)務(wù)場(chǎng)景提供了一個(gè)通用狀態(tài)流轉(zhuǎn)方案,用于在有限個(gè)訂單交易狀態(tài)之間的狀態(tài)遷移變化。
FSM方案能做什么?
??FSM可快速搭建任何有流轉(zhuǎn)的單據(jù)鏈路,同時(shí)解決鏈路相關(guān)的離線任務(wù)、事務(wù)消息等問(wèn)題。
FSM的四要素
??FSM將交易鏈路的狀態(tài)流轉(zhuǎn)進(jìn)行了抽象和結(jié)構(gòu)化,主要分為4個(gè)要素,即當(dāng)前狀態(tài)(現(xiàn)態(tài))、事件、動(dòng)作、目標(biāo)狀態(tài)(次態(tài))。其中“現(xiàn)態(tài)”和“事件”是因,“動(dòng)作”和“次態(tài)”是果,如下圖所示:

現(xiàn)態(tài):指當(dāng)前所處的狀態(tài)。 事件:又稱為“條件”。當(dāng)一個(gè)事件發(fā)生,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。 動(dòng)作:條件滿足后執(zhí)行的動(dòng)作。動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動(dòng)作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新?tīng)顟B(tài)。 次態(tài):條件滿足后要遷往的新?tīng)顟B(tài)。
FSM實(shí)踐改造
??在轉(zhuǎn)轉(zhuǎn)交易中臺(tái)訂單系統(tǒng),抽象了符合交易場(chǎng)景的狀態(tài)角色:
狀態(tài)關(guān)系:初始狀態(tài)、目標(biāo)狀態(tài)
角色:不同角色有不同的操作權(quán)限,比如賣家、買家、系統(tǒng)、客服
操作:對(duì)應(yīng)事件Event
handler:對(duì)應(yīng)動(dòng)作Action實(shí)現(xiàn)

FSM可視化交易鏈路
??運(yùn)營(yíng)后臺(tái)可查看指定交易鏈路FSM狀態(tài)機(jī)的狀態(tài)流轉(zhuǎn)全景圖,如下圖:
FSM解決了交易主鏈路節(jié)點(diǎn)的流轉(zhuǎn)問(wèn)題,但是針對(duì)無(wú)狀態(tài)的單節(jié)點(diǎn)子鏈路不適用,例如下單節(jié)點(diǎn),包含商品、用戶、地址、庫(kù)存、促銷、埋點(diǎn)等多維信息的校驗(yàn)與整合。那么如何在保障下單鏈路的拓展性、復(fù)用性、穩(wěn)定性與高性能并存呢,請(qǐng)看下面的并發(fā)模型探索與實(shí)踐。
3.2、交易鏈路實(shí)踐之基于future的分階段并發(fā)模型
??關(guān)于交易下單場(chǎng)景,外行人看就是創(chuàng)建一個(gè)訂單,一個(gè)insert; 其實(shí)不然,其中的邏輯復(fù)雜度遠(yuǎn)不止這些,我們來(lái)看下單需要做哪些邏輯:
信息查詢(商品、用戶、地址、庫(kù)存、活動(dòng)、紅包、業(yè)務(wù)線、標(biāo)簽等) 校驗(yàn)(庫(kù)存校驗(yàn)、地址校驗(yàn)、紅包校驗(yàn)、商品周期校驗(yàn)、服務(wù)校驗(yàn)、價(jià)格校驗(yàn)、積分校驗(yàn)、購(gòu)買次數(shù)校驗(yàn)等) 風(fēng)控?cái)r截 訂單信息組裝 鎖庫(kù)存類(虛擬庫(kù)存、實(shí)物庫(kù)存、服務(wù)庫(kù)存、鎖紅包、鎖積分) 活動(dòng)預(yù)算扣減 持久化(創(chuàng)建訂單,創(chuàng)建支付單) 操作流水,日志埋點(diǎn)等等
以上只列了關(guān)鍵節(jié)點(diǎn)并不完整,意在表達(dá)下單邏輯的復(fù)雜性。
a、傳統(tǒng)過(guò)程化串行模型:

??顯然,傳統(tǒng)的過(guò)程化串行模型,無(wú)論從性能方面,還是從代碼的靈活性、拓展性性方面已經(jīng)無(wú)法滿足我們的需求,所以這里我們下單采用了“基于future的分階段并發(fā)模型”。
b、基于future的分階段并發(fā)模型:

相較于傳統(tǒng)過(guò)程化串行模型,有如下優(yōu)點(diǎn):
多線程使接口整體性能大幅提升; 將代碼更具功能進(jìn)行了抽象和結(jié)構(gòu)化,分割成相鄰狀態(tài)的最小單元,當(dāng)于搭建樂(lè)高積木,復(fù)用性顯著提升; 拓展性與可維護(hù)性得到了質(zhì)的飛躍;
但也存在一些缺點(diǎn):
并發(fā)嚴(yán)格按照分組劃分,組內(nèi)耗時(shí)受約于最長(zhǎng)任務(wù)耗時(shí) 分組劃分下,線程池利用率不飽和
3.3、交易鏈路探索之基于事件驅(qū)動(dòng)并發(fā)模型
轉(zhuǎn)轉(zhuǎn)公司Avenger系列提供了一個(gè)更加高效的并發(fā)組件(Avenger-Ultron),比原有的分階段并發(fā)模型更加高效。
??目前,該并發(fā)模型已廣泛應(yīng)用于公司內(nèi)各業(yè)務(wù)線的復(fù)雜并發(fā)場(chǎng)景(一次用戶請(qǐng)求接口內(nèi)部需要聚合幾十次rpc查詢的信息)。
??如果說(shuō),從傳統(tǒng)過(guò)程化串行模型,進(jìn)化到基于future的分階段并發(fā)模型,是從0到1的過(guò)程;那么從基于future的分階段并發(fā)模型,進(jìn)化到基于事件驅(qū)動(dòng)并發(fā)模型,可以看作從1到100的進(jìn)步。最后加上拓?fù)鋱D、監(jiān)控、熔斷、降級(jí)等周邊插件or工具的完善,可實(shí)現(xiàn)100到∞的跨維度提升。
四、總結(jié)
??并發(fā)模型解決無(wú)狀態(tài)的復(fù)雜并發(fā)場(chǎng)景(如商品列表頁(yè)、詳情頁(yè)、首頁(yè)等),而FSM主要解決復(fù)雜業(yè)務(wù)場(chǎng)景交易鏈路狀態(tài)流轉(zhuǎn)的問(wèn)題,但FSM的應(yīng)用場(chǎng)景不止于交易訂單,還可用于其他有狀態(tài)的鏈路場(chǎng)景,比如OA工作流,質(zhì)檢流水線等。
??FSM只是一個(gè)框架,還需要搭建一整套基于它的外圍業(yè)務(wù)邏輯,在交易鏈路狀態(tài)流轉(zhuǎn)的過(guò)程中,業(yè)務(wù)邏輯才是我們的肌肉。業(yè)務(wù)邏輯與框架共同組成了我們交易中臺(tái)的技術(shù)體系,從而讓技術(shù)成長(zhǎng)更加健康,這也許就是中臺(tái)的魅力。
作者簡(jiǎn)介
郭世杰,轉(zhuǎn)轉(zhuǎn)交易中臺(tái)研發(fā)工程師
2022-05-13
2022-05-12
2022-05-11
2022-05-10
2022-05-09
如果你覺(jué)得這篇文章不錯(cuò),那么,下篇通常會(huì)更好。備注“公眾號(hào)”添加微信好友(微信號(hào):zhuan2quan)。
