分布式事務(wù)系統(tǒng)的設(shè)計(jì)(二)

在上一篇博客里墅诡,<a href="http://www.reibang.com/p/e9004c0db5cc">分布式事務(wù)系統(tǒng)設(shè)計(jì)</a>,主要是從中間件的角度去考慮如何實(shí)現(xiàn)一個(gè)分布式事務(wù)的中間件席爽,文章只寫了一個(gè)大概的設(shè)計(jì),詳細(xì)并沒有寫出來啊片;
根據(jù)業(yè)務(wù)場景不同只锻,系統(tǒng)定義了多種事務(wù)模式,主要包括標(biāo)準(zhǔn)模式紫谷、自定義模式齐饮。每種事務(wù)模式對(duì)應(yīng)了自己的RM實(shí)現(xiàn)。當(dāng)有新的事務(wù)模式需求出現(xiàn)笤昨,我們可以開發(fā)一個(gè)新的滿足新的分布式事務(wù)通信協(xié)議的RM祖驱。
一個(gè)分布式事務(wù)中間件大概應(yīng)該存在兩種模式:

標(biāo)準(zhǔn)模式

讀未提交(read uncommitted)和讀已提交(read committed),其中讀未提交是缺省設(shè)置

  • Read uncommitted
    標(biāo)準(zhǔn)模式在讀未提交的隔離級(jí)別下瞒窒,存在臟寫捺僻,臟讀的風(fēng)險(xiǎn)。
    臟寫出現(xiàn)的概率很低根竿,只有以下幾個(gè)條件同時(shí)滿足才會(huì)出現(xiàn):
    A) 事務(wù)1修改了T表的一行記錄陵像;
    B) 事務(wù)2接著也修改了T表的同一行記錄就珠;
    C) 事務(wù)1因?yàn)槟撤N原因需要回滾
    上面3個(gè)條件同時(shí)滿足時(shí),事務(wù)1回滾失敗醒颖,出現(xiàn)臟寫情況妻怎,這時(shí)事務(wù)系統(tǒng)告警模塊會(huì)通知到業(yè)務(wù)人員,需要根據(jù)系統(tǒng)的Undo日志進(jìn)行恢復(fù)泞歉。為什么說發(fā)生概率很低逼侦?一個(gè)分布式事務(wù)完成時(shí)間通常是毫秒級(jí),兩個(gè)分布式事務(wù)在這么短時(shí)間內(nèi)并發(fā)修改同一行記錄概率很低腰耙,假設(shè)萬分之一榛丢;事務(wù)失敗的概率假設(shè)也是萬分之一,則出現(xiàn)臟寫的概率是億分之一挺庞,可以說概率非常低了晰赞。
    臟寫出現(xiàn)概率極低,即使出現(xiàn)选侨,由于在業(yè)務(wù)庫上記錄了詳細(xì)的undo/redo log掖鱼,手工恢復(fù)代價(jià)也通常較小援制;所以臟寫問題對(duì)絕大多數(shù)應(yīng)用場景的負(fù)面影響可以忽略戏挡,建議采用這種讀未提交的隔離級(jí)別,比讀已提交級(jí)別有更好的性能晨仑。
    臟讀指用戶讀到了分布式事務(wù)的中間狀態(tài)褐墅。對(duì)于成功的分布式事務(wù),這種中間狀態(tài)基本可以認(rèn)為是沒有負(fù)面影響的洪己;對(duì)于失敗的分布式事務(wù)妥凳,也只有很少的場景下會(huì)有負(fù)面影響,因?yàn)檫@種中間狀態(tài)持續(xù)時(shí)間很短(通常是毫秒級(jí))码泛,用戶很難感知猾封。即使用戶看到了中間狀態(tài),通常也是能夠理解的噪珊,因?yàn)樗雷约菏聞?wù)失敗了晌缘。
    標(biāo)準(zhǔn)模式的“讀未提交”隔離級(jí)別是的主流應(yīng)用,它兼顧了易用性與較高的性能痢站,適用于多數(shù)分布式事務(wù)場景

  • Read committed
    標(biāo)準(zhǔn)模式在讀已提交的隔離級(jí)別下磷箕,將對(duì)所管理的所有讀已提交的分布式事務(wù),進(jìn)行寫入記錄的行級(jí)鎖檢查阵难,當(dāng)發(fā)現(xiàn)鎖沖突岳枷,采用重試策略(最長550ms),如果經(jīng)過重試后還是拿不到鎖,將拒絕后進(jìn)的事務(wù)空繁,并將異常拋出給上層業(yè)務(wù)系統(tǒng)殿衰。
    需要說明的是:僅能保證被管理的讀已提交的事務(wù)間的Read Committed的隔離性。
    隔離級(jí)別可以通過的RM配置項(xiàng)進(jìn)行設(shè)置盛泡。
    讀已提交隔離級(jí)別比讀未提交增大了開銷(10%~20%)闷祥,如果select語句也采用讀已提交則會(huì)有更大開銷。如4.1.1所分析傲诵,實(shí)際業(yè)務(wù)場景下凯砍,讀未提交是足夠安全的,不建議使用讀已提交隔離級(jí)別拴竹。

