什麼是CAP原理,CAP定理是什麼?

時間 2022-03-05 06:05:14

1樓:okex客戶服務

分布式系統不可能提供以下3種保證中的2種以上:

一致性-每個讀取請求都獲得最新的寫入

可用性-每個請求都會獲得成功/失敗的響應

分割槽容差-允許網路丟失從乙個節點傳送到另乙個節點的任意多條訊息,並且仍能正常執行

在今天的網際網路中,分割槽容忍是必需的,因為網路不可靠所以不能放棄,因此必須在一致性和可用性之間做出妥協。因此,分布式系統必須處理一致性和可用性之間的權衡。如果協議100%一致,那麼它肯定不能在某個時刻可用,反之亦然。

這背後的證據是非常優雅和可理解的.

如何正確理解cap理論

2樓:逆長小白菜

常見的理解及分析

目前流行的、對cap理論解釋的情形是從同一資料在網路環境中的多個副本出發的。為了保證資料不會丟失,在企業級的資料管理方案中,一般必須考慮資料的冗餘儲存問題,而這應該是通過在網路上的其他獨立物理儲存節點上保留另乙份、或多份資料副本來實現的(如附圖所示)。因為在同乙個儲存節點上的資料冗餘明顯不能解決單點故障問題,這與通過多節點集群來提供更好的計算可用性的道理是相同的。

附圖 cap理論示意圖

其實,不用做嚴格的證明也可以想見,如附圖的情況,資料在節點a、b、c上保留了三份,如果對節點a上的資料進行了修改,然後再讓客戶端通過網路對該資料進行讀取。那麼,客戶端的讀取操作什麼時候返回呢?

有這樣兩種情況:一種情況是要求節點a、b、c的三份資料完全一致後返回。也就是說,這時從任何乙個網路節點讀取的資料都是一樣的,這就是所謂的強一致性讀。

很明顯,這時資料讀取的latency要高一些(因為要等資料在網路中的複製),同時a、b、c三個節點中任何乙個宕機,都會導致資料不可用。也就是說,要保證強一致性,網路中的副本越多,資料的可用性就越差;

另一種情況是,允許讀操作立即返回,容忍b節點的讀取與a節點的讀取不一致的情況發生。這樣一來,可用性顯然得到了提高,網路中的副本也可以多一些,唯一得不到保證的是資料一致性。當然,對寫操作同樣也有多個節點一致性的情況,在此不再贅述。

可以看出,上述對cap理論的解釋主要是從網路上多個節點之間的讀寫一致性出發考慮問題的。而這一點,對於關係型資料庫意味著什麼呢?當然主要是指通常所說的standby(關於分布式事務,涉及到更多考慮,隨後討論)情況。

對此,在實踐中我們大多已經採取了弱一致性的非同步延時同步方案,以提高可用性。這種情況並不存在關係型資料庫為保證c、a而放棄p的情況;而對海量資料管理的需求,關係型資料庫擴充套件過程中所遇到的效能瓶頸,似乎也並不是cap理論中所描述的那種原因造成的。那麼,上述流行的說法中所描述的關係型資料庫為保證c、a而犧牲p到底是在指什麼呢?

因此,如果根據現有的大多數資料對cap理論的如上解釋,即只將其當作分布式系統中多個資料副本之間的讀寫一致性問題的通用理論對待,那麼就可以得出結論:cap既適用於nosql資料庫,也適用於關係型資料庫。它是nosql資料庫、關係型資料庫,乃至一切分布式系統在設計資料多個副本之間讀寫一致性問題時需要遵循的共同原則。

更深入的**:兩種重要的分布式場景

在本文中我們要說的重點與核心是:關於對cap理論中一致性c的理解,除了上述資料副本之間的讀寫一致性以外,分布式環境中還有兩種非常重要的場景,如果不對它們進行認識與討論,就永遠無法全面地理解cap,當然也就無法根據cap做出正確的解釋。但可惜的是,目前為止卻很少有人提及這兩種場景:

那就是事務與關聯。

先來看看分布式環境中的事務場景。我們知道,在關係型資料庫的事務操作遵循acid原則,其中的一致性c,主要是指乙個事務中相關聯的資料在事務操作結束後是一致的。所謂acid原則,是指在寫入/異動資料的過程中,為保證交易正確可靠所必須具備的四個特性:

即原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)和永續性(durability)。

例如銀行的乙個存款交易事務,將導致交易流水表增加一條記錄。同時,必須導致賬戶表餘額發生變化,這兩個操作必須是乙個事務中全部完成,保證相關資料的一致性。而前文解釋的cap理論中的c是指對乙個資料多個備份的讀寫一致性。

表面上看,這兩者不是一回事,但實際上,卻是本質基本相同的事物:資料請求會等待多個相關資料操作全部完成才返回。對分布式系統來講,這就是我們通常所說的分布式事務問題。

眾所周知,分布式事務一般採用兩階段提交策略來實現,這是乙個非常耗時的複雜過程,會嚴重影響系統效率,在實踐中我們盡量避免使用它。在實踐過程中,如果我們為了擴充套件資料容量將資料分布式儲存,而事務的要求又完全不能降低。那麼,系統的可用性一定會大大降低,在現實中我們一般都採用對這些資料不分散儲存的策略。

