1. 程式人生 > >分散式 基本理論 CAP 2

分散式 基本理論 CAP 2

關於P

P, 即 Partition字面意思是網路分割槽,其實 包括了 各種網路問題, 我們要把它理解 一個 廣義的 分割槽問題。

P 涉及到了 時間, 這麼說吧, 出現了分割槽, 那就是節點之間 “長久的” 不能通訊, 出現 延遲、超時 就是 “暫時的” 不能通訊 —— 到底多久才算是 超時呢? 所以說, 我們 通常需要 對 分散式系統 設定個 響應的 時間期限。(—— 其實這就增加的CAP 理解的難度)

P 是指系統必須要容易分割槽, 也就是 通常所謂的 分割槽容忍性, 也就是 允許失敗的 節點個數。 從量化的理論來講, 允許失敗的 節點個數越多, 分割槽容忍性越好, P 值越高。

P 的理解 非常有技巧。P 恰恰 說明的是 可以允許 分割槽存在或 節點失敗。 但是, 其實, 我們 容不容忍 都是TM 沒有選擇餘地的!

 

出現分割槽問題的時候,可能出現2個分割槽, 也可能3個, 那麼如何選擇其中一個呢? 誰來做這個決定呢? 首先, 肯定是系統內部來決定的, 通常, 我們需要在分散式系統中設定一個 master, master 又是怎麼來的呢? 是選舉出來的! 如果出現了分割槽, 那 master 還是master 嗎? 不是了, 我們需要重新選舉? 選舉又是如何進行的呢?  我們需要考慮 各種選舉演算法。

 

關於A、C

C和A之間選擇不是0和1的選擇,而是一種連續式選擇
從上面的例子看,好像選擇C就必須放棄A,反之亦然。但是其實所有這些都有中間方案。C和A的定義也有各種灰度定義。 比如C的定義,最嚴格的定義就是一個分散式事務結束後,所有的副本在任何時刻都是一致的。但是這個定義可以放寬。時間不在是同時,而是一段時間,給一個時間視窗。或者一階段內可以不一致,但最終變成一致的。比如上面的例子中,在發生分割槽的時候,可以暫時不一致,等到通訊問題解決了,開始恢復一致性。 而對於A的定義來說,也是有各種層次,在發生分割槽的時候,可以選擇限制部分操作,同時提供一個些事後比較好恢復的操作。

  一種經典的系統設計模式

因為在分散式系統中,基本是沒有辦法選擇不要分割槽的,所以為了保證系統的可用性,和一致性的博弈,經典的設計模式就是分情況對待。當不發生分割槽的時候保證完美的CA,到出現了分割槽,進入分割槽模式,等待分割槽恢復後,恢復系統,最終達到一致性後,再次進入完美CA狀態。

--------------------- 
作者:miniDan__ 
來源:CSDN 
原文:https://blog.csdn.net/physicsdandan/article/details/52118565 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

1 檢測到分割槽開始
2 明確進入分割槽模式,限制某些操作,並且
3 當通訊恢復後啟動分割槽恢復過程
最後一步的目的是恢復一致性,以及補償在系統分割槽期間程式產生的錯誤。

當系統進入到分割槽模式,它有兩種可行的策略。其一是限制部分操作,因此會削弱可用性。其二是額外記錄一些有利於後面分割槽恢復的操作資訊。系統可通過持續嘗試恢復通訊來察覺分割槽何時結束。 

 

小結

CAP 還是有一定的複雜性的,因為它是基礎的理論, 當我們把各種問題考慮進去之後。情況變得複雜起來。

總之,CAP是非常騷的 理論, 非常扯淡、折騰人的理論。找到一些證據:

就是一個很混亂且缺乏解釋力的理論,那麼較勁幹啥。

理論的原意大概是說你不可能設計一個系統在保證出現一些網路交換器故障導致一些批網路節點無法和另一批節點通訊的情況下P依然保證資料一致性C,且保證服務可用A。

這理論聽聽就行了。如果你是個這個領域的新人,學會大規模系統裡需要考慮交換機和路由器壞掉的情況就可以了。

 

參考:

https://www.zhihu.com/question/54105974?from=profile_question_card 

https://blog.csdn.net/physicsdandan/article/details/52118565