CAP定理,指的是在一個分佈式系統中,一致性、可用性、分區容錯性,三者不可得兼。html
指全部節點訪問同一份最新的數據副本。通俗理解就是,在分佈式系統中,全部的數據副本,在同一時刻值相同。網絡
每次請求都能獲取到相應,能夠對外提供服務併發
因爲分佈式系統的一個節點發生網絡延遲或故障,在規定時限內系統不能作到數據一致性,就發生了分區(系統中有多個數據不一致的節點)。此時,必須在一致性和可用性之間作出選擇。分佈式
例如:分佈式系統中有兩個節點,一個節點發生了網絡延遲或故障。若是爲了保證節點數據一致性,那麼就必須放棄可用性,就是兩個節點都再也不提供服務;若是爲了保證可用性,就是說仍要提供服務,那麼就必須放棄一致性,沒有發生網絡延遲或故障的節點仍提供服務。高併發
在分佈式系統中,發生網絡延遲或故障是不可避免的,也就是分區容錯性是避免不掉的,而發生了分區後,只能在一致性和分區容錯性自建選擇,那麼咱們只有兩種選擇:.net
不管選擇CP,仍是選擇AP,都是根據業務需求來選擇,沒有所謂的誰比誰好。設計
也就是說,咱們更看重數據的一致性,適用於對數據一致性有嚴格要求的業務場景,例如金融,12306售票。htm
此時更看重可用性,放棄一致性(仍是要追求最終一致性的,不一致的數據沒有意義),也是各大互聯網公司一直宣稱服務不可用時間有多少秒,強調的就是可用性。blog
BASE理論是:ip
其思想是,在分佈式系統,選擇可用性和分區容錯性時,沒法作到一致性,能夠採用適當的方案達到最終一致性,在保證可用性的同時,數據最終也能達到一致。
例如,在電商的促銷活動中,是爲了追求高可用(相對於CAP中的可用,高可用偏重於能夠處理高併發,也是就高QPS),放棄一致性,選擇最終一致性(下單成功後,不會立馬收到短信,延遲一段時間仍是會收到短信。記得某平臺,在購物節期間,都再也不提供發短信服務了)。爲何要追求可用,甚至是高可用呢?在促銷活動中,1件商品,可能有1百萬我的同時在搶,那麼就是說,當一我的進入搶購時(要判斷這我的是否是知足參加的條件等),剩餘的都在等待,甚至於拒絕你搶購,對用來講,這是不能容忍的,最真實的案例就是12306上搶票。
指在分佈式系統中,發生故障時,容許損失一部分功能,可是其它功能仍是可用的。
指分佈式系統中,容許存在數據的中間狀態,而中間狀態又不會影響系統的可用性。
分佈式系統中的數據在一段時間後,最終能達到一致性。
CAP定理揭示了在分佈式系統中一致性、可用性和分區容錯性的不能同時知足,而能夠設計知足BASE理論的分佈式系統。
參考文獻