ACID:關係型數據庫中事務的4個屬性:
Atomicity,原子性,整個事務的全部操做,要麼所有完成,要麼所有不完成,不可能停滯在中間的某個環節。事務在執行過程當中出錯,會回滾到事務開始前的狀態,就像沒發生同樣。
Consistency,一致性,在事務開始以前和結束以後,數據的完整性沒有被破換。
所謂數據完整性,是指數據是正確無誤的,沒有歧義的。若是數據存在自相矛盾,不相容的地方,則其完整性被破壞了。
Isolation,隔離性,兩個事務的執行是互不干擾的,一個事務不能看到其餘事務運行時中間某一時刻的數據。
Durability,持久性,事務結束以後,該事務對數據庫所作的修改會持久地保存在數據庫中,不會被回滾。
CAP理論:分佈式系統中只能同時知足CAP中的兩個:
Consistency,一致性,有兩方面含義。
一方面是指不管什麼時候何地訪問這個數據,都會獲得相同的結果,即保證行爲的一致。好比,A寫入一個數據,那麼下次讀時應該能看到上次寫的數據,不然就出現了不一致。
另外一方面是指數據在分佈式系統中,不存在歧義,即保證數據的一致。好比,數據的多個副本都是相同的,不然就出現了歧義。
Availability,可用性,是指分佈式系統時刻可以提供服務,不存在暫停服務的時刻。
Partition Tolerance,分區容忍性,是指數據不受分佈式的影響,即便某個節點失效,也不會出現數據錯誤、失效等問題。
能夠看出,同時知足CAP是不可能的。
如想保證一致性和可用性,那麼就不能再分佈式。由於分佈式會破壞一致性或者可用性中的一者,也就是說必定會破壞二者的組合。
如想保證分佈式和一致性,那麼就必須在系統運行的某個時刻,暫停服務,進行數據同步,這就破壞了可用性。
如想保證分佈式和可用性,那麼系統時刻不停機,就沒有機會進行數據同步,也就破壞了一致性。
BASE:分佈式系統與關係型數據庫相對的3個屬性:
Basically Availability,基本可用性,這個稱呼可能有些歧義,應該翻譯爲「主要可用性」,實際上BASE的目的就是捨去Consistency,而獲得Availability,所以,這裏應理解爲一切以可用性爲主。
Soft State,軟狀態,是指系統介於stateful和stateless之間,只維護必定的信息,做爲高速緩存,這些信息實際上能夠經過必定的計算從新獲得(如從周圍節點收集信息彙總),所以即便丟失也無所謂。當系統出錯時,能夠迅速恢復狀態。
Eventually Consistency,最終一致性,爲弱一致性的一種特例,是指系統中多副本之間並非時刻保持一致的(言外之意,不一樣用戶,或者同一用戶的不一樣時刻,可能會讀到不一致的數據),但系統最終會在某個時刻變得一致(如通過數據同步)。
從用戶(Client)看到的角度講:
強一致性(Strong Consistency),保證對a修改以後(事務完成以後),任何用戶立刻就能看到a的最新值。
弱一致性(Weak Consistency),對a修改後,不保證全部用戶都能看到最新值。最終一致性是弱一致性的特例。
從系統內部(Server)的角度講:
一致性的意思是,在分佈式系統中,數據之間必須相容,不存在有歧義的地方。如多個副本的內要容相同,或者有多個版本但版本之間不衝突。又如不能同時存在這三條致使矛盾的記錄:a>b,b>c,a<c。
能夠看出,在系統內部,數據不必定是嚴格一致的,只要保證用戶看到的是一致的便可。
Dynamo提供採用NRW模型來描述一致性:
N 數據副本的總數
R 每次讀取的副本數
W 每次寫的副本數
系統要想向外提供強一致性,則保證R+W>N便可,也即R集合和W集合存在交集,這樣用戶在讀時,至少能獲得一個最新的記錄,進而經過版本號/時間戳/Vector Clock來決定選擇哪個記錄。
不然,若系統只能保證R+W<=N,則它就是弱一致性的。
在同時向多個節點同步數據時,一般採用兩階段提交協議(Two Phase Commit),該協議分兩個階段,第一階段爲準備階段(Prepare),master向全部的slave發送寫請求,slave收到請求後,作必定的操做(如判斷是否有衝突),而後向master回覆是否贊成寫請求,master收到全部回覆後,再判斷是否進行提交。最後,進入提交階段(Commit),master向全部slave發送提交請求,slave收到後正式將修改持久化。
Dynamo在寫W個副本時,採用了改進的2PC,即若是準備階段W中有節點沒有響應,則嘗試W以外的節點,保證收到W個節點的響應,纔會進入提交階段。
HDFS在同步寫多個副本時,也採用了改進的2PC,即先以pipeline的方式,向多個副本寫數據,其過程當中只要有一個節點寫失敗,則整個寫操做失敗,只有當全部節點都成功後(後面的節點會向前級聯反饋),發起者才決定寫成功(向NameNode提交)。