自定義模式

自定義模式就是業(yè)界比較流行的Tcc模式
TCC分別對(duì)應(yīng)Try/Prepare悟衩、Confirm/Commit和Cancel/Rollback三種操作,這三種操作的業(yè)務(wù)含義如下

  • Try/Prepare:預(yù)留業(yè)務(wù)資源
  • Confirm/Commit:確認(rèn)執(zhí)行業(yè)務(wù)操作
  • Cancel/Rollback:取消執(zhí)行業(yè)務(wù)操作
image.png

這種模式的話栓拜,不依賴于事務(wù)系統(tǒng)去推進(jìn)各資源管理器去推進(jìn)各分支更新事務(wù)狀態(tài)

優(yōu)點(diǎn):

  • 解決了跨應(yīng)用業(yè)務(wù)操作的原子性問題座泳,在諸如組合支付、賬務(wù)拆分場景非常實(shí)用菱属。
  • TCC實(shí)際上把數(shù)據(jù)庫層的二階段提交上提到了應(yīng)用層來實(shí)現(xiàn)钳榨,對(duì)于數(shù)據(jù)庫來說是一階段提交,規(guī)避了數(shù)據(jù)庫層的2PC性能低下問題纽门。
    缺點(diǎn):
  • TCC的Try、Confirm和Cancel操作功能需業(yè)務(wù)提供营罢,開發(fā)成本很高
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赏陵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饲漾,更是在濱河造成了極大的恐慌蝙搔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考传,死亡現(xiàn)場離奇詭異吃型,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)僚楞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門勤晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泉褐,你說我怎么就攤上這事赐写。” “怎么了膜赃?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵挺邀,是天一觀的道長。 經(jīng)常有香客問我,道長端铛,這世上最難降的妖魔是什么泣矛? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮禾蚕,結(jié)果婚禮上乳蓄,老公的妹妹穿的比我還像新娘。我一直安慰自己夕膀,他們只是感情好虚倒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产舞,像睡著了一般魂奥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上易猫,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天耻煤,我揣著相機(jī)與錄音,去河邊找鬼准颓。 笑死哈蝇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攘已。 我是一名探鬼主播炮赦,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼样勃!你這毒婦竟也來了吠勘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤峡眶,失蹤者是張志新(化名)和其女友劉穎剧防,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辫樱,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峭拘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狮暑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸡挠。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖心例,靈堂內(nèi)的尸體忽然破棺而出宵凌,到底是詐尸還是另有隱情,我是刑警寧澤止后,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布瞎惫,位于F島的核電站溜腐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瓜喇。R本人自食惡果不足惜挺益,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乘寒。 院中可真熱鬧望众,春花似錦、人聲如沸伞辛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚤氏。三九已至甘耿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竿滨,已是汗流浹背佳恬。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留于游,地道東北人毁葱。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像贰剥,于是被迫代替她去往敵國和親倾剿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容