分散式基礎-CAP理論
CAP概述
CAP理論:一個分散式系統最多隻能同時滿足一致性(Consistency)、可用性(Availability)和分割槽容錯性(Partition tolerance)這三項中的兩項。
CAP定義
C(一致性)
一致性指“all nodes see the same data at the same time
”,即更新操作成功並返回客戶端完成後,所有節點在同一時間的資料完全一致,所以,一致性,說的就是資料一致性(CAP中的一致性指的是強一致性)。
三種一致性策略
對於關係型資料庫,要求更新過的資料能被後續的訪問都能看到,這是強一致性。
如果能容忍後續的部分或者全部訪問不到,則是弱一致性。
如果經過一段時間後要求能訪問到更新後的資料,則是最終一致性。
A(可用性)
服務一直可用,而且是正常響應時間。
P(分割槽容錯性)
分散式系統在遇到某節點或網路分割槽故障的時候,仍然能夠對外提供滿足一致性和可用性的服務。
CAP權衡
注意:C,A,P三者並不是平等的,對於一個分散式系統來說。P是一個基本要求,CAP三者中,只能在CA兩者之間做權衡,並且要想盡辦法提升P。故不考慮CA沒有P的情況。
CP
如果一個分散式系統不要求強的可用性,即容許系統停機或者長時間無響應的話,就可以在CAP三者中保障CP而捨棄A。
一個保證了CP而一個捨棄了A的分散式系統,一旦發生網路故障或者訊息丟失等情況,就要犧牲使用者的體驗,等待所有資料全部一致了之後再讓使用者訪問系統。
如redis、Zookeeper等。
AP
要高可用並允許分割槽,則需放棄一致性。一旦網路問題發生,節點之間可能會失去聯絡。為了保證高可用,需要在使用者訪問時可以馬上得到返回,則每個節點只能用本地資料提供服務,而這樣會導致全域性資料的不一致性。
如12306、電商系統等
但是,放棄了C,只是放棄了強一致性,系統仍會保證最終一致性。比如12306買票,你按照正常流程,付完款之後,過了一段時間,12306提示你出票失敗,這就是最終一致性的表現。
參考
http://www.hollischuang.com/archives/666