分布式系統數據一致性方案

CAP定理是由加州大學伯克利分校Eric Brewer教授提出來的,他指出WEB服務無法同時滿足一下3個屬性:

一致性(Consistency) : 客戶端知道一系列的操作都會同時發生(生效)

可用性(Availability) : 每個操作都必須以可預期的響應結束

分區容錯性(Partition tolerance) : 即使出現單個組件無法可用,操作依然可以完成

目前,CAP(Consistency一致性、Availability可用性、Partition-tolerance分區可容忍性)理論普遍被當作是大數據技術的理論基礎。同時,根據該理論,業界有一種非常流行、非常“專業”的認識,那就是:關系型數據庫設計選擇了C(一致性)與A(可用性),NoSQL數據庫設計則不同。其中,HBase選擇了C(一致性)與P(分區可容忍性),Cassandra選擇了A(可用性)與P(分區可容忍性)。


對數據庫分布式事務有了解的同學一定知道數據庫支持的2PC (兩階段提交),又叫做 XA Transactions。

MySQL從5.5版本開始支持,SQL Server 2005 開始支持,Oracle 7 開始支持。

其中,XA 是一個兩階段提交協議,該協議分為以下兩個階段:

? ? 第一階段:事務協調器要求每個涉及到事務的數據庫預提交(precommit)此操作,并反映是否可以提交。

? ? 第二階段:事務協調器要求每個數據庫提交數據。

其中,如果有任何一個數據庫否決此次提交,那么所有數據庫都會被要求回滾它們在此事務中的那部分信息。


BASE理論

在分布式系統中,我們往往追求的是可用性,它的重要程序比一致性要高,那么如何實現高可用性呢? 前人已經給我們提出來了另外一個理論,就是BASE理論,它是用來對CAP定理進行進一步擴充的。BASE理論指的是:

Basically Available(基本可用)

Soft state(軟狀態)

Eventually consistent(最終一致性)

BASE理論是對CAP中的一致性和可用性進行一個權衡的結果,理論的核心思想就是:我們無法做到強一致,但每個應用都可以根據自身的業務特點,采用適當的方式來使系統達到最終一致性(Eventual consistency)。



分布式事務

一、兩階段提交(2PC)

兩階段提交就是使用XA協議的原理。

兩階段提交協議

兩階段提交協議是協調所有分布式原子事務參與者,并決定提交或取消(回滾)的分布式算法。

1.協議參與者

在兩階段提交協議中,系統一般包含兩類機器(或節點):一類為協調者(coordinator),通常一個系統中只有一個;另一類為事務參與者(participants,cohorts或workers),一般包含多個,在數據存儲系統中可以理解為數據副本的個數。協議中假設每個節點都會記錄寫前日志(write-ahead log)并持久性存儲,即使節點發生故障日志也不會丟失。協議中同時假設節點不會發生永久性故障而且任意兩個節點都可以互相通信。

2.兩個階段的執行

1.請求階段(commit-request phase,或稱表決階段,voting phase)

在請求階段,協調者將通知事務參與者準備提交或取消事務,然后進入表決過程。

在表決過程中,參與者將告知協調者自己的決策:同意(事務參與者本地作業執行成功)或取消(本地作業執行故障)。

2.提交階段(commit phase)

在該階段,協調者將基于第一個階段的投票結果進行決策:提交或取消。

當且僅當所有的參與者同意提交事務協調者才通知所有的參與者提交事務,否則協調者將通知所有的參與者取消事務。

參與者在接收到協調者發來的消息后將執行響應的操作。

(3)兩階段提交的缺點

1.同步阻塞問題。執行過程中,所有參與節點都是事務阻塞型的。

當參與者占有公共資源時,其他第三方節點訪問公共資源不得不處于阻塞狀態。

2.單點故障。由于協調者的重要性,一旦協調者發生故障。

參與者會一直阻塞下去。尤其在第二階段,協調者發生故障,那么所有的參與者還都處于鎖定事務資源的狀態中,而無法繼續完成事務操作。(如果是協調者掛掉,可以重新選舉一個協調者,但是無法解決因為協調者宕機導致的參與者處于阻塞狀態的問題)

3.數據不一致。在二階段提交的階段二中,當協調者向參與者發送commit請求之后,發生了局部網絡異常或者在發送commit請求過程中協調者發生了故障,這回導致只有一部分參與者接受到了commit請求。

而在這部分參與者接到commit請求之后就會執行commit操作。但是其他部分未接到commit請求的機器則無法執行事務提交。于是整個分布式系統便出現了數據部一致性的現象。

