CAP 和 BASE

集中式與分佈式

大型主機的人才培養成本高;大型主機自己價格昂貴;集中式系統有明顯的單點問題。算法

隨着PC機性能的提高和網絡的普及,大型主機市場份額愈來愈小,不少企業開始放棄大型機,改用小型機和普通PC服務器來搭建分佈式的計算機系統。數據庫

集中式的特色

集中式系統是指由一臺或多臺主計算機組成中心節點,數據集中存儲在這個中心節點中,而且整個系統的全部業務單元都集中部署在中心節點上,系統全部功能均由其集中處理。服務器

其最大的特色就是部署結構簡單。集中式系統每每基於底層性能卓越的大型主機。網絡

分佈式的特色

分佈式系統有以下定義:分佈式系統是一個硬件或軟件組件分佈在不一樣的網絡計算機上,彼此之間僅僅經過消息傳遞進行通訊和協調的系統。併發

通常來講,一個標準的分佈式系統有以下特徵:異步

  1. 分佈性:分佈式系統的多臺計算機都會在空間上隨意分佈,同時,機器的分佈狀況也會隨時變更。
  2. 對等性:分佈式系統中的計算機沒有主從之分,組成分佈式的全部計算機節點都是對等的。 副本:分佈式系統對數據和服務提供的一種冗餘方式,爲了對外提供高可用的服務,每每對數據和服務進行副本處理。
  3. 併發性:統一分佈式系統中的多個節點,可能會併發地操做一些共享的資源
  4. 缺少全局時鐘:進程經過交換消息來進行相互通訊。所以,在分佈式系統中,很難定義兩個事件誰先誰後。
  5. 故障總會發生

分佈式環境的問題

  1. 通訊異常:網絡不可用的風險;即便通訊能正常運行,其延時也會遠大於單機操做。所以消息丟失和消息延遲變得很是廣泛。
  2. 網絡分區:分佈式系統中部分節點間的網絡延時不斷擴大,最終致使只有部分節點之間能正常通訊,另外一些節點則不能,稱之爲網絡分區。
  3. 三態:分佈式系統的每一次請求與響應,存在成功、失敗和超時三態。
  4. 節點故障

分佈式系統設計

中心化設計

分佈式集羣中的節點按照角色分工,分爲領導和幹活的。分佈式

領導一般負責分發任務並監督其餘節點,發現空閒節點則爲其安排任務;若是有節點宕掉,則把任務分給其餘節點。性能

存在如下問題:.net

  1. 領導節點出問題後,整個集羣崩潰。
  2. 領導節點的領導能力問題,沒法領導大規模的節點。

系統能夠採用主備兩個「領導」的設計方案,自動選舉切換領導,來提高系統可用性。設計

去中心化設計

分佈式事務

分佈式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於分佈式系統的不一樣節點之上。一般一個分佈式事務中會涉及對多個數據源或業務系統的操做。

咱們指望實現嚴格知足ACID特性的分佈式事務,極可能出現的狀況就是在系統的可用性和嚴格一致性之間出現衝突,也就是當咱們要求分佈式系統具備嚴格一致性時,極可能就須要犧牲掉系統的可用性。

CAP 定理

CAP理論告訴咱們,一個分佈式系統不可能同時知足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三個基本需求,最多隻能同時知足其中的兩項。

一致性

一致性是指數據在多個副本之間是否可以保持一致的特性,也就是知足ACID的特性。

從客戶端來看,一致性主要指的是多併發訪問時更新過的數據如何獲取的問題。從服務端來看,則是更新如何複製分佈到整個系統,以保證數據最終一致。

強一致性

在分佈式系統中,若是可以作到針對一個數據項的更新操做執行成功後,全部用戶均可以讀取到最新的值,那麼這樣的系統被認爲有強一致性。

可用性

可性質是指系統提供的服務必須一直處於可用狀態,對於用戶的每個操做請求老是能在有限時間內返回結果

有限時間是指用戶的一個操做請求系統必須能在指定時間內返回對應的處理結果,若是超過了這個時間範圍,就被認爲是不可用的。

返回結果是可用性的另外一個重要指標,它要求系統在完成對用戶請求的處理後,返回一個正常的響應結果,也即成功或失敗。

分區容錯性

分區容錯性約束了一個分佈式須要具備以下特性:分佈式系統在遇到任何網絡分區故障的時候,仍然須要可以保證對外提供知足一致性和可用性的服務,除非是整個網絡環境都發生了故障。

網絡分區是指因爲某種緣由,網絡被分紅若干個孤立的區域,而區域之間互不相通。

