Partition tolerance(分區容錯性):數據庫
大多數分佈式系統都分佈在多個子網絡。每一個子網絡就叫作一個區(partition)。分區容錯的意思是,區間通訊可能失敗。好比,一臺服務器放在中國,另外一臺服務器放在美國,這就是兩個區,它們之間可能沒法通訊。下圖中,G1 和 G2 是兩臺跨區的服務器。G1 向 G2 發送一條消息,G2 可能沒法收到。系統設計的時候,必須考慮到這種狀況。通常來講,分區容錯沒法避免,所以能夠認爲 CAP 的 P 老是成立。CAP 定理告訴咱們,剩下的 C 和 A 沒法同時作到。服務器
Consistency(一致性)網絡
任何一個讀操做老是能讀取到以前完成的寫操做結果,也就是在分佈式環境中,多點的數據是一致的。問題是,用戶有可能向 G2 發起讀操做,因爲 G2 的值沒有發生變化,所以返回的是 v0。G1 和 G2 讀操做的結果不一致,這就不知足一致性了。session
爲了讓 G2 也能變爲 v1,就要在 G1 寫操做的時候,讓 G1 向 G2 發送一條消息,要求 G2 也改爲 v1。架構
Availability(可用性)分佈式
只要收到用戶的請求,服務器就必須給出迴應。用戶能夠向G1或者G2發起讀操做,不論是哪臺服務器,只要收到請求,就必須告訴用戶究竟是V0仍是V1,不然就不知足可用性。 一致性和可用性不可能同時成立,由於通信可能失敗(即出現分區容錯) 若是須要保證G2的一致性,那麼G1必須在寫操做時鎖定G2的讀操做和寫操做。只有數據同步後才從新開放讀寫。鎖按期間G2是不能讀寫的,全部沒有可用性。若是須要保證G2的可用性那麼勢必不能鎖定G2,可是G1和G2的一致性就不成立。因此G2沒法同時作到一致性和可用性。系統設計時只能選擇一個目標, 追求一致性那麼就沒法保證可用性,如過追求可用性就沒法作到一致性。網站
CA:傳統Oracle數據庫。設計
AP:大多數網站架構的選擇。3d
CP:Redis,MongoDB (弱一致性,高可用性和分區容錯性)。blog
Base
Bas理論是對CAP中一致性和可用性權衡的結果,其來源與對大型互聯網分佈式實踐的總結,是基於CAP定理逐步演化而來的。 Base全稱 Basically Available(基本可用),Soft state(軟狀態),和 Eventually consistent(最終一致性)三個短語的縮寫,來自 ebay 的架構師提出。其核心思想是便是沒法作到強一致性(Strong consistency),但每一個應用均可以根據自身的業務特色,採用適當的方式來使系統達到最終的一致性(Eventual consistency)。
Basically Available(基本可用)
Soft state(軟狀態)
Eventually consistent(最終一致性)
最終一致性分爲五種