分佈式系統不可能同時知足一致性(C:Consistence),可用性(A:Avaliability)和分區容忍性(P:Partition Tolerance),最多隻能同時知足其中的兩項。數據庫
一致性是指多個數據副本是否能保持一致的特性,在一致性的條件下,系統在執行數據更新操做以後可以從一致性狀態轉移到另外一個一致性狀態。網絡
對系統的一個數據更新成功以後,若是全部的用戶都可以讀取到最新的值,該系統就被認爲具備較強的一致性。分佈式
可用性指分佈式系統在面對各類異常時能夠正常提供服務的能力,能夠用系統可用時間佔總時間的比值來衡量,4個9的可用性表示系統99.99%的時間是可用的。blog
在可用性條件下,要求系統提供的服務一直處於可用的狀態,對於用戶的每個操做請求總可以在有限的時間內返回結果。同步
網絡分區指分佈式系統中的節點被劃分爲多個區域,每一個區域內部能夠通訊,可是區域之間沒法通訊。it
在分區容忍性條件下,分佈式系統在遇到任何網絡分區故障的時候,仍然須要能對外提供一致性和可用性的服務,除非是整個網絡環境都發生了故障。io
在分佈式系統中,分區容忍性必不可少,由於須要老是假設網絡是不可靠的,所以,CAP理論其實是要在可用性和一致性之間作權衡。event
可用性和一致性每每是衝突的,很難使它們同時知足。在對個節點之間進行數據同步時,請求
BASE是基本可用(Basically Available),軟狀態(Soft State),和最終一致性(eventually Consistent)三個短語的縮寫。im
BASE理論是對CAP中一致性和可用性權衡的結果,它的核心思想是:即便沒法作到強一致性,但每一個應用均可以根據自身的業務特色,採用適當的方式來讓系統達到最終一致。
指分佈式系統在出現故障的時候,保證核心可用,容許損失部分可用性。
指容許系統中的數據存在中間狀態,並認爲該中間狀態不會影響系統總體可用性,即容許系統不一樣節點中的數據副本之間同步的過程存在延遲。
最終一致性強調的是系統中全部的數據副本,在通過一段時間的同步後,最終能達到一致的狀態。
ACID要求強一致性,一般運用在傳統的數據庫上,而BASE要求最終一致性,經過犧牲強一致性來達到可用性,適合運行在大型分佈式系統中。
在
在實際的分佈式場景中,不一樣業務單元和組件對一致性的要求不一樣,所以ACID和BASE每每會結合在一塊兒使用。