分布式事務

1 分布式事務緣起
一切開始于單機時代铁蹈,人們面臨著兩個困境:單機服務器性能瓶頸 & 單點故障服務不可用/數據丟失。
因此,人們開始對服務器進行擴展马篮,加入更多的機器分擔性能問題,以及解決單點故障怜奖,通常使用兩種手段來擴展數據服務:

  • 數據分區(qū)浑测,系統(tǒng)拆分 & 分庫分表
  • 數據鏡像,備份&冗余
    但是歪玲,這樣一來又產生了新的問題:
    1)容災:結點fail后數據不丟失
    2)多份數據的一致性問題
    3)數據一致性帶來的性能問題
    這就是分布式事務需要解決的問題迁央。
    參考:https://coolshell.cn/articles/10910.html

2 ACID -> CAP -> BASE
ans:(1)ACID 即事務的特征,此處不再詳述

(2)C(Consistency 一致性)A(Availability 可用性)P(Partition tolerance 分區(qū)容錯性)滥崩,對于一個分布式系統(tǒng)岖圈,三者是無法全部滿足的,只能舍一取二钙皮。

  • 如果放棄C(這里指強一致性)蜂科,那么系統(tǒng)無法保證數據 實時 一致,雖然在時間窗口之后數據將最終到達一致短条,但時間窗口內數據是不一致的导匣。
  • 如果放棄A(可用性),那么當遇到故障時茸时,服務的質量會下降甚至無法提供正常服務
  • 如果放棄P(容錯)贡定,那么就是放棄了分布式,放棄了系統(tǒng)擴展性可都。
    一般來說P是絕不能放棄的缓待,因此一般在C or A 中權衡(看場景)蚓耽。

(3)BASE 是基于CAP演化而來,核心理念是即使無法做到強一致性旋炒,每個應用也可以根據自身特點步悠,采用適當的方式來使系統(tǒng)到達最終一致性。

  • BA(Basically Available 基本可用)瘫镇,出現(xiàn)故障時鼎兽,允許損失部分可用性,但不等于系統(tǒng)完全不可用汇四。例如:出現(xiàn)故障時,響應時間增加踢涌;或 流量高峰時屏蔽部分功能以保證系統(tǒng)穩(wěn)定(服務降級)
  • S (Soft state 軟狀態(tài))通孽,允許系統(tǒng)在不同結點的數據副本之間進行數據同步的過程存在時延。
  • E(Eventually consistent 最終一致性)睁壁,強調系統(tǒng)保證最終數據達到一致背苦,不需要保證實時的強一致性。
    參考:https://segmentfault.com/a/1190000004468442

3 關于ZK
ZK 的目標是保證 CP潘明,即保證 一致性 & 容錯行剂,放棄了可用性。
這一點體現(xiàn)在:leader選舉時钳降,集群不可用厚宰,如果網絡不穩(wěn)定或延遲較高,這個時間可能比預期更久遂填。
ZK 作為服務注冊中心的應用很多铲觉,但也許不是那么合適:
(1)ZK 的 CP 導致服務可能無法獲得其他服務的信息,此時如果能返回舊數據吓坚,比什么都不返回要強一些撵幽,即 AP 可能更合適。
(2)偶發(fā)的網絡延遲礁击,可能使 ZK 的心跳檢測失敗盐杂,使 ZK 誤以為服務不可用將其淘汰,這種情況如果發(fā)生在網絡割接時尤其危險哆窿。

4 分布式事務實現(xiàn)
4.1 2pc & 3pc
ans:(1)2pc链烈,Tow-Phase Commit 兩階段提交


2pc

2pc 的問題在于,在第二階段挚躯,如果某個參與者收不到協(xié)調器的commit/fallback指令测垛,那么它將一直處于“狀態(tài)未知”階段,完全不知道該怎么辦秧均。要么一直等待協(xié)調者食侮,要么重發(fā)第一階段的反饋号涯,資源不能得到釋放。
(2)3pc锯七,Three-Phase Commit 三階段提交


3pc