(4)兩階段提交無法解決的問題

當協調者出錯,同時參與者也出錯時,兩階段無法保證事務執行的完整性。

考慮協調者再發出commit消息之后宕機,而唯一接收到這條消息的參與者同時也宕機了。

那么即使協調者通過選舉協議產生了新的協調者,這條事務的狀態也是不確定的,沒人知道事務是否被已經提交。




三階段提交協議

三階段提交協議在協調者和參與者中都引入超時機制,并且把兩階段提交協議的第一個階段拆分成了兩步:詢問,然后再鎖資源,最后真正提交。

(1)三個階段的執行

1.CanCommit階段

3PC的CanCommit階段其實和2PC的準備階段很像。

協調者向參與者發送commit請求,參與者如果可以提交就返回Yes響應,否則返回No響應。

2.PreCommit階段

Coordinator根據Cohort的反應情況來決定是否可以繼續事務的PreCommit操作。

根據響應情況,有以下兩種可能。

A.假如Coordinator從所有的Cohort獲得的反饋都是Yes響應,那么就會進行事務的預執行:

發送預提交請求。Coordinator向Cohort發送PreCommit請求,并進入Prepared階段。

事務預提交。Cohort接收到PreCommit請求后,會執行事務操作,并將undo和redo信息記錄到事務日志中。

響應反饋。如果Cohort成功的執行了事務操作,則返回ACK響應,同時開始等待最終指令。

B.假如有任何一個Cohort向Coordinator發送了No響應,或者等待超時之后,Coordinator都沒有接到Cohort的響應,那么就中斷事務:

發送中斷請求。Coordinator向所有Cohort發送abort請求。

中斷事務。Cohort收到來自Coordinator的abort請求之后(或超時之后,仍未收到Cohort的請求),執行事務的中斷。

3.DoCommit階段

該階段進行真正的事務提交,也可以分為以下兩種情況:

執行提交

A.發送提交請求。Coordinator接收到Cohort發送的ACK響應,那么他將從預提交狀態進入到提交狀態。并向所有Cohort發送doCommit請求。

B.事務提交。Cohort接收到doCommit請求之后,執行正式的事務提交。并在完成事務提交之后釋放所有事務資源。

C.響應反饋。事務提交完之后,向Coordinator發送ACK響應。

D.完成事務。Coordinator接收到所有Cohort的ACK響應之后,完成事務。

中斷事務

Coordinator沒有接收到Cohort發送的ACK響應(可能是接受者發送的不是ACK響應,也可能響應超時),那么就會執行中斷事務。

(2)三階段提交協議和兩階段提交協議的不同

對于協調者(Coordinator)和參與者(Cohort)都設置了超時機制(在2PC中,只有協調者擁有超時機制,即如果在一定時間內沒有收到cohort的消息則默認失敗)。

在2PC的準備階段和提交階段之間,插入預提交階段,使3PC擁有CanCommit、PreCommit、DoCommit三個階段。

PreCommit是一個緩沖,保證了在最后提交階段之前各參與節點的狀態是一致的。

(2)三階段提交協議的缺點

如果進入PreCommit后,Coordinator發出的是abort請求,假設只有一個Cohort收到并進行了abort操作,

而其他對于系統狀態未知的Cohort會根據3PC選擇繼續Commit,此時系統狀態發生不一致性。




一些可參看資料

http://www.importnew.com/28438.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • ??在分布式系統中,當一個事務操作需要跨越多個分布式節點時,為了保持事務的ACID特性,就出現了“協調者(Coor...
    Ccwwl閱讀 390評論 0 1
  • 一、分布式數據一致性 在分布式系統中,為了保證數據的高可用,通常會將數據保留多個副本(replica),這些副本會...
    穆秦楚閱讀 251評論 0 0
  • 一致性協議 在分布式系統中,每一個機器節點都能明確知道自己在進行事務操作中的結果是成功還是失敗,但是無法直接獲取到...
    codingBen閱讀 2,490評論 0 4
  • 在上一篇中,我們介紹了為什么使用分布式,為什么會出現分布式數據一致性問題,以及相關分布式理論:CAP/BASE理論...
    先生zeng閱讀 1,888評論 0 2
  • 李麗是個房奴。但凡手里有點錢,就會想方設法的屯房。 人說要想買哪里的房子,不問中介,李麗準清楚。 沒事的時候她總跟...
    漠漠鬼話閱讀 340評論 19 11