免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
分布式事務(wù)的四種解決方案,值得參考!

分布式事務(wù)指事務(wù)的操作位于不同的節(jié)點(diǎn)上,需要保證事務(wù)的 AICD 特性。

例如在下單場(chǎng)景下,庫(kù)存和訂單如果不在同一個(gè)節(jié)點(diǎn)上,就涉及分布式事務(wù)。


在分布式系統(tǒng)中,要實(shí)現(xiàn)分布式事務(wù),無(wú)外乎那幾種解決方案。

一、兩階段提交(2PC)


兩階段提交(Two-phase Commit,2PC),通過(guò)引入?yún)f(xié)調(diào)者(Coordinator)來(lái)協(xié)調(diào)參與者的行為,并最終決定這些參與者是否要真正執(zhí)行事務(wù)。

1. 運(yùn)行過(guò)程

1.1 準(zhǔn)備階段

協(xié)調(diào)者詢問(wèn)參與者事務(wù)是否執(zhí)行成功,參與者發(fā)回事務(wù)執(zhí)行結(jié)果。

1.2 提交階段

如果事務(wù)在每個(gè)參與者上都執(zhí)行成功,事務(wù)協(xié)調(diào)者發(fā)送通知讓參與者提交事務(wù);否則,協(xié)調(diào)者發(fā)送通知讓參與者回滾事務(wù)。
需要注意的是,在準(zhǔn)備階段,參與者執(zhí)行了事務(wù),但是還未提交。只有在提交階段接收到協(xié)調(diào)者發(fā)來(lái)的通知后,才進(jìn)行提交或者回滾。

2. 存在的問(wèn)題

2.1 同步阻塞 所有事務(wù)參與者在等待其它參與者響應(yīng)的時(shí)候都處于同步阻塞狀態(tài),無(wú)法進(jìn)行其它操作。
2.2 單點(diǎn)問(wèn)題 協(xié)調(diào)者在 2PC 中起到非常大的作用,發(fā)生故障將會(huì)造成很大影響。特別是在階段二發(fā)生故障,所有參與者會(huì)一直等待狀態(tài),無(wú)法完成其它操作。

2.3 數(shù)據(jù)不一致 在階段二,如果協(xié)調(diào)者只發(fā)送了部分 Commit 消息,此時(shí)網(wǎng)絡(luò)發(fā)生異常,那么只有部分參與者接收到 Commit 消息,也就是說(shuō)只有部分參與者提交了事務(wù),使得系統(tǒng)數(shù)據(jù)不一致。

2.4 太過(guò)保守 任意一個(gè)節(jié)點(diǎn)失敗就會(huì)導(dǎo)致整個(gè)事務(wù)失敗,沒(méi)有完善的容錯(cuò)機(jī)制。
另外推薦這篇:分布式事務(wù)不理解?一次給你講清楚

二、補(bǔ)償事務(wù)(TCC)

TCC 其實(shí)就是采用的補(bǔ)償機(jī)制,其核心思想是:針對(duì)每個(gè)操作,都要注冊(cè)一個(gè)與其對(duì)應(yīng)的確認(rèn)和補(bǔ)償(撤銷(xiāo))操作。它分為三個(gè)階段:
  • Try 階段主要是對(duì)業(yè)務(wù)系統(tǒng)做檢測(cè)及資源預(yù)留

  • Confirm 階段主要是對(duì)業(yè)務(wù)系統(tǒng)做確認(rèn)提交,Try階段執(zhí)行成功并開(kāi)始執(zhí)行 Confirm階段時(shí),默認(rèn) Confirm階段是不會(huì)出錯(cuò)的。即:只要Try成功,Confirm一定成功。
  • Cancel 階段主要是在業(yè)務(wù)執(zhí)行錯(cuò)誤,需要回滾的狀態(tài)下執(zhí)行的業(yè)務(wù)取消,預(yù)留資源釋放。

舉個(gè)例子,假入 Bob 要向 Smith 轉(zhuǎn)賬,思路大概是:我們有一個(gè)本地方法,里面依次調(diào)用
  1. 首先在 Try 階段,要先調(diào)用遠(yuǎn)程接口把 Smith 和 Bob 的錢(qián)給凍結(jié)起來(lái)。
  2. 在 Confirm 階段,執(zhí)行遠(yuǎn)程調(diào)用的轉(zhuǎn)賬的操作,轉(zhuǎn)賬成功進(jìn)行解凍。
  3. 如果第2步執(zhí)行成功,那么轉(zhuǎn)賬成功,如果第二步執(zhí)行失敗,則調(diào)用遠(yuǎn)程凍結(jié)接口對(duì)應(yīng)的解凍方法 (Cancel)。
