分布式事務(wù)(轉(zhuǎn)載)

基本概念

ACID四個特性

  • 原子性(Atomicity)指事務(wù)作為整體來執(zhí)行棚唆,要么全部執(zhí)行报亩,要么全不執(zhí)行套利;
  • 一致性(Consistency)指事務(wù)應(yīng)確保數(shù)據(jù)從一個一致的狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致的狀態(tài);
  • 隔離性(Isolation)指多個事務(wù)并發(fā)執(zhí)行時迎瞧,一個事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行间螟;
  • 持久性(Durability)指已提交的事務(wù)修改數(shù)據(jù)會被持久保存吴旋。

剛性事務(wù) vs 柔性事務(wù)

如果將實(shí)現(xiàn)了 ACID 的事務(wù)要素的事務(wù)稱為剛性事務(wù)的話,那么基于 BASE 事務(wù)要素的事務(wù)則稱為柔性事務(wù)厢破。

BASE 是基本可用荣瑟、柔性狀態(tài)和最終一致性這三個要素的縮寫。

  • 基本可用(Basically Available)保證分布式事務(wù)參與方不一定同時在線摩泪;
  • 柔性狀態(tài)(Soft state)則允許系統(tǒng)狀態(tài)更新有一定的延時笆焰,這個延時對客戶來說不一定能夠察覺;
  • 最終一致性(Eventually consistent)通常是通過消息傳遞的方式保證系統(tǒng)的最終一致性见坑。

本地事務(wù) vs 分布式事務(wù)

  • 本地事務(wù) : 在單一數(shù)據(jù)節(jié)點(diǎn)中嚷掠,事務(wù)僅限于對單一數(shù)據(jù)庫資源的訪問控制。
    幾乎所有的成熟的關(guān)系型數(shù)據(jù)庫都提供了對本地事務(wù)的原生支持荞驴。
  • 分布式事務(wù):在基于微服務(wù)的分布式應(yīng)用環(huán)境下不皆,越來越多的應(yīng)用場景要求對多個服務(wù)的訪問及其相對應(yīng)的多個數(shù)據(jù)庫資源能納入到同一個事務(wù)當(dāng)中,分布式事務(wù)應(yīng)運(yùn)而生熊楼。

關(guān)系型數(shù)據(jù)庫雖然對本地事務(wù)提供了完美的 ACID 原生支持霹娄。 但在分布式的場景下,它卻成為系統(tǒng)性能的桎梏鲫骗。 如何讓數(shù)據(jù)庫在分布式場景下滿足 ACID 的特性或找尋相應(yīng)的替代方案犬耻,是分布式事務(wù)的重點(diǎn)工作。

本地事務(wù)

在不開啟任何分布式事務(wù)管理器的前提下挎峦,讓每個數(shù)據(jù)節(jié)點(diǎn)各自管理自己的事務(wù)。 它們之間沒有協(xié)調(diào)以及通信的能力合瓢,也并不互相知曉其他數(shù)據(jù)節(jié)點(diǎn)事務(wù)的成功與否坦胶。 本地事務(wù)在性能方面無任何損耗,但在強(qiáng)一致性以及最終一致性方面則力不從心晴楔。

兩階段提交

XA協(xié)議最早的分布式事務(wù)模型是由 X/Open 國際聯(lián)盟提出的 X/Open Distributed Transaction Processing (DTP) 模型顿苇,簡稱 XA 協(xié)議。

基于XA協(xié)議實(shí)現(xiàn)的分布式事務(wù)對業(yè)務(wù)侵入很小税弃。 它最大的優(yōu)勢就是對使用方透明纪岁,用戶可以像使用本地事務(wù)一樣使用基于XA協(xié)議的分布式事務(wù)。 XA協(xié)議能夠嚴(yán)格保障事務(wù) ACID 特性则果。

嚴(yán)格保障事務(wù) ACID 特性是一把雙刃劍幔翰。 事務(wù)執(zhí)行在過程中需要將所需資源全部鎖定漩氨,它更加適用于執(zhí)行時間確定的短事務(wù)。 對于長事務(wù)來說遗增,整個事務(wù)進(jìn)行期間對數(shù)據(jù)的獨(dú)占叫惊,將導(dǎo)致對熱點(diǎn)數(shù)據(jù)依賴的業(yè)務(wù)系統(tǒng)并發(fā)性能衰退明顯。 因此做修,在高并發(fā)的性能至上場景中霍狰,基于 XA 協(xié)議的分布式事務(wù)并不是最佳選擇。