當然,我們也可以說,最常使用的關係型資料庫,因為這個原因,擴充套件性(分割槽可容忍性p)受到了限制,這是完全符合cap理論的。但同時我們應該意識到,這對nosql資料庫也是一樣的。如果nosql資料庫也要求嚴格的分布式事務功能,情況並不會比關係型資料庫好多少。

只是在nosql的設計中,我們往往會弱化甚至去除事務的功能,該問題才表現得不那麼明顯而已。

因此,在擴充套件性問題上,如果要說關係型資料庫是為了保證c、a而犧牲p,在盡量避免分布式事務這一點上來看,應該是正確的。也就是說:關係型資料庫應該具有強大的事務功能,如果分割槽擴充套件,可用性就會降低;而nosql資料庫乾脆弱化甚至去除了事務功能,因此,分割槽的可擴充套件性就大大增加了。

再來看看分布式環境中的關聯場景。初看起來,關係型資料庫中常用的多表關聯操作與cap理論就更加不沾邊了。但仔細考慮,也可以用它來解釋資料庫分割槽擴充套件對關聯所帶來的影響。

對乙個資料庫來講,採用了分割槽擴充套件策略來擴充容量,資料分散儲存了,很顯然多表關聯的效能就會下降,因為我們必須在網路上進行大量的資料遷移操作,這與cap理論中資料副本之間的同步操作本質上也是相同的。

因此,如果要保證系統的高可用性,需要同時實現強大的多表關係操作的關係型資料庫在分割槽可擴充套件性上就遇到了極大的限制(即使是那些採用了各種優秀解決方案的mpp架構的關係型資料庫,如teradata,netezza等,其水平可擴充套件性也是遠遠不如nosql資料庫的),而nosql資料庫則乾脆在設計上弱化甚至去除了多表關聯操作。那麼,從這一點上來理解「nosql資料庫是為了保證a與p,而犧牲c」的說法,也是可以講得通的。當然,我們應該理解,關聯問題在很多情況下不是並行處理的優點所在,這在很大程度上與amdahl定律相符合。

所以,從事務與關聯的角度來關係型資料庫的分割槽可擴充套件性為什麼受限的原因是最為清楚的。而nosql資料庫也正是因為弱化,甚至去除了像事務與關聯(全面地講,其實還有索引等特性)等在分布式環境中會嚴重影響系統可用性的功能,才獲得了更好的水平可擴充套件性。

那麼,如果將事務與關聯也納入cap理論中一致性c的範疇的話,問題就很清楚了:關於「關係型資料庫為了保證一致性c與可用性a,而不得不犧牲分割槽可容忍性p」的說法便是正確的了。但關於「nosql選擇了c與p,或者a與p」的說法則是錯誤的,所有的nosql資料庫在設計策略的大方向上都是選擇了a與p(雖然對同一資料多個副本的讀寫一致性問題的設計各有不同),從來沒有完全選擇c與p的情況存在。

結論現在看來,如果理解cap理論只是指多個資料副本之間讀寫一致性的問題,那麼它對關係型資料庫與nosql資料庫來講是完全一樣的,它只是執行在分布式環境中的資料管理設施在設計讀寫一致性問題時需要遵循的乙個原則而已,卻並不是nosql資料庫具有優秀的水平可擴充套件性的真正原因。而如果將cap理論中的一致性c理解為讀寫一致性、事務與關聯操作的綜合,則可以認為關係型資料庫選擇了c與a,而nosql資料庫則全都是選擇了a與p,但並沒有選擇c與p的情況存在。這才是用cap理論來支援nosql資料庫設計正確認識。

其實,這種認識正好與被廣泛認同的nosql的另乙個理論基礎相吻合,即與acid對著幹的base(基本可用性、軟狀態與最終一致性)。因為base的含義正好是指「nosql資料庫設計可以通過犧牲一定的資料一致性和容錯性來換取高效能的保持甚至提高」,即nosql資料庫都應該是犧牲c來換取p,而不是犧牲a。可用性a正好是所有nosql資料庫都普遍追求的特性。

3樓:匿名使用者

這篇cap的部落格寫的不錯,推薦一下cap定理

什麼是射影定理,什麼是射影定理?

直角三角形射影定理 又叫歐幾里德 euclid 定理 直角三角形中,斜邊上的高是兩直角邊在斜邊上射影的比例中項。每一條直角邊是這條直角邊在斜邊上的射影和斜邊的比例中項。什麼是射影定理?初三數學射影定理是什麼我不太明白 請問什麼是射影定理?什麼是射影定理?請問射影定理是什麼?怎樣理解?射影定理是什麼意...

歸結原理是怎樣的,簡述歸結原理證明定理的步驟

常山趙子龍 歸結原理是一種推理規則。從謂詞公式轉化為子句集的過程中看出,在子句集中子句之間是合取關係,其中只要有一個子句不可滿足,則子句集就不可滿足。若一個子句集中包含空子句,則這個子句集一定是不可滿足的。歸結原理就是基於這一認識提出來的。他的原理就是 p q,q r 則 p r,由於 p q 就是...

什麼是韋達定理,什麼是韋達定理?

如方程ax平方 bx c 0且a不等於0且b方 4ac大於等於0該方程有兩個解x1和x2 由韋達定理x1 x2 b a x1乘x2 c a a b c分別為二次項 一次項 常數項的事係數。韋達定理 如果一元二次方程 在複數集中的根是,那麼 法國數學家韋達最早發現代數方程的根與係數之間有這種關係,因此...