首頁 > 軟體

分散式系統CAP定理中的P原理解析

2023-02-06 06:01:25

引言

之前在看 CAP 定理時抱有很大的疑惑,CAP 定理的定義是指在分散式系統中三者只能滿足其二,也就是存在分散式 CA 系統的。

在網路上查閱了很多關於 CAP 文章,雖然這些文章對於 P 的解釋五花八門,但總結下來這些觀點大多都是指 P 是不可缺少的,也就是說在分散式系統只能是 AP 或者 CP,這種理論與我之前所認識的理論(存在分散式 CA 系統)是衝突的,所以才有了疑惑。

這個定理起源於加州大學柏克萊分校(University of California, Berkeley)的電腦科學家埃裡克·布魯爾在 2000 年的分散式計算原理研討會(PODC)上提出的一個猜想。 在 2002 年,麻省理工學院(MIT)的賽斯·吉爾伯特和南希·林奇發表了布魯爾猜想的證明,使之成為一個定理。

什麼是 CAP 定理(CAP theorem)

在理論電腦科學中,CAP 定理(CAP theorem),又被稱作布魯爾定理(Brewer's theorem),它指出對於一個分散式計算系統來說,不可能同時滿足以下三點:

  • 一致性(Consistency) (等同於所有節點存取同一份最新的資料副本)
  • 可用性(Availability)(每次請求都能獲取到非錯的響應——但是不保證獲取的資料為最新資料)
  • 分割區容錯性(Partition tolerance)(以實際效果而言,分割區相當於對通訊的時限要求。系統如果不能在時限內達成資料一致性,就意味著發生了分割區的情況,必須就當前操作在 C 和 A 之間做出選擇。)

分割區容錯性(Partition tolerance)

理解 CAP 理論的最簡單方式是想象兩個節點分處分割區兩側。允許至少一個節點更新狀態會導致資料不一致,即喪失了 C 性質。如果為了保證資料一致性,將分割區一側的節點設定為不可用,那麼又喪失了 A 性質。除非兩個節點可以互相通訊,才能既保證 C 又保證 A,這又會導致喪失 P 性質。

  • P 指的是分割區容錯性,分割區現象產生後需要容錯,容錯是指在 A 與 C 之間選擇。如果分散式系統沒有分割區現象(沒有出現不一致不可用情況) 本身就沒有分割區 ,既然沒有分割區則就更沒有分割區容錯性 P。
  • 無論我設計的系統是 AP 還是 CP 系統如果沒有出現不一致不可用。 則該系統就處於 CA 狀態
  • P 的體現前提是得有分割區情況存在

文章來源:維基百科 CAP 定理

幾個常用的 CAP 框架對比

框架所屬
EurekaAP
ZookeeperCP
ConsulCP

Eureka

Eureka 保證了可用性,實現最終一致性。

Eureka 所有節點都是平等的所有資料都是相同的,且 Eureka 可以相互交叉註冊。 Eureka client 使用內建輪詢負載均衡器去註冊,有一個檢測間隔時間,如果在一定時間內沒有收到心跳,才會移除該節點註冊資訊;如果使用者端發現當前 Eureka 不可用,會切換到其他的節點,如果所有的 Eureka 都跪了,Eureka client 會使用最後一次資料作為本地快取;所以以上的每種設計都是他不具備一致性的特性。

注意:因為 EurekaAP 的特性和請求間隔同步機制,在服務更新時候一般會手動通過 Eureka 的 api 把當前服務狀態設定為offline,並等待 2 個同步間隔後重新啟動,這樣就能保證服務更新節點對整體系統的影響

Zookeeper

強一致性

Zookeeper 在選舉 leader 時會停止服務,只有成功選舉 leader 成功後才能提供服務,選舉時間較長;內部使用 paxos 選舉投票機制,只有獲取半數以上的投票才能成為 leader,否則重新投票,所以部署的時候最好叢集節點不小於 3 的奇數個(但是誰能保證跪掉後節點也是奇數個呢);Zookeeper 健康檢查一般是使用 tcp 長連結,在內部網路抖動時或者對應節點阻塞時候都會變成不可用,這裡還是比較危險的;

Consul

和 Zookeeper 一樣資料 CP

Consul 註冊時候只有過半的節點都寫入成功才認為註冊成功;leader 掛掉時,重新選舉期間整個 Consul 不可用,保證了強一致性但犧牲了可用性 有很多 blog 說 Consul 屬於 ap,官方已經確認他為 CP 機制。

以上就是分散式系統CAP定理中的P原理解析的詳細內容,更多關於分散式系統CAP的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com