一個分佈式系統不可能同時知足C (Consistency)一致性 ,A(Availiabibity)可用性,P(Partition tolerance)容錯性。 數據庫
不一致分佈式系統的數據都有幾個不等的備份,操做數據的時候,不一樣的節點拿到了不一樣的副本,同時對這些副本進行操做,而且都成功了,這個時候,對這一部分數據就會形成不一致,也就形成了分佈式系統的不一致性。併發
所謂一致性,就是針對某數據的操做進行了更新操做後,全部使用該數據的用戶均可以獲得最新的 值,就能夠稱之爲強一致性。異步
指的就是系統的效率問題,熊不能太慢,必須是在可承受範圍以內的。分佈式
系統發生了故障,保證對外的服務不會間斷,最簡單的就是備份,某個備份壞了以後,須要經過其餘備份獲取正確的數據保證對外服務正確。高併發
三者不可兼得,仔細的推敲一下以上三個方便,就能感受到,這三個方向是相互制約的,莫一方面作到了極致,天然就會影響其餘兩個方面作的很好。性能
例如,若是須要作的強一致性,就必須保證所作的操做對全部的副本都起做用了之後才能對外返回,這麼一來可用性(效率)上天然就會打折扣。若是不考慮容錯性,那麼就不須要對數據搞那麼多的副本,可用性和一致性效率能夠提升,可是就會增長系統掛掉的風險。因此三者是相互矛盾的,在設置或者考慮系統的設計和開發時,須要綜合考慮三者之間所佔的一個權重。spa
爲達成分佈式系統開發,三者互相權衡,相互妥協的一個理論。犧牲高一致性,得到可用性或可靠性:
Basically Available基本可用。支持分區失敗(e.g. sharding碎片劃分數據庫)
Soft state軟狀態 狀態能夠有一段時間不一樣步,異步。
Eventually consistent最終一致,最終數據是一致的就能夠了,而不是時時高一致。設計
犧牲了部分一致性,提升了性能和可靠程度。一致性也能夠是實時一致也能夠是最終一致,這裏犧牲一致性也並不是不要一致性,而是選擇最終一致性,這樣一來,雖說中間狀態可能不一致,可是最終,數據仍是一致的,也不會影響系統最終的準確度。開發
基本可用:再出現個故障或者高併發的時候,犧牲部分體驗,但最終保證可用。同步
弱狀態:容許存在中間狀態
最終一致性:數據副本最終保證數據一致,但不是實時一致,容許副本間同步存在延遲。
BASE理論是CAP定理下相互妥協的一個結果,保證開發可用分佈式系統。