NoSQL 中的 CAP

1、CAP概述

CAP理論 是由 EricBrewer 教授 提出的,在設計和部署分佈式應用的時候,存在三個核心的系統需求,這個三個需求之間存在一定的特殊關係。三個需求如下:

C: Consistency (一致性)
A: Availability (可用性)
P: Partition Tolerance (分區容錯性)
CAP理論的核心是:一個分佈式系統不可能同時很好的滿足 一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的滿足兩個。

因此,根據CAP原理,將NoSQL數據庫分成滿足CA原則、CP原則和AP原則 三大類:
CA - 單點集羣,滿足一致性,可用性的系統,通常在可擴展性上不太強大。 (傳統數據庫)
CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高。 (Redis、MongoDB)
AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。 (大多數網站架構的選擇)

2、CAP定義

(1)、Consistency 一致性

一致性又稱爲原子性或者事務性。表示一個事務的操作是不可分割的,要不然這個事務完成,要不然這個事務不完成,不會出現這個事務完成了一半這樣的情況。這種事務的原子性使得數據具有一致性。

我們通常情況下在數據庫中存在的髒數據就屬於數據沒有具有一致性的表現。而在分佈式系統中,經常出現的一個數據不具有一致性的情況是讀寫數據時缺乏一致性。比如兩個節點數據冗餘,第一個節點有一個寫操作,數據更新以後沒有有效的使得第二個節點更新數據,在讀取第二個節點的時候就會出現不一致的問題出現。

傳統的ACID數據庫是很少存在一致性問題的,因爲數據的單點原因,數據的存取又具有良好的事務性,不會出現讀寫的不一致。

(2)、Availability 可用性

好的可用性主要是指系統能夠很好的爲用戶服務,不出現用戶操作失敗或者訪問超時等用戶體驗不好的情況。可用性通常情況下可用性和分佈式數據冗餘,負載均衡等有着很大的關聯。

(3)、Partition Tolerance 分區容錯性

分區容錯性和擴展性緊密相關。在分佈式應用中,可能因爲一些分佈式的原因導致系統無法正常運轉。好的分區容錯性要求能夠使應用雖然是一個分佈式系統,而看上去卻好像是在一個可以運轉正常的整體。比如現在的分佈式系統中有某一個或者幾個機器宕掉了,其他剩下的機器還能夠正常運轉滿足系統需求,這樣就具有好的分區容錯性。

3、CAP理論的意義

隨着互聯網應用的飛速發展,數據量與日俱增,傳統的ACID數據庫已經不能滿足如此大的海量數據存儲了。這個時候需要設計出好的分佈式數據存儲方式。而這些分佈式數據存儲方式受到CAP理論的約束,不可能達到高一致性,高可用性,高分區容錯性的完美設計。所以我們在設計的時候要懂得取捨,重點關注對應用需求來說比較重要的,而放棄不重要的,在CAP這三者之間進行取捨,設計出貼合應用的存儲方案。

相關文章鏈接

鏈接1: link.
鏈接2: link.

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