What’s CAP
CAP理論是針對分布式資料系統中,不能同時滿足Consistency、Availability、 Partition Tolerance三個要素,最多隻能滿足其中兩個要素
1.CAP理論關注的資料系統而不是廣義的分布式系統
2.CAP理論不代表我們的整個資料系統隻能滿足其中2個要素,可以更細粒度控制:系統的A功能子產品的資料選擇CP,而B功能子產品的資料選擇AP
1.一緻性(Consistency)
讀取資料都能保證傳回最新寫操作的結果
這是一種理想場景,因為在分布式系統中,網絡之間的資料同步也是需要時間的,是以我們對一緻性的修飾詞應該是“高”一緻性(代表資料同步的速度比較快,延遲時間比較短),而不是絕對的一緻。
2.可用性(Availability)
讀取資料都能保證有限的時間内傳回正常的結果
1.逾時屬于不可用
2.傳回不能解析的錯誤也屬于不可用,例如OOM或者系統錯誤
3.分區容錯性(Partition Tolerance)
即使節點之間因為網絡等原因發生了分區故障,系統也能正常提供服務
網絡分區指因為網絡等原因,部分節點之間的通信發生了異常,導緻這些節點出現了孤立的情況,但是單個節點内部的網絡和狀态都是正常。
Why 2 out of 3?
1.CA:意即舍棄系統的可擴充性,而我們要設計的是分布式存儲系統,是以P是一定不能舍棄的,是以問題就變成了二選一(C和A中選一個),是以CA的選擇在分布式資料系統中是不存在的
1.如果選擇了CA,舍棄了P,這種情況其實就是說不考慮分區容錯性,這種隻能是單點系統,否則如果是多節點系統的話因為網絡問題永遠無法避免,是以分區容錯是永遠不能舍棄的,是以CA在分布式資料系統的設計中是不存在的
2.如果選擇了CA,舍棄了P,假設有N1和N2兩個節點發生了分區的時候,如果要寫入資料,那麼為了保證C,系統需要禁止該寫入或者傳回error,這和我們選擇的CA中的A是相沖突的,是以CA在分布式資料系統的設計中是不存在的
2.AP:讀取資料的時候,為了保證系統的可用性,需要在規定的時間範圍内傳回正确的結果,但是因為舍棄了一緻性,這個時候傳回的資料是舊資料
3.CP:讀取資料的時候,為了保證資料的一緻性,需要等待最需資料同步完畢(可能會等待逾時)或者直接傳回錯誤(而逾時和錯誤都導緻了系統的不可用性)
4.CAP:由2和3得知,保證了A就沒法保證C,反之亦然,是以CAP這種選擇在分布式資料系統中是不存在的
綜上所述,CAP三要素隻能選擇其中兩項,更進一步說是隻能是AP和CP
How to choose?
CP和AP的選擇,其實是在一緻性和可用性之間的一個取舍和權衡
例1:微網誌的消息釋出,我們可以容忍某個明星發送的出軌消息晚點被我們看到,但是我們不太能容忍通路微網誌的時候報錯或者逾時了
例2:以QQ的個人資訊(昵稱、備注等資訊)和賬号密碼資訊(登入密碼等資訊)為例:針對個人資訊,我們可以容忍一定時間内看不到新修改的資料(舍棄一緻性),但是必須要保證使用者可以去修改(選擇了可用性),是以一般會選擇AP。但是針對賬号密碼等登入資訊,為了保證一緻性,我們可以容忍使用者等待一定的時間或者傳回一個錯誤(舍棄了可用性),而不是登入到一個錯誤的賬号密碼上去,是以會選擇CP,當然對QQ這種量級的公司來說,舍棄可用性隻是相對自己的一緻性而言。