分佈式基礎-CAP理論

CAP概述

    CAP理論:一個分佈式系統最多隻能同時知足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。node

CAP定義

C(一致性)

    一致性指「all nodes see the same data at the same time」,即更新操做成功並返回客戶端完成後,全部節點在同一時間的數據徹底一致,因此,一致性,說的就是數據一致性(CAP中的一致性指的是強一致性)。redis

三種一致性策略

    對於關係型數據庫,要求更新過的數據能被後續的訪問都能看到,這是強一致性。數據庫

    若是能容忍後續的部分或者所有訪問不到,則是弱一致性。網絡

    若是通過一段時間後要求能訪問到更新後的數據,則是最終一致性。分佈式

A(可用性)

    服務一直可用,並且是正常響應時間。spa

P(分區容錯性)

分佈式系統在遇到某節點或網絡分區故障的時候,仍然可以對外提供知足一致性和可用性的服務。code

CAP權衡

    注意:C,A,P三者並非平等的,對於一個分佈式系統來講。P是一個基本要求,CAP三者中,只能在CA二者之間作權衡,而且要想盡辦法提高P。故不考慮CA沒有P的狀況。it

CP

    若是一個分佈式系統不要求強的可用性,即允許系統停機或者長時間無響應的話,就能夠在CAP三者中保障CP而捨棄A。io

    一個保證了CP而一個捨棄了A的分佈式系統,一旦發生網絡故障或者消息丟失等狀況,就要犧牲用戶的體驗,等待全部數據所有一致了以後再讓用戶訪問系統。電商

    如redis、Zookeeper等。

AP

    要高可用並容許分區,則需放棄一致性。一旦網絡問題發生,節點之間可能會失去聯繫。爲了保證高可用,須要在用戶訪問時能夠立刻獲得返回,則每一個節點只能用本地數據提供服務,而這樣會致使全局數據的不一致性。

    如1230六、電商系統等

    可是,放棄了C,只是放棄了強一致性,系統仍會保證最終一致性。好比12306買票,你按照正常流程,付完款以後,過了一段時間,12306提示你出票失敗,這就是最終一致性的表現。

參考

http://www.hollischuang.com/archives/666

相關文章
相關標籤/搜索