摘要:最終一致性一簡(jiǎn)介是由支付寶架構(gòu)師提供的一種柔性解決分布式事務(wù)解決方案主要包括三個(gè)步驟流程的關(guān)鍵流程如下圖以下單和扣減庫(kù)存為例子預(yù)生成訂單失敗了為什么要通過(guò)執(zhí)行預(yù)處理數(shù)據(jù)回滾可能預(yù)生成訂單成功但是接口返回失敗超時(shí)失敗所以預(yù)處理在某些情況下是有
最終一致性(一) TCC 簡(jiǎn)介
TCC是由支付寶架構(gòu)師提供的一種柔性解決分布式事務(wù)解決方案,主要包括三個(gè)步驟:
TCC的關(guān)鍵流程如下圖(以下單和扣減庫(kù)存為例子)
Q: 預(yù)生成訂單失敗了,為什么要通過(guò)TCC執(zhí)行預(yù)處理數(shù)據(jù)回滾?
A: 可能預(yù)生成訂單成功,但是接口返回失敗(超時(shí)失敗),所以預(yù)處理在某些情況下是有預(yù)處理數(shù)據(jù),需要清理
TCC異常場(chǎng)景在整個(gè)流程,我們主要需要關(guān)注的是cancel失敗和confirm失敗引起的數(shù)據(jù)不一致現(xiàn)象
注意事項(xiàng)TCC服務(wù)支持接口失敗重試,所以對(duì)TCC暴露的接口都需要滿足冪等性(根據(jù)事務(wù)Id很好滿足)
基于TCC的中心化事務(wù)一致性解決方法,各個(gè)應(yīng)用服務(wù)器如果需要感知某次事務(wù)是否成功的成本很高,所以對(duì)于自身而言進(jìn)行事務(wù)補(bǔ)償成本就會(huì)很高.舉個(gè)例子:
1??每次成功的執(zhí)行本應(yīng)用服務(wù)器的事務(wù)以后,都需要把成功執(zhí)行的事務(wù)Id記錄
2??繼續(xù)confirm或者將confirm完的數(shù)據(jù)回滾,對(duì)用戶都很不友好,特別是需要confirm訂單或者回滾訂單數(shù)據(jù)
3??可以根據(jù)事務(wù)開始的時(shí)間,并且設(shè)計(jì)一個(gè)事務(wù)超時(shí)時(shí)間,如果在這個(gè)時(shí)間范圍以外事務(wù)還沒(méi)有處理完成,就可以當(dāng)做這個(gè)事務(wù)已經(jīng)失敗,將預(yù)處理數(shù)據(jù)刪除
總體來(lái)說(shuō),事務(wù)補(bǔ)償機(jī)制,心智負(fù)擔(dān)過(guò)于沉重.所以只能依賴TCC服務(wù)器的失敗重試機(jī)制,如果失敗重試機(jī)制不能處理,只能人肉去處理(建議全程人肉,因?yàn)橥瑫r(shí)進(jìn)行失敗重試和人肉的話,因?yàn)槿绻≈卦嚭腿巳舛荚诓僮魍粭l數(shù)據(jù),還需要考慮這種競(jìng)爭(zhēng)的場(chǎng)景,對(duì)重試次數(shù)需要限定)
是否一定需要TCC服務(wù)器?
不一定,可以讓交易鏈路來(lái)充當(dāng)TCC服務(wù)器的角色,但是長(zhǎng)期來(lái)看,TCC相當(dāng)于是一個(gè)公用的組件,所以其它地方也需要TCC分布式事務(wù),可以公用這一個(gè)組件(交易鏈路可以完成TCC所能完成的一切操作,把TCC多帶帶部署一個(gè)服務(wù),僅僅是考慮整個(gè)系統(tǒng)的抽象結(jié)構(gòu)和功能復(fù)用)
這里說(shuō)的預(yù)處理,指的是什么?
在整個(gè)分布式事務(wù)中預(yù)處理的含義其實(shí)很廣泛,比如訂單,所謂的預(yù)處理就是生成訂單,但是用戶真實(shí)是看不到這些訂單的,至于具體實(shí)現(xiàn)是在一張新表中記錄還是在原有的訂單表是加上標(biāo)記位,具體實(shí)現(xiàn)方式由自己統(tǒng)籌考慮(當(dāng)然還需要考慮記錄事務(wù)Id);像減庫(kù)存這種預(yù)處理,可以直接減少原始庫(kù)存,再通過(guò)另外一張表來(lái)記錄這次事務(wù)Id操作了哪個(gè)Sku的庫(kù)存數(shù)量,當(dāng)然也可以不減少庫(kù)存只記錄操作,但是這種方式在計(jì)算實(shí)際庫(kù)存的時(shí)候復(fù)雜度會(huì)提高(需要減掉預(yù)處理的那部分)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/64931.html
摘要:以兩階段提交來(lái)說(shuō),主持人收到一個(gè)提案請(qǐng)求,打電話跟每個(gè)組員詢問(wèn)是否通過(guò)并統(tǒng)計(jì)回復(fù),然后將最后決定打電話通知各組員。三階段提交即是引入了另一個(gè)步驟,主持人打電話跟組員通知請(qǐng)準(zhǔn)備通過(guò)提案,以避免沒(méi)人知道真實(shí)決定而造成決定不一致的失業(yè)危機(jī)。 3PC 以兩階段提交來(lái)說(shuō),主持人收到一個(gè)提案請(qǐng)求,打電話跟每個(gè)組員詢問(wèn)是否通過(guò)并統(tǒng)計(jì)回復(fù),然后將最后決定打電話通知各組員。要是主持人在跟第一位組員通完電...
摘要:以兩階段提交來(lái)說(shuō),主持人收到一個(gè)提案請(qǐng)求,打電話跟每個(gè)組員詢問(wèn)是否通過(guò)并統(tǒng)計(jì)回復(fù),然后將最后決定打電話通知各組員。三階段提交即是引入了另一個(gè)步驟,主持人打電話跟組員通知請(qǐng)準(zhǔn)備通過(guò)提案,以避免沒(méi)人知道真實(shí)決定而造成決定不一致的失業(yè)危機(jī)。 3PC 以兩階段提交來(lái)說(shuō),主持人收到一個(gè)提案請(qǐng)求,打電話跟每個(gè)組員詢問(wèn)是否通過(guò)并統(tǒng)計(jì)回復(fù),然后將最后決定打電話通知各組員。要是主持人在跟第一位組員通完電...
2PC(兩階段事務(wù)提交) 兩階段事務(wù)提交簡(jiǎn)化圖 showImg(/img/bVsV61); 兩階段事務(wù)提交異常點(diǎn) 節(jié)點(diǎn)本身故障(比如Down機(jī)) 節(jié)點(diǎn)之間通信故障 兩階段事務(wù)提交錯(cuò)誤點(diǎn)分析 showImg(/img/bVsV56); 說(shuō)明 圖中有問(wèn)號(hào)的條目,是我不確定的地方,但是不影響這個(gè)分布式事務(wù)的結(jié)果 圖中的感嘆號(hào)條目,個(gè)人感覺(jué)其實(shí)也是允許先發(fā)消息再記錄日志的,但是如果這樣子做以后發(fā)生D...
摘要:最終一致性二基于的分布式事務(wù)補(bǔ)償機(jī)制序列圖異常場(chǎng)景處理預(yù)創(chuàng)建訂單失敗如果實(shí)際預(yù)創(chuàng)建訂單成功訂單定時(shí)補(bǔ)償機(jī)制定時(shí)刪除這部分訂單不影響數(shù)據(jù)一致性下單失敗預(yù)扣減庫(kù)存失敗如果預(yù)扣減庫(kù)存真實(shí)失敗則下單失敗訂單由定時(shí)補(bǔ)償機(jī)制定時(shí)刪除其它應(yīng)用參照?qǐng)鼍暗奶? 最終一致性(二) 基于MQ的分布式事務(wù)補(bǔ)償機(jī)制 序列圖 showImg(https://segmentfault.com/img/bVzeHX);...
摘要:最終一致性二基于的分布式事務(wù)補(bǔ)償機(jī)制序列圖異常場(chǎng)景處理預(yù)創(chuàng)建訂單失敗如果實(shí)際預(yù)創(chuàng)建訂單成功訂單定時(shí)補(bǔ)償機(jī)制定時(shí)刪除這部分訂單不影響數(shù)據(jù)一致性下單失敗預(yù)扣減庫(kù)存失敗如果預(yù)扣減庫(kù)存真實(shí)失敗則下單失敗訂單由定時(shí)補(bǔ)償機(jī)制定時(shí)刪除其它應(yīng)用參照?qǐng)鼍暗奶? 最終一致性(二) 基于MQ的分布式事務(wù)補(bǔ)償機(jī)制 序列圖 showImg(/img/bVzeHX); 異常場(chǎng)景處理 預(yù)創(chuàng)建訂單失敗:如果實(shí)際預(yù)創(chuàng)建...
閱讀 2025·2021-10-11 10:59
閱讀 1130·2021-09-07 09:59
閱讀 2295·2021-08-27 16:17
閱讀 2847·2019-08-30 15:54
閱讀 2332·2019-08-30 12:58
閱讀 1836·2019-08-30 12:53
閱讀 1526·2019-08-28 18:13
閱讀 797·2019-08-26 13:35