分布式理論(一)CAP 理論


分布式理論(一) CAP理論

一.CAP理論前言

      CAP原則又稱為CAP理論,主要思想是在任何一個分布式系統中都無法同時滿足CAP

CConsistency):表示一致性,所有的節點同一時間看到的是相同的數據。

AAvaliablity):表示可用性,不管是否成功,確保一個請求都能接收到響應。

PPartion Tolerance):分區容錯性,系統任意分區后,在網絡故障時,仍能操作。

 

 

如上所述,正如Gilbert認為,一致性其實就是關系型數據庫所講的ACID,一個用戶請求要么是成功,要么是失敗的,不能有處於一個中間狀態;一旦一個事務完成,將來所有事務都必須基於這個完成后的狀態;未完成的事務不會互相影響;一旦一個事務完成,就是持戒的。可用性其實就是對於一個系統而言,所有的請求都應該“成功”並且收到“響應”。分區容錯性其實就是指分布式系統的容錯性,一個節點出現了故障,不影響整個集群的正常使用。

 

二.CAP理論介紹

      如圖,在一個網絡中,N1N2即分布式系統中的兩個節點,他們都共享數據塊V,其中有一個值是為V0

 

 

在滿足一致性的時候,A中的V0應該和B中的V0保持一致的,即V0=V0

在滿足可用性的時候,無論請求訪問A或者是B都應該得到響應。

在滿足分區可用性的時候,AB隨便一個出現宕機或者網絡不通的情況下,都不應該影響整個系統的可用性。

上述描述如果A程序更新V0值為V1,然后在更新B上的副本為V1,當一個請求訪問B時,得到的結果是V1。如下圖所示:

 

 

但是分布式系統中,有些時候這些並不能按照你想的這樣進行,在分布式系統中通常情況下網絡是分區的,如果出現了網絡延遲,導致N1上更新的消息無法到達N2上,即N2上的數據副本依然是V0,當一個請求訪問B時,獲取到的結果是V0,而訪問A時,獲取到的結果是V1,這就導致了在用戶看來是同一個請求,得到的結果是不一樣的。如下圖

 

 

在這個時候,方案的設計者就應該在這里做出兩種選擇:

1)犧牲數據一致性,保證可用性。響應舊的數據V0給用戶。

2)犧牲可用性,保證數據一致性。阻塞等待,直到網絡連接恢復,數據更新操作M完成之后,再給用戶響應最新的數據V1

 

三.CAP之間取舍

接下來我們就談一談CAP,這三者之間是如何取舍的:

1CA without P

如果不要求P(不允許分區),則C(強一致性)和A(可用性)是可以保證的。但其實分區不是你想不想的問題,而是始終會存在,因此CA的系統更多的是允許分區后各子系統依然保持CA

常見模型例子:

單站點數據庫;集群數據庫等,網上找的還有:LDAP協議,xFS文件系統

實現方式:

兩階段提交;緩存驗證協議

2CP without A

如果不要求A(可用),相當於每個請求都需要在節點之間強一致,而P(分區)會導致同步時間無限延長,如此CP也是可以保證的。很多傳統的數據庫分布式事務都屬於這種模式,以及Zookeeper等中間件

常見模型例子:

分布式數據庫;分布式鎖;大部分的協議;Zookeeper

實現方式:

悲觀鎖;少數分區不可用

 

3AP wihtout C

要高可用並允許分區,則需放棄一致性。一旦分區發生,節點之間可能會失去聯系,為了高可用,每個節點只能用本地數據提供服務,而這樣會導致全局數據的不一致性。現在眾多的NoSQL都屬於。

     常見模型例子:

     Web緩存;DNSNoSQL

     實現方式:

     到期或者租賃;解決沖突;樂觀鎖

 

CAP的意義:

在系統架構時,應該根據具體的業務場景來權衡CAP,就拿大多數的門戶網站來說,因為機器數量龐大,部署節點分散,網絡故障時常態,可用性是必須要保證的,所以在設計的時候就會考慮舍棄一些一致性而選擇AP模型。但是對於數據一致性較高的銀行系統來說,可以用於系統臨時不可用,但是數據必須要保持一致來說,選擇CP模型無可厚非。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM