分佈式-CAP與ACID原則

        CAP、ACID對於深入理解分佈式環境下技術方案設計選型有重要的指導作用,所以這裏做了下整理。

1.  CAP原則

       1.1 定義

       CAP是“Consistency,Avalilability, Partition Tolerance”的一種簡稱,其內容分別是:

       (1)強一致性:即在分佈式系統中的同一數據多副本情形下,對於數據的更新操作體現出的效果與只有單份數據是一樣的。

       (2)可用性:客戶端在任何時刻對大規模數據系統的讀/寫操作都應該保證在限定延時內完成;

       (3)分區容忍性:在大規模分佈式數據系統中,網絡分區現象,即分區間的機器無法進行網絡通信的情況是必然發生的,所以系統應該能夠在這種情況下仍然繼續工作。

       對於一個大規模分佈式數據系統來說,CAP三要素是不可兼得的,同一系統至多隻能實現其中的兩個,而必須放寬第3個要素來保證其他兩個要素被滿足。一般在網絡環境下,運行環境出現網絡分區是不可避免的,所以系統必須具備分區容忍性(P)特性,所以在一般在這種場景下設計大規模分佈式系統時,往往在AP和CP中進行權衡和選擇。

       1.2 爲什麼分佈式環境下CAP三者不可兼得呢?

       由於上面已經提到對於分佈式環境下,P是必須要有的,所以該問題可以轉化爲:如果P已經得到,那麼C和A是否可以兼得?可以分爲兩種情況來進行推演:

       (1) 如果在這個分佈式系統中數據沒有副本,那麼系統必然滿足強一致性條件,因爲只有獨本數據,不會出現數據不一致的問題,此時C和P都具備。但是如果某些服務

器宕機,那必然會導致某些數據是不能訪問的,那A就不符合了。

        (2) 如果在這個分佈式系統中數據是有副本的,那麼如果某些服務器宕機時,系統還是可以提供服務的,即符合A。但是很難保證數據的一致性,因爲宕機的時候,可能

有些數據還沒有拷貝到副本中,那麼副本中提供的數據就不準確了。

        所以一般情況下,會根據具體業務來側重於C或者A,對於一致性要求比較高的業務,那麼對訪問延遲時間要求就會低點;對於訪問延時有要求的業務,那麼對於數據一致性要求就會低點。一致性模型主要可以分爲下面幾類:強一致性、弱一致性、最終一致性、因果一致性、讀你所寫一致性、會話一致性、單調讀一致性、以及單調寫一致性,所以需要根據不同的業務選擇合適的一致性模型。

2. ACID原則

         ACID是關係型數據庫系統採納的原則,其代表的含義分別是:

         (1) 原子性(Atomicity):是指一個事務要麼全部執行,要麼完全不執行。

         (2) 一致性(Consistency): 事務在開始和結束時,應該始終滿足一致性約束。比如系統要求A+B=100,那麼事務如果改變了A的數值,則B的數值也要相應修改來滿足這樣一致性要求;與CAP中的C代表的含義是不同的。

         (3) 事務獨立(Isolation):如果有多個事務同時執行,彼此之間不需要知曉對方的存在,而且執行時互不影響,事務之間需要序列化執行,有時間順序。

         (4) 持久性(Durability):事務的持久性是指事務運行成功以後,對系統狀態的更新是永久的,不會無緣無故回滾撤銷。

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