對于2pc链快,協(xié)調者對事務完成至關重要,一旦協(xié)調者異常那么可能block整個事務眉尸。因此衍生出了 3pc域蜗。3pc的關鍵點在于:
  • canCommit 階段不會鎖定資源,基于一個認知:如果第一階段所有參與者ok噪猾,那么第二階段有很大概率認為能夠提交成功霉祸,這樣第一階段的詢問能夠降低第二階段可能回滾的概率。
  • preCommit階段袱蜡,即使協(xié)調者故障丝蹭,參與者也不會等在原地,超時后將自動commit坪蚁,避免了 2pc 的問題奔穿。但這也存在一個隱患:preCommit 階段一旦不能正常通信,而參與者的默認操作是commit敏晤,如果數據需要rollback 那么會出現(xiàn)數據不一致的情況贱田。
    2pc 3pc歸根到底是選擇系統(tǒng)可用性還是選擇系統(tǒng)一致性(CAP理論中的抉擇問題)
    2pc 一致性好、可用性較低嘴脾,3pc 一致性較低男摧、可用性高
    參考:https://segmentfault.com/a/1190000004474543
    https://coolshell.cn/articles/10910.html
    http://www.cnblogs.com/hubaoxi/p/6867203.html

4.2 TCC
ans: TCC(Try-Confirm-Cancel)又稱補償事務。其核心思想是:"針對每個操作都要注冊一個與其對應的確認和補償(撤銷操作)"译打。它分為三個操作:

  • Try階段:主要是對業(yè)務系統(tǒng)做檢測及資源預留
  • Confirm階段:確認執(zhí)行業(yè)務操作
  • Cancel階段:取消執(zhí)行業(yè)務操作
    TCC 本質是一個應用層面的2PC彩倚,優(yōu)點在于可以自己定義數據庫操作的粒度,使得降低鎖沖突扶平、提高吞吐成為可能帆离;缺點在于,對應用入侵性非常強结澄,業(yè)務邏輯的每個分枝都需要實現(xiàn) try/confirm/cancel 三個操作哥谷,confirm/cancel 必須實現(xiàn)冪等。
    TCC

    參考:https://www.cnblogs.com/wudimanong/p/10340948.html
    https://juejin.im/post/5bf201f7f265da610f63528a

4.3 本地消息表(eBay 事件隊列方案——保證最終一致性—異步確保)
ans:核心思想是將分布式事務拆分成本地事務進行處理麻献。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鱼冀,一起剝皮案震驚了整個濱河市报破,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌千绪,老刑警劉巖充易,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荸型,居然都是意外死亡盹靴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門帆疟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹉究,“玉大人宇立,你說我怎么就攤上這事踪宠。” “怎么了妈嘹?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵柳琢,是天一觀的道長。 經常有香客問我润脸,道長柬脸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任毙驯,我火速辦了婚禮倒堕,結果婚禮上,老公的妹妹穿的比我還像新娘爆价。我一直安慰自己垦巴,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布铭段。 她就那樣靜靜地躺著骤宣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪序愚。 梳的紋絲不亂的頭發(fā)上憔披,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音,去河邊找鬼芬膝。 笑死望门,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蔗候。 我是一名探鬼主播怒允,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锈遥!你這毒婦竟也來了纫事?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤所灸,失蹤者是張志新(化名)和其女友劉穎丽惶,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體爬立,經...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡钾唬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侠驯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡秆。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吟策,靈堂內的尸體忽然破棺而出儒士,到底是詐尸還是另有隱情,我是刑警寧澤檩坚,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布着撩,位于F島的核電站,受9級特大地震影響匾委,放射性物質發(fā)生泄漏拖叙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一赂乐、第九天 我趴在偏房一處隱蔽的房頂上張望薯鳍。 院中可真熱鬧,春花似錦挨措、人聲如沸挖滤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壶辜。三九已至,卻和暖如春担租,著一層夾襖步出監(jiān)牢的瞬間砸民,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岭参,地道東北人反惕。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像演侯,于是被迫代替她去往敵國和親姿染。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354