溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

發(fā)布時(shí)間:2021-09-18 10:14:28 來(lái)源:億速云 閱讀:171 作者:柒染 欄目:編程語(yǔ)言

這篇文章給大家介紹從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

在雙11的時(shí)候,很多電商都在搞促銷,包括京東。

我們以大魏的書舉例,例如雙11的時(shí)候,買書除了打折好有紅包,這樣,買書的時(shí)候雙重優(yōu)惠,如下圖所示:

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

那么,在雙11的場(chǎng)景中,買書的一次請(qǐng)求,就包括同步和異步的場(chǎng)景,如下圖所示。

同步場(chǎng)景采用Saga、異步場(chǎng)景采取事務(wù)消息(Sagas+本地事務(wù)消息表)。也就是說(shuō),分布式事務(wù)的設(shè)計(jì)要能同時(shí)滿足同步和異步兩種場(chǎng)景:

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

那么,我們看一次成功的雙11購(gòu)物請(qǐng)求。

下圖的1、2、3、4是的是步驟,分別調(diào)用上圖的A、B、C、D應(yīng)用模塊。

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

在上圖中,我們從App發(fā)起請(qǐng)求,請(qǐng)求被分配到任意一個(gè)網(wǎng)關(guān)層,再被分配到任意一個(gè)業(yè)余邏輯層。

1.業(yè)務(wù)邏輯層會(huì)先調(diào)用商品數(shù)據(jù)源訪問(wèn)層進(jìn)行減庫(kù)存(訪問(wèn)DB)

2.第1步成功后,業(yè)務(wù)邏輯層訪問(wèn)訂單數(shù)據(jù)訪問(wèn)層,進(jìn)行創(chuàng)建訂單本地事務(wù)(訪問(wèn)

DB),在下訂單的同時(shí),業(yè)務(wù)邏輯層會(huì)向MQ發(fā)送延遲訂單支付消息,即事務(wù)消息。

3.第2步執(zhí)行成功后,業(yè)務(wù)邏輯層調(diào)用紅包數(shù)據(jù)訪問(wèn)層,進(jìn)行減紅包操

(訪問(wèn)DB)。成功后,紅包數(shù)據(jù)訪問(wèn)會(huì)返回成功信息給交易邏輯層、交易邏輯層返回成功信息給網(wǎng)網(wǎng)關(guān)層、網(wǎng)關(guān)層返回信息給App。

4.App頁(yè)面自動(dòng)跳轉(zhuǎn)到支付頁(yè)面,即業(yè)務(wù)邏輯層調(diào)用支付數(shù)據(jù)訪問(wèn)層,進(jìn)行前臺(tái)支付。

然后,整個(gè)操作完成。

那么,MQ中的訂單支付消息呢?當(dāng)延遲支付消息到了超時(shí)時(shí)間后(京東是24小時(shí)),MQ的訂單延遲支付消息會(huì)被發(fā)到到業(yè)務(wù)邏輯層(因?yàn)闃I(yè)務(wù)邏輯層訂閱了MQ的Topic),然后業(yè)務(wù)邏輯層根據(jù)事務(wù)組表,判斷訂單有沒(méi)有支付,如果支付了,則直接刪除延遲消息。如果訂單未支付,則將事務(wù)組表中的state由1改成3(失?。?/p>

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

然后TM根據(jù)事務(wù)調(diào)用表,TM觸發(fā)事務(wù)補(bǔ)償:將紅包加回去、訂單+1、刪除訂單。

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析


最后,Proxy將事務(wù)組表中的state由1改成4(補(bǔ)償成功)

那么,我們審視一下上圖的架構(gòu),在超高請(qǐng)求到來(lái)時(shí),可能的瓶頸點(diǎn)在哪?

從技術(shù)架構(gòu)來(lái)看,網(wǎng)關(guān)、交易業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層都是無(wú)狀態(tài)的,可以橫向擴(kuò)展,不存在瓶頸。對(duì)于DB而言,可以做數(shù)據(jù)分表。對(duì)于MQ而言,可以做分片??雌饋?lái)也不存在性能瓶頸。

那么,為什么雙11的時(shí)候,在京東購(gòu)物,還會(huì)發(fā)生購(gòu)物失敗的情況呢?

原因是存在熱點(diǎn)數(shù)據(jù),也就是特別搶手的貨物,例如:

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

如果要解決熱點(diǎn)數(shù)據(jù)問(wèn)題,就需要做熱點(diǎn)數(shù)據(jù)預(yù)測(cè)。要做熱點(diǎn)數(shù)據(jù)預(yù)測(cè),要先做異步化。也就是說(shuō),對(duì)于熱點(diǎn)緊俏商品的購(gòu)買請(qǐng)求,直接先發(fā)到MQ中。然后再依次執(zhí)行業(yè)務(wù)邏輯。

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

在這時(shí),熱點(diǎn)就會(huì)被壓在MQ上。這時(shí)候,我們就需要對(duì)MQ做分片,但對(duì)于一個(gè)商品的一條記錄,我們?nèi)绾螌?duì)它做分片呢?可以加一列Type,把數(shù)據(jù)一行變多行:

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

然后我們可以把每一行記錄存在一個(gè)MQ的Topic中,就能消除熱點(diǎn)數(shù)據(jù)。

既然技術(shù)上熱點(diǎn)數(shù)據(jù)能夠消除,為啥雙11京東購(gòu)物還有失敗呢?因?yàn)椴少?gòu)服務(wù)器是要花錢的,雙11電商會(huì)保證交易成功率,但這個(gè)成功率不會(huì)是100%,這是從ROI的角度去考慮的問(wèn)題。

總結(jié):在設(shè)計(jì)業(yè)務(wù)架構(gòu)時(shí),考慮到超高并發(fā)流量請(qǐng)求,我們需要注重架構(gòu)如下三個(gè)方面:

從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析

關(guān)于從雙11業(yè)務(wù)看分布式事務(wù)滿足Saga和異步場(chǎng)景的示例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI