CAP原理指的是,在分布式系統中這三個要素最多只能同時實現兩點,不可能三者兼顧。因此在進行分布式架構設計時,必須做出取舍。而對于分布式數據系統,分區容忍性是基本要求,否則就失去了價值。因此設計分布式數據系統,就是在一致性和可用性之間取一個平衡。對于大多數Web應用,其實并不需要強一致性,因此犧牲一致性而換取高可用性,是目前多數分布式數據庫產品的方向。
1. 一致性(Consistency):數據在多個副本之間是否能夠保持一致的特性。(當一個系統在一致狀態下更新后,應保持系統中所有數據仍處于一致的狀態)
2. 可用性(Availability):系統提供的服務必須一直處于可用狀態,對每一個操作的請求必須在有限時間內返回結果。
3. 分區容錯性(Tolerance of network Partition):分布式系統在遇到網絡分區故障時,仍然需要保證對外提供一致性和可用性的服務,除非整個網絡都發生故障。
為什么只能同時滿足兩個?
例如,服務器中原本存儲的value=0,當客戶端A修改value=1時,為了保證數據的一致性,要寫到3個服務器中,當服務器C故障時,數據無法寫入服務器C,則導致了此時服務器A、B和C的value是不一致的。這時候要保證分區容錯性,即當服務器C故障時,仍然能保持良好的一致性和可用性服務,則Consistency和Availability不能同時滿足。為什么呢?
如果滿足了一致性,則客戶端A的寫操作value=1不能成功,這時服務器中所有value=0。
如果滿足可用性,即所有客戶端都可以提交操作并得到返回的結果,則此時允許客戶端A寫入服務器A和B,客戶端C將得到未修改之前的value=0結果。