CAP原理認為,一個提供數據服務的存儲系統無法同時滿足數據一致性、數據可用性,分區耐受性(系統具有網絡分區的伸縮性)這三個條件。
一致性是指更新操作成功后,所有節點在同一時間的數據完全一致。
可用性是指用戶訪問數據時,系統是否能正常響應時間內返回數據。
分區容錯性是指分布式系統在遇到某個節點或網絡分區故障時,仍然能夠對外提供滿足一致性和可用性的服務。
CAP理論基本可以定義為,以上的三個指標不能全部做到,即只能同時滿足CA, CP, AP。
1. 分區容錯性
分布式系統存在多個子系統,每個子系統子網絡可以叫做區。各個節點之間的數據需要同步,子系統之間也需要通信。而分區容錯指的是某個節點出現故障,而整個服務不會受到大的影響。
若一個服務為單節點服務,那么它可以說是滿足CA。
C表示任何時間點讀取的數據都是相同的,保證了一致性。
A表示只要有節點可以用,那么就可以提供服務
由于是單節點服務,那么總是滿足CA的條件。
而在分布式系統中,大多時候,單節點出問題之后,我們是需要保障整個系統都是可以使用的。所以可以認為CAP中的P總是需要成立的。
2. 一致性
一致性指的是分布式系統中所有節點在同一時間訪問時,返回數據完全一致。
從客戶端看,就是并發訪問時獲取數據的一致性。
服務端來看,就是數據節點之間的同步問題,即節點之間通過通信保持數據的實時更新。
也有對一致性分成強,弱以及最終一致性三類。
強一致性 要求數據更新后,對于其他節點,必須立馬同步,并可見。
弱一致性 可以允許在數據更新后,部分節點不能訪問到最新的數據。
最終一致性 要求一段時間內不能訪問最新數據,但是一段時間后,分布式系統的所有數據需要統一
3. 可用性
相對來說,可用性比較容易理解,就是說任何時候,我們都可以從系統中獲取數據。系統可以提供正常的用戶服務。不會出現操作失敗,訪問超時等情況
CA without P
如果不要求 Partition Tolerance,即不允許分區,則強一致性和可用性是可以保證的。其實分區是始終存在的問題,因此 CA 的分布式系統更多的是允許分區后各子系統依然保持 CA。
CP without A
如果不要求可用性,相當于每個請求都需要在各服務器之間強一致,而分區容錯性會導致同步時間無限延長,如此 CP 也是可以保證的。很多傳統的數據庫分布式事務都屬于這種模式。
AP without C
如果要可用性高并允許分區,則需放棄一致性。一旦分區發生,節點之間可能會失去聯系,為了實現高可用,每個節點只能用本地數據提供服務,而這樣會導致全局數據的不一致性。
為什么沒辦法同時達到CAP呢?
CAP是沒辦法同時達到的,要么是CP,要么是CA,要么是AP,是不可能存在CAP的,因為如下:假如分布式情況下數據庫1和數據庫2,用戶上傳一張圖片必須同時同步成功才滿足一致性(Consistency),并且用戶可以看到信息也滿足了(可用性),當突發場景數據庫1和數據庫2突然間因為網絡斷電原因,某一個直接宕機,那還有另外一個數據庫可以提供分區容錯性,但是這時候已經無法滿足一致性了,所以這種沒辦法實現。
新聞熱點
疑難解答