當前位置:
首頁 > 知識 > 分散式數據系統-CAP理論

分散式數據系統-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這種量級的公司來說,捨棄可用性只是相對自己的一致性而言。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

滑動窗口演算法在演算法面試題中的應用
從技術面試官的角度談談簡歷和面試那些事兒

TAG:千鋒JAVA開發學院 |