分布式事務(wù):樂觀事務(wù)和悲觀事務(wù)

前言

最近留意到了一款優(yōu)秀的國(guó)產(chǎn)數(shù)據(jù)庫(kù)tidb金刁,研究了一下他們實(shí)現(xiàn)的分布式事務(wù)织咧,屬于二段提交(2PC)胀葱。tidb借鑒了 google 用于實(shí)現(xiàn) big table 的分布式事務(wù)實(shí)踐 Percolator 。下面會(huì)講一下分布式事務(wù)的樂觀和悲觀鎖抵屿。

悲觀 or 樂觀庆锦?

拿去餐廳用餐等位置的經(jīng)歷來舉例

樂觀者

這個(gè)時(shí)候餐廳應(yīng)該不會(huì)很多人吧轧葛?我去先去看看排的隊(duì)長(zhǎng)不長(zhǎng)搂抒,長(zhǎng)我就先回家等等,不長(zhǎng)我就去用餐了求晶。

悲觀者

這個(gè)時(shí)候餐廳應(yīng)該會(huì)很多人吧?我先打個(gè)電話預(yù)約一下餐桌衷笋,免得到時(shí)候人多白跑一趟。

分析

不難發(fā)現(xiàn)辟宗,樂觀者會(huì)先假設(shè)餐廳是相對(duì)空閑的一個(gè)狀態(tài)爵赵,避免了占用資源但是暫時(shí)不使用的浪費(fèi)資源現(xiàn)象泊脐。而悲觀者會(huì)基于資源是相對(duì)繁忙的一個(gè)情況空幻,會(huì)先對(duì)資源進(jìn)行預(yù)約占用(上鎖)。

樂觀事務(wù)

下面來講一下樂觀事務(wù)的事務(wù)流程秕铛。在事務(wù)提交之前,會(huì)先把數(shù)據(jù)的 update/delete 操作緩存到內(nèi)存缩挑。然后大體分為兩個(gè)步驟完成事務(wù)提交。

Prewrite

把需要修改的 key 分為兩部分:隨機(jī)1個(gè) primary 调煎、其他作為 secondaries 镜遣。

  • 首先把 primary 上鎖士袄,會(huì)有兩種情況上鎖失敱亍:
    • key 已經(jīng)被上鎖
    • 在本次事務(wù)開始時(shí)間戳(startTs)后娄柳,已經(jīng)有過寫操作寓辱,此處稱為沖突(Conflict)。
  • 把 secondaries 用 primary key 類似的上鎖方法上鎖
上鎖前

上鎖后

Commit

Prewrite 完成之后秫筏,需要開始進(jìn)行提交操作诱鞠。

  • 提交 primary key:寫入數(shù)據(jù)这敬,記錄事務(wù)提交時(shí)間戳(commitTs)航夺。
  • 解開 primary key 的鎖
  • 異步進(jìn)行提交 secondaries key 操作。

重試

由于在 Prewrite 階段有可能會(huì)產(chǎn)生失敗阳掐,失敗就會(huì)產(chǎn)生回滾和重試。在一些大事務(wù)當(dāng)中冷蚂,沖突率有可能非常高,導(dǎo)致頻繁重試蝙茶。此時(shí)需要引入悲觀事務(wù)艺骂。

悲觀事務(wù)

悲觀鎖事務(wù)其實(shí)整體流程都非常類似樂觀鎖事務(wù)隆夯。不同的是钳恕,把 prewrite 階段的鎖,提前到客戶端開啟事務(wù)中的DML語句當(dāng)中苞尝。


樂觀事務(wù)

悲觀事務(wù)

版權(quán)聲明

本文版權(quán)歸作者所有,請(qǐng)勿私自轉(zhuǎn)載文章宦芦,感謝!

參考

TiDB 最佳實(shí)踐系列(三)樂觀鎖事務(wù)
TiDB 新特性漫談:悲觀事務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末调卑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恬涧,更是在濱河造成了極大的恐慌注益,老刑警劉巖溯捆,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丑搔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡啤月,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門劳跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刨仑,你說我怎么就攤上這事郑诺。” “怎么了辙诞?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵辙售,是天一觀的道長(zhǎng)倘要。 經(jīng)常有香客問我圾亏,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任夭问,我火速辦了婚禮泽西,結(jié)果婚禮上缰趋,老公的妹妹穿的比我還像新娘捧杉。我一直安慰自己,他們只是感情好秘血,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灰粮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粘舟。 梳的紋絲不亂的頭發(fā)上熔脂,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天柑肴,我揣著相機(jī)與錄音霞揉,去河邊找鬼。 笑死晰骑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硕舆。 我是一名探鬼主播秽荞,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼岗宣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蚂会!你這毒婦竟也來了耗式?” 一聲冷哼從身側(cè)響起胁住,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彪见,沒想到半個(gè)月后儡司,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捕犬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酵镜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淮韭,死狀恐怖垢粮,靈堂內(nèi)的尸體忽然破棺而出靠粪,到底是詐尸還是另有隱情蜡吧,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布昔善,位于F島的核電站,受9級(jí)特大地震影響畔乙,放射性物質(zhì)發(fā)生泄漏君仆。R本人自食惡果不足惜啸澡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一袖订、第九天 我趴在偏房一處隱蔽的房頂上張望嗅虏。 院中可真熱鬧洛姑,春花似錦、人聲如沸皮服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硫眯。三九已至择同,卻和暖如春两入,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裹纳。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工择葡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剃氧。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像朋鞍,于是被迫代替她去往敵國(guó)和親已添。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滥酥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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