CAP定理

CAP定理指在設計分佈式系統時,一致性(Consistent)、可用性(Availability)、Partition Tolerance(分區容忍性)三個屬性不可能同時滿足,該定理也叫做布魯爾定理。CAP定理明確了分佈式系統所能實現系統的侷限性,目前互聯網中的很多分佈式系統是基於首要滿足可用性和分區容忍性而設計的。在這裏,不打算提及目前火熱的Cassandra、Voldemort等分佈式存儲系統,而是打算介紹一下CAP定理。

形式化描述
一致性:所有在分佈式系統上的操作有一個總體上的順序,每一個操作看起來就像是在一個單獨的瞬間完成的。這就要求分佈式系統的運行就像是在一個單節點上一樣,在一個時間響應一個操作。

可用性:對於一個可用性的分佈式系統,每一個非故障的節點必須對每一個請求作出響應。也就是,該系統使用的任何算法必須最終終止。當同時要求分區容忍性時,這是一個很強的定義:即使是嚴重的網絡錯誤,每個請求必須終止。

分區容忍性:爲了定義分區容忍性,假定網絡滿足如下條件:網絡是可能丟失從一個節點發往另一個節點的任意消息,當網絡被分區(隔斷)時,所有從一個分區的節點發往另一個分區的消息將會丟失。一致性要求每個響應必須是一致的,即使系統內部的消息沒有被正確地發送。可用性要求從客戶端接收請求的任一節點必須被響應,即使任意的消息可能沒有被正確地發送。

異步網絡
在異步網絡模型中,沒有統一時鐘,所有節點僅根據接收到的消息和本地的計算進行決策。
定理一:
在一個異步網絡模型中,沒有可能實現一個滿足以下屬性的讀寫數據對象:
1、可用性
2、一致性
對於所有對等運算(包括消息會丟失的)
證明:
假設存在一個算法A滿足這些條件:一致性、可用性、分區容忍性。我們構造一次A的執行,包括一個返回非一致結果的請求。假設網絡包含至少兩個節點,那麼它可以被分爲不相關的非空集合:{G,H}。假設所有G和H之間的通訊消息都丟失,這是可能的。如果這時在G上有一個寫操作,接着H上有一個讀操作,那麼讀操作將無法返回早些的寫操作。■
推論一:
在一個異步網絡模型中,沒有可能實現一個滿足以下屬性的讀寫數據對象:
1、可用性,所有對等運算
2、一致性,所有對等運算,但消息不會丟失
證明:
主要問題是在異步網絡模型中一個算法沒有辦法去判斷一個消息是否丟失或者在傳輸通道中被延遲。因此,如果在運算中不會丟失任何消息的前提下存在一個能夠保證一致性的算法,那麼該算法也能夠在所有運算(消息可能丟失)情況下保證一致性。這將與定理一矛盾。■

部分同步網絡
假設一個部分同步的網絡模型,在這裏,所有的節點都有一個時鐘,並且所有的時鐘以一個相同的速度增長。然而,這些時鐘並不是同步的,在相同的時間,它們顯示不同的時間值。事實上,時鐘扮演計時器的角色:處理器可以根據本地狀態變量去衡量流逝了多少時間。一個本地的計時器可以用來調度某事件之後的多長時間間隔進行另一個操作。進一步地,假設每一個消息要麼在給定的時間s內到達,要麼丟失。並且,所有的節點在給定時間t內處理完一個接收到的消息。
定理二:
在一個部分同步網絡模型中,沒有可能實現一個滿足以下屬性的讀寫數據對象:
1、可用性
2、一致性
對於所有對等運算(包括消息會丟失的)
證明:
證明方法與定理一一樣。■
但是在部分同步模型中,類似與異步模型推論一的結論就不存在了,因此推論一的假設基於節點無法判斷一個消息是否丟失。而在部分同步模型中,存在部分同步算法可以在所有消息傳送正常的情況下返回一致性的數據,而僅僅在消息丟失時返回非一致性數據。對於讀或寫請求,節點發送一個消息給另一個節點,如果消息返回了,那麼節點發送請求的數據;如果消息在給定的2s+t時間內沒有返回,那麼該節點斷定消息丟失了,節點就可能返回一個不一致的請求數據。

理論參考價值
在Google使用廉價的PC機搭建了強大的、高可靠的計算和存儲平臺之後,互聯網公司一致性地選擇使用PC集羣支撐全部的業務,這個理論指明瞭實現滿足可用性、分區容忍性的分佈式系統是可行的,並且該分佈式系統在沒有故障的情況下可以提供良好的一致性讀寫。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章