分散式數據系統-CAP理論
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這種量級的公司來說,捨棄可用性只是相對自己的一致性而言。
※滑動窗口演算法在演算法面試題中的應用
※從技術面試官的角度談談簡歷和面試那些事兒
TAG:千鋒JAVA開發學院 |