系列文章 -> 分佈式理論html
如前文中說CAP定理是三個單詞的縮寫,BASE也是同樣,是由Basically Available(基本可用),Soft state(軟狀態),和 Eventually consistent(最終一致性)三個短語的縮寫。數據庫
CAP 理論代表,對於一個分佈式系統而言,它是沒法同時知足 Consistency(強一致性)、Availability(可用性) 和 Partition tolerance(分區容忍性) 這三個條件的,最多隻能知足其中兩個。segmentfault
對於互聯網來講,因爲網絡環境是不可信的,因此分區容錯性(P)必須知足網絡
如今只能在一致性和可用性之間作選擇,大部分狀況下,你們都會選擇犧牲一部分的一致性來保證可用性,由於你不返回給用戶數據,這體驗也太差了,寧肯拒絕服務也不能說能訪問卻沒有數據,固然,嚴格場景下,好比支付場景,強一致性是必需要知足,這另說。併發
好了,咱們只能放棄一致性,可是咱們真這樣作了,將一致性放棄了,如今這個系統返回的數據你敢信嗎?沒有一致性,系統中的數據也就從根本上變得不可信了,那這數據拿來有什麼用,那這個系統也就沒有任何價值,根本沒用。分佈式
如上所述,因爲咱們三者都沒法拋棄,但CAP定理限制了咱們三者沒法同時知足,這種狀況,咱們會選擇儘可能靠近CAP定理,即儘可能讓C、A、P都知足,在此大勢所趨下,出現了BASE定理。post
強一致性(Strong consistency)沒法獲得保障時(分區容錯和可用性知足系統),咱們能夠根據業務自身的特色,採用適當的方式來達到最終一致性(Eventual consistency)網站
基本可用是相對於正常的系統來講的,常見以下狀況搜索引擎
軟狀態是相對原子性來講的atom
弱一致性
和強一致性相對
系統並不保證連續進程或者線程的訪問都會返回最新的更新過的值。系統在數據寫入成功以後, 不承諾當即能夠讀到最新寫入的值,也不會具體的承諾多久以後能夠讀到。但會 儘量保證在某個時間級別(好比秒級別)以後,可讓數據達到一致性狀態。最終一致性是弱一致性的特定形式
亞馬遜CTO Werner Vogels在於2008年發表的一篇文章中對最終一致性進行了很是詳細的介紹
【英文】All Things Distributed
【譯】最終一致性
官方解釋
系統可以保證在沒有其餘新的更新操做的狀況下,數據最終必定可以達到一致的狀態,所以全部客戶端對系統的數據訪問最終都可以獲取到最新的值。
對於軟狀態,咱們容許中間狀態存在,但不可能一直是中間狀態,必需要有個期限,系統保證在沒有後續更新的前提下,在這個期限後,系統最終返回上一次更新操做的值,從而達到數據的最終一致性,這個容忍期限(不一致窗口的時間)取決於通訊延遲,系統負載,數據複製方案設計,複製副本個數等,DNS是一個典型的最終一致性系統。
若是節點A在更新完某個數據後通知了節點B,那麼節點B的訪問修改操做都是基於A更新後的值,同時,和節點A沒有因果關係的C的數據訪問則沒有這樣的限制
因果一致性的特定形式,一個節點A總能夠讀到本身更新的數據
訪問存儲系統同一個有效的會話,系統應保證該進程讀己之所寫
一個節點從系統中讀取一個特定值以後,那麼該節點從系統中不會讀取到該值之前的任何值
一個系統要可以保證來自同一個節點的寫操做被順序執行(保證寫操做串行化)
實踐中,每每5個系統進行排列組合,固然,不僅是分佈式系統使用最終一致性,關係型數據庫在某個功能上,也是使用最終一致性的,好比備份,數據庫的複製過程是須要時間的,這個複製過程當中,業務讀取到的值就是舊的。固然,最終仍是達成了數據一致性。這也算是一個最終一致性的經典案例
參考ACID維基百科
ACID,是指數據庫管理系統(DBMS)在寫入或更新資料的過程當中,爲保證事務(transaction)是正確可靠的,所必須具有的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)原子性:一個事務(transaction)中的全部操做,要麼所有完成,要麼所有不完成,不會結束在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。
一致性:在事務開始以前和事務結束之後,數據庫的完整性沒有被破壞。這表示寫入的資料必須徹底符合全部的預設規則,這包含資料的精確度、串聯性以及後續數據庫能夠自發性地完成預約的工做。
隔離性:數據庫容許多個併發事務同時對齊數據進行讀寫和修改的能力,隔離性能夠防止多個事務併發執行時因爲交叉執行而致使數據的不一致。事務隔離分爲不一樣級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。
持久性:事務處理結束後,對數據的修改就是永久的,即使系統故障也不會丟失。
ACID和BASE表明了兩種截然相反的設計哲學。
總的來講,BASE 理論面向大型高可用可擴展的分佈式系統,與ACID這種強一致性模型不一樣,經常是犧牲強一致性來得到可用性,並容許數據在一段時間是不一致的。雖然二者處於【一致性-可用性】分佈圖的兩級,但二者並非孤立的,對於分佈式系統來講,每每依據業務的不一樣和使用的系統組件不一樣,而須要靈活的調整一致性要求,也所以,經常會組合使用ACID和BASE。
All Things Distributed
[譯]最終一致性
CAP原理、一致性模型、BASE理論和ACID特性
分佈式理論(二) - BASE理論
ACID
從分佈式一致性談到CAP理論、BASE理論