柔性事務(wù)

在 ACID 事務(wù)中對隔離性的要求很高饰及,在事務(wù)執(zhí)行過程中蔗坯,必須將所有的資源鎖定。 柔性事務(wù)的理念則是通過業(yè)務(wù)邏輯將互斥鎖操作從資源層面上移至業(yè)務(wù)層面燎含。 通過放寬對強(qiáng)一致性要求宾濒,來換取系統(tǒng)吞吐量的提升。

區(qū)別與對比

基于 ACID 的強(qiáng)一致性事務(wù)和基于 BASE 的最終一致性事務(wù)都不是銀彈瘫镇,只有在最適合的場景中才能發(fā)揮它們的最大長處鼎兽。 可通過下表詳細(xì)對比它們之間的區(qū)別,以幫助開發(fā)者進(jìn)行技術(shù)選型铣除。

本地事務(wù) 兩/三 階段事務(wù) 柔性事務(wù)
業(yè)務(wù)改造 需實(shí)現(xiàn)相關(guān)接口
一致性 不支持 支持 最終一致
隔離性 不支持 支持 業(yè)務(wù)方保證
并發(fā)性能 無影響 嚴(yán)重衰退 略微衰退
適合場景 業(yè)務(wù)方處理不一致 短事務(wù) & 低并發(fā) 長事務(wù) & 高并發(fā)

主流解決方案介紹

柔性事務(wù)在 2008 年發(fā)表的一篇論文中被最早提到谚咬, 它提倡采用最終一致性放寬對強(qiáng)一致性的要求,以達(dá)到事務(wù)處理并發(fā)度的提升尚粘。

TCC 和 Saga 是兩種常見實(shí)現(xiàn)方案择卦。 他們主張開發(fā)者自行實(shí)現(xiàn)對數(shù)據(jù)庫的反向操作,來達(dá)到數(shù)據(jù)在回滾時仍能夠保證最終一致性郎嫁。

[SEATA] (https://github.com/seata/seata) 實(shí)現(xiàn)了 SQL 反向操作的自動生成秉继,可以使柔性事務(wù)不再必須由開發(fā)者介入才能使用。
Apache ShardingSphere 集成了 SEATA 作為柔性事務(wù)的使用方案泽铛。

(內(nèi)容待續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尚辑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盔腔,更是在濱河造成了極大的恐慌杠茬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弛随,死亡現(xiàn)場離奇詭異瓢喉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舀透,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門栓票,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愕够,你說我怎么就攤上這事走贪》鹈停” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵厉斟,是天一觀的道長挚躯。 經(jīng)常有香客問我,道長擦秽,這世上最難降的妖魔是什么码荔? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮感挥,結(jié)果婚禮上缩搅,老公的妹妹穿的比我還像新娘。我一直安慰自己触幼,他們只是感情好硼瓣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著置谦,像睡著了一般堂鲤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上媒峡,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天瘟栖,我揣著相機(jī)與錄音,去河邊找鬼谅阿。 笑死半哟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的签餐。 我是一名探鬼主播寓涨,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氯檐!你這毒婦竟也來了戒良?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冠摄,失蹤者是張志新(化名)和其女友劉穎糯崎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耗拓,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拇颅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年奏司,在試婚紗的時候發(fā)現(xiàn)自己被綠了乔询。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡韵洋,死狀恐怖竿刁,靈堂內(nèi)的尸體忽然破棺而出黄锤,到底是詐尸還是另有隱情,我是刑警寧澤食拜,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布鸵熟,位于F島的核電站,受9級特大地震影響负甸,放射性物質(zhì)發(fā)生泄漏流强。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一呻待、第九天 我趴在偏房一處隱蔽的房頂上張望打月。 院中可真熱鬧,春花似錦蚕捉、人聲如沸奏篙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秘通。三九已至,卻和暖如春敛熬,著一層夾襖步出監(jiān)牢的瞬間肺稀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工荸型, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盹靴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓瑞妇,卻偏偏與公主長得像稿静,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辕狰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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