面試官80%會(huì)問的分布式事務(wù)中的“最大努力通知”事務(wù)

一力穗、概述

咱們今天聊聊分布式事務(wù)系列中的最后一個(gè)方案:最大努力通知事務(wù)电爹。最大努力通知事務(wù)的主流實(shí)現(xiàn)仍是基于MQ來進(jìn)行事務(wù)控制须鼎。最大努力通知事務(wù)和事務(wù)消息都是通知型事務(wù)诞外,主要適用于那些需要異步更新數(shù)據(jù)澜沟,并且對(duì)數(shù)據(jù)的實(shí)時(shí)性要求較低的場(chǎng)景。

最大努力通知事務(wù)主要用于外部系統(tǒng)峡谊,因?yàn)橥獠康木W(wǎng)絡(luò)環(huán)境更加復(fù)雜和不可信茫虽,所以只能盡最大努力去通知實(shí)現(xiàn)數(shù)據(jù)最終一致性,比如充值平臺(tái)與運(yùn)營商既们、支付對(duì)接濒析、商戶通知等等跨平臺(tái)、跨企業(yè)的系統(tǒng)間業(yè)務(wù)交互場(chǎng)景啥纸;而事務(wù)消息主要適用于內(nèi)部系統(tǒng)的數(shù)據(jù)最終一致性保障号杏,因?yàn)閮?nèi)部相對(duì)比較可控,比如訂單和購物車斯棒、收貨與清算盾致、支付與結(jié)算等等場(chǎng)景。

普通消息是無法解決本地事務(wù)執(zhí)行和消息發(fā)送的一致性問題的名船。因?yàn)橄l(fā)送是一個(gè)網(wǎng)絡(luò)通信的過程绰上,發(fā)送消息的過程就有可能出現(xiàn)發(fā)送失敗、或者超時(shí)的情況渠驼。超時(shí)有可能發(fā)送成功了,有可能發(fā)送失敗了鉴腻,消息的發(fā)送方是無法確定的迷扇,所以此時(shí)消息發(fā)送方無論是提交事務(wù)還是回滾事務(wù),都有可能不一致性出現(xiàn)爽哎。所以通知型事務(wù)的難度在于投遞消息和參與者自身本地事務(wù)的一致性保障蜓席。

因?yàn)楹诵囊c(diǎn)一致,都是為了保證消息的一致性投遞课锌,所以最大努力通知事務(wù)在投遞流程上跟事務(wù)消息是一樣的厨内,因此也有兩個(gè)分支:

l 基于MQ自身的事務(wù)消息方案

l 基于DB的本地事務(wù)消息表方案

二、最大努力通知事務(wù)流程

我們先看看事務(wù)消息的兩個(gè)分支:

基于MQ的事務(wù)消息

基于DB消息表的事務(wù)消息


基于DB消息表的事務(wù)消息

最大努力通知事務(wù)在投遞之前跟上面流程都差不多渺贤,關(guān)鍵在于投遞后的處理雏胃,因?yàn)槭聞?wù)消息在于內(nèi)部的事務(wù)處理,所以MQ和系統(tǒng)是直連并且無需嚴(yán)格的權(quán)限志鞍、安全等方面的思路設(shè)計(jì)瞭亮。

基于事務(wù)消息的最大努力通知事務(wù)

基于DB消息表的最大努力通知事務(wù)

最大努力通知事務(wù)在投遞之前跟上面流程都差不多,關(guān)鍵在于投遞后的處理固棚,因?yàn)槭聞?wù)消息在于內(nèi)部的事務(wù)處理统翩,所以MQ和系統(tǒng)是直連并且無需嚴(yán)格的權(quán)限仙蚜、安全等方面的思路設(shè)計(jì)。最大努力通知事務(wù)在于第三方系統(tǒng)的對(duì)接厂汗,所以最大努力通知事務(wù)有幾個(gè)特性

? 業(yè)務(wù)主動(dòng)方在完成業(yè)務(wù)處理后委粉,向業(yè)務(wù)被動(dòng)方(第三方系統(tǒng))發(fā)送通知消息,允許存在消息丟失娶桦。

? 業(yè)務(wù)主動(dòng)方提供遞增多擋位時(shí)間間隔(5min艳丛、10min、30min趟紊、1h氮双、24h),用于失敗重試調(diào)用業(yè)務(wù)被動(dòng)方的接口霎匈;在通知N次之后就不再通知戴差,報(bào)警+記日志+人工介入。

? 業(yè)務(wù)被動(dòng)方提供冪等的服務(wù)接口铛嘱,防止通知重復(fù)消費(fèi)暖释。

? 業(yè)務(wù)主動(dòng)方需要有定期校驗(yàn)機(jī)制,對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行兜底墨吓;防止業(yè)務(wù)被動(dòng)方無法履行責(zé)任時(shí)進(jìn)行業(yè)務(wù)回滾球匕,確保數(shù)據(jù)最終一致性。