放棄CAP

一個分佈式系統不可能同時知足一致性、可用性和分區容錯性三個需求。可是,對於一個分佈式系統而言,分區容錯性是一個最基本的要求。由於分佈式系統中的組件必然須要被部署到不一樣節點,所以必然出現子網絡;同時分佈式系統必然會面對網絡的異常狀況,所以分區容錯性是分佈式系統必須面對和解決的問題。所以當發生網絡分區的時候,若是咱們要繼續服務,那麼強一致性和可用性只能2選1。也就是說當網絡分區以後P是前提,決定了P以後纔有C和A的選擇。

放棄A:一旦遇到分區容錯故障,收到影響的服務須要等待必定時間,在等待期間系統沒法對外提供服務。

放棄C:放棄數據的強一致性,保留數據的最終一致性。

CAP理解

一致性等同於可串行化這個術語。系統對一個數據的讀和寫雖然包含多個子步驟而且可能持續一段時間才執行完,可是調用者看來,讀和寫操做都是單個的即時完成的操做。對一個寫操做,若是系統返回了成功,那麼以後到達的讀請求都要督導這個新數據;若是系統返回失敗,那麼全部的讀都不能讀到這個數據。

可用性指的是全部的操做都必需要能終止。

分區容忍性是指系統中會任意的丟失報文。

在實踐過程當中,若是爲了擴展數據容量將數據分佈式存儲,事務的要求又不能下降,則系統可用性會大大下降,通常採用對這些數據不分散存儲的策略。也就是關係型數據庫爲了保證C、A而犧牲P,儘可能避免分佈式事務。

雖然 CAP 中只能保證 CP 或者 AP,可是並非犧牲了一致性C,就必定能同時得到可用性A和分區容忍P,還有一個很重要的因素是延遲。所以,A和P並非犧牲C的藉口,由於即便犧牲了C,也不必定能保證A和P。

CAP 理論說在一個系統中對某個數據不存在一個算法同時知足 Consistency, Availability, Partition-tolerance。注意,這裏邊最重要和最容易被人忽視的是限定詞「對某個數據不存在一個算法」。這就是說在一個系統中,能夠對某些數據作到 CP, 對另外一些數據作到 AP,就算是對同一個數據,調用者能夠指定不一樣的算法,某些算法能夠作到 CP,某些算法能夠作到 AP。

BASE理論

BASE 是 Basically Avaiable 基本可用、Soft state 軟狀態和 Eventually consistent最終一致性三個短語的簡寫。BASE 是對 CAP 中一致性和可用性權衡的結果,其核心思想是及時沒法作到強一致性,可是每一個應用都應該根據自身業務特色,採起適當方式來使系統達到最終一致性。

基本可用

基本可用是指分佈式系統在出現不可預知故障的時候,容許損失部分可用性,可是不等價於系統不可用。

弱狀態

也稱爲軟狀態,是指容許系統中的數據存在中間狀態,並認爲該中間狀態的存在不會影響系統的總體可用性,即容許系統在不一樣節點的數據副本之間進行數據同步的過程存在延時。

最終一致性

最終一致性強調的是系統中全部數據副本,在通過一段時間的同步後,最終能達到一個一致的狀態。也就是須要保證系統最終數據到達一致,而不須要實時保證系統數據的強一致性。

一般經過數據的多份異步複製來實現系統的高可用和數據的最終一致性。

最終一致性存在五種變種。

  1. 因果一致性:若是進程A更新完數據後通知了B,則B以後對該數據的訪問都應該能獲取到進程A更新的最新值,若是進程B要在進程A更新後的值之上更新該數據項,不能丟失更新。與進程A沒有因果關係的進程C訪問沒有這樣的限制。
  2. 讀己所寫:進程A更新數據後,老是能訪問到更新過的最新值。
  3. 會話一致性:系統能保證同一個有效的會話中實現「讀己所寫」。執行更新操做以後,客戶端能在同一會話中始終讀取到該數據的最新值。
  4. 單調讀一致性:一個進程從系統中讀取出一個數據項的值後,系統對該進程後序的任何數據訪問都不該該返回更舊的值。
  5. 單調寫一致性:一個系統須要能保證來自同一進程的寫操做被順序地執行。

BASE 理論面向的是大型高可用可擴展的分佈式系統,不一樣於ACID的強一致性模型,而是提出經過犧牲強一致性來得到可用性,並容許數據在一段時間是不一致的,最終達到一致狀態。

參考資料

相關文章
相關標籤/搜索