優(yōu)點(diǎn): 跟2PC比起來(lái),實(shí)現(xiàn)以及流程相對(duì)簡(jiǎn)單了一些,但數(shù)據(jù)的一致性比2PC也要差一些
缺點(diǎn): 缺點(diǎn)還是比較明顯的,在2,3步中都有可能失敗。TCC屬于應(yīng)用層的一種補(bǔ)償方式,所以需要程序員在實(shí)現(xiàn)的時(shí)候多寫(xiě)很多補(bǔ)償?shù)拇a,在一些場(chǎng)景中,一些業(yè)務(wù)流程可能用TCC不太好定義及處理。

三、本地消息表(異步確保)

本地消息表與業(yè)務(wù)數(shù)據(jù)表處于同一個(gè)數(shù)據(jù)庫(kù)中,這樣就能利用本地事務(wù)來(lái)保證在對(duì)這兩個(gè)表的操作滿足事務(wù)特性,并且使用了消息隊(duì)列來(lái)保證最終一致性。
  1. 在分布式事務(wù)操作的一方完成寫(xiě)業(yè)務(wù)數(shù)據(jù)的操作之后向本地消息表發(fā)送一個(gè)消息,本地事務(wù)能保證這個(gè)消息一定會(huì)被寫(xiě)入本地消息表中。
  2. 之后將本地消息表中的消息轉(zhuǎn)發(fā)到 Kafka 等消息隊(duì)列中,如果轉(zhuǎn)發(fā)成功則將消息從本地消息表中刪除,否則繼續(xù)重新轉(zhuǎn)發(fā)。
  3. 在分布式事務(wù)操作的另一方從消息隊(duì)列中讀取一個(gè)消息,并執(zhí)行消息中的操作。

優(yōu)點(diǎn): 一種非常經(jīng)典的實(shí)現(xiàn),避免了分布式事務(wù),實(shí)現(xiàn)了最終一致性。

缺點(diǎn): 消息表會(huì)耦合到業(yè)務(wù)系統(tǒng)中,如果沒(méi)有封裝好的解決方案,會(huì)有很多雜活需要處理。

四、MQ 事務(wù)消息


有一些第三方的MQ是支持事務(wù)消息的,比如RocketMQ,他們支持事務(wù)消息的方式也是類(lèi)似于采用的二階段提交,但是市面上一些主流的MQ都是不支持事務(wù)消息的,比如 RabbitMQ 和 Kafka 都不支持。
以阿里的 RocketMQ 中間件為例,其思路大致為:
第一階段Prepared消息,會(huì)拿到消息的地址。第二階段執(zhí)行本地事務(wù),第三階段通過(guò)第一階段拿到的地址去訪問(wèn)消息,并修改狀態(tài)。
也就是說(shuō)在業(yè)務(wù)方法內(nèi)要想消息隊(duì)列提交兩次請(qǐng)求,一次發(fā)送消息和一次確認(rèn)消息。如果確認(rèn)消息發(fā)送失敗了RocketMQ會(huì)定期掃描消息集群中的事務(wù)消息,這時(shí)候發(fā)現(xiàn)了Prepared消息,它會(huì)向消息發(fā)送者確認(rèn),所以生產(chǎn)方需要實(shí)現(xiàn)一個(gè)check接口,RocketMQ會(huì)根據(jù)發(fā)送端設(shè)置的策略來(lái)決定是回滾還是繼續(xù)發(fā)送確認(rèn)消息。這樣就保證了消息發(fā)送與本地事務(wù)同時(shí)成功或同時(shí)失敗。
另外推薦這篇:分布式事務(wù)不理解?一次給你講清楚。

優(yōu)點(diǎn): 實(shí)現(xiàn)了最終一致性,不需要依賴(lài)本地?cái)?shù)據(jù)庫(kù)事務(wù)。

缺點(diǎn): 實(shí)現(xiàn)難度大,主流MQ不支持,RocketMQ事務(wù)消息部分代碼也未開(kāi)源。
通過(guò)本文我們總結(jié)并對(duì)比了幾種分布式分解方案的優(yōu)缺點(diǎn),分布式事務(wù)本身是一個(gè)技術(shù)難題,是沒(méi)有一種完美的方案應(yīng)對(duì)所有場(chǎng)景的,具體還是要根據(jù)業(yè)務(wù)場(chǎng)景去抉擇吧。筆者上家公司是試用阿里RocketMQ去實(shí)現(xiàn)的分布式事務(wù),現(xiàn)在也有除了很多分布式事務(wù)的協(xié)調(diào)器,比如LCN等,大家可以多去嘗試。

作者:若離x

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
分布式事務(wù)( 圖解 + 秒懂 + 史上最全 )
淺談分布式事務(wù)及解決方案
分布式緩存的選擇
一文講透微服務(wù)下如何保證事務(wù)的一致性
5種分布式事務(wù)解決方案優(yōu)缺點(diǎn)對(duì)比
分布式事務(wù) ( DTS ) 你必須知道的事兒
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服