在很多其他資料都會(huì)說“業(yè)務(wù)被動(dòng)方根據(jù)定時(shí)策略帖烘,向業(yè)務(wù)活動(dòng)的主動(dòng)方進(jìn)行輪詢亮曹,進(jìn)而恢復(fù)丟失的業(yè)務(wù)消息”;但在真實(shí)場(chǎng)景中被動(dòng)方很多時(shí)候可能是業(yè)務(wù)強(qiáng)勢(shì)方秘症,不會(huì)反向調(diào)用 業(yè)務(wù)主動(dòng)方的接口照卦;所以我們需要一定的熔斷探活機(jī)制來保證我們的通知有效性。還有很多資料也說“被動(dòng)方的處理結(jié)果不影響主動(dòng)方的處理結(jié)果”乡摹,在我的認(rèn)知中役耕,這句話其實(shí)是有缺陷的:在大多數(shù)下確實(shí)業(yè)務(wù)被動(dòng)方的處理結(jié)果不影響業(yè)務(wù)主動(dòng)方,但在業(yè)務(wù)被動(dòng)方確定無法履行業(yè)務(wù)責(zé)任時(shí)聪廉,業(yè)務(wù)主動(dòng)方可能仍需要回滾業(yè)務(wù)數(shù)據(jù)瞬痘。

三、最大努力通知事務(wù) VS 事務(wù)消息

最大努力通知事務(wù)在我認(rèn)知中板熊,其實(shí)是基于事務(wù)消息發(fā)展而來適用于外部對(duì)接的一種業(yè)務(wù)實(shí)現(xiàn)框全。他們主要有的是業(yè)務(wù)差別,如下:

? 從參與者來說:最大努力通知事務(wù)適用于跨平臺(tái)邻邮、跨企業(yè)的系統(tǒng)間業(yè)務(wù)交互竣况;事務(wù)消息更適用于同網(wǎng)絡(luò)體系的內(nèi)部服務(wù)交付。

? 從消息層面說:最大努力通知事務(wù)需要主動(dòng)推送并提供多檔次時(shí)間的重試機(jī)制來保證數(shù)據(jù)的通知;而事務(wù)消息只需要消息消費(fèi)者主動(dòng)去消費(fèi)丹泉。

? 從數(shù)據(jù)層面說:最大努力通知事務(wù)還需額外的定期校驗(yàn)機(jī)制對(duì)數(shù)據(jù)進(jìn)行兜底情萤,保證數(shù)據(jù)的最終一致性;而事務(wù)消息秩序保證消息的可靠投遞即可摹恨,自身無需對(duì)數(shù)據(jù)進(jìn)行兜底處理筋岛。

四、總結(jié)

最大努力通知事務(wù)本質(zhì)是通過引入定期校驗(yàn)機(jī)制來對(duì)最終一致性做兜底晒哄,對(duì)業(yè)務(wù)侵入性較低睁宰;適合于對(duì)最終一致性敏感度比較低、業(yè)務(wù)鏈路較短的場(chǎng)景寝凌。

文章末尾大廠真實(shí)面試題以及答案

需要面試資料的小伙伴柒傻,麻煩幫忙轉(zhuǎn)發(fā)一下這篇文章+關(guān)注我,然后添加小助手VX:xuanwo008自取

程序員專屬簡(jiǎn)歷模板

需要面試資料的小伙伴较木,麻煩幫忙轉(zhuǎn)發(fā)一下這篇文章+關(guān)注我红符,然后添加小助手VX:xuanwo008自取

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伐债,隨后出現(xiàn)的幾起案子预侯,更是在濱河造成了極大的恐慌,老刑警劉巖峰锁,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萎馅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡虹蒋,警方通過查閱死者的電腦和手機(jī)糜芳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來千诬,“玉大人耍目,你說我怎么就攤上這事⌒彀螅” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵莫辨,是天一觀的道長傲茄。 經(jīng)常有香客問我,道長沮榜,這世上最難降的妖魔是什么盘榨? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蟆融,結(jié)果婚禮上草巡,老公的妹妹穿的比我還像新娘。我一直安慰自己型酥,他們只是感情好山憨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布查乒。 她就那樣靜靜地躺著,像睡著了一般郁竟。 火紅的嫁衣襯著肌膚如雪玛迄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天棚亩,我揣著相機(jī)與錄音蓖议,去河邊找鬼。 笑死讥蟆,一個(gè)胖子當(dāng)著我的面吹牛勒虾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘸彤,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼修然,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钧栖?” 一聲冷哼從身側(cè)響起低零,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拯杠,沒想到半個(gè)月后掏婶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潭陪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年雄妥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片依溯。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡老厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黎炉,到底是詐尸還是另有隱情枝秤,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布慷嗜,位于F島的核電站淀弹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庆械。R本人自食惡果不足惜薇溃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缭乘。 院中可真熱鬧沐序,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垄惧,卻和暖如春刁愿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背到逊。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工铣口, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人觉壶。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓脑题,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铜靶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叔遂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345