張大胖和CAP定理(分散式系統、可用性、一致性、分割槽容錯性)
轉自:碼農翻身(微訊號:coderising)
計算機界有很多高大上又難於理解的術語,CAP就是其中之一, 什麼一致性(Consistency), 可用性(Availability), 分割槽容錯性(Partition tolerance) 就很難理解了, 再加上CAP定理更是讓人云裡霧裡, 今天我們們試圖通俗的演繹一下。
張大胖在公司奮發圖強,經過多年的努力,終於做到了架構師的位置。
架構師的椅子還沒坐熱,很快就來了一個專案要做架構設計。
老闆把大胖叫來,諄諄教導說: 大胖啊, 資料是我們的寶貴資產,你設計的系統可千萬要保證資料不能丟失啊!
大胖說老闆放心, 這方面我有經驗, 一般來講我們要做資料的冗餘處理, 簡單的來講就是給資料做多個副本來儲存。 我會設計一個分散式系統, 把資料備份到多個機器節點去。
幾天後, 大胖給發了一張圖, 展示了這個分散式系統是怎麼工作的:
資料副本在不同的機器上做冗餘, 中間有資料的複製, 保證資料的同步。
雖然只是兩臺機器, 但是也構成了一個簡單的分散式環境。
老闆雖然不懂技術, 但是看到資料在不同的機器之間有備份,也就放心了。
經過幾個月的開發和測試,可容乃幾千人併發的 順利上線, 但是大家很快就發現: 分散式系統不像單機系統那麼簡單, 由於網路的原因, 或者某個機器的原因很容易導致通訊失敗,或者節點不可用。
有一天, 使用者先訪問了左邊的機器A , 寫入了一條資料, 然後機器A很不幸, 網線被悲催的網管給踢掉了, 這直接導致了兩個嚴重的後果:
-
負載均衡找不著機器A,認為它死翹翹了, 就要把使用者的下一次訪問轉到機器B去。
-
資料複製也找不著機器A , 只好罷工。 使用者剛寫入的資料沒法複製到機器B,機器B上還是老資料
怎麼辦? 雖然這是一次偶然, 把網管臭罵一頓, 插上網線就可以了, 但是誰能保證以後兩個機器的通訊是一致暢通的呢?
組裡的小王說: 我們的機器B 還活著呢, 還能提供服務, 資料複製不到機器B, 不就是少看幾條資料嘛, 無傷大雅,不影響大局, 勉強可用, 插上網線後資料複製就會工作, 一切就會恢復正常。
小王無意中選擇了系統的可用性(Availability,簡稱A), 系統能提供服務就好, 資料不一致可以忍受。
張大胖說: 不行, 老闆說了,我們系統的資料極為重要, 資料如果不一致會帶來嚴重後果,所以機器B上的和這些關鍵資料相關的功能也必須停掉, 必須等到機器A插上網線,資料同步以後才能開工
很明顯, 張大胖遵循老闆指示, 把一致性(Consistency, 簡稱C )放到了首位。
所以問題就很明顯了, 在網路節點之間無法通訊的情況下, 和資料複製相關的功能, 要麼選擇可用性(A) , 要麼選擇一致性©, 不能同時選擇兩者。
大胖仔細思考了一下, 其實這兩種選擇的背後其實隱藏著另外一個事實, 那就是網路節點之間無法通訊的情況下, 節點被隔離,產生了網路分割槽, 整個系統仍然是可以工作的, 大胖給它起了個名: 分割槽容錯性(Partition tolerance, 簡稱P)。
如果選擇了可用性(A) + 分割槽容錯性(P) , 就要放棄一致性(C)。
如果選在一致性(C) + 分割槽容錯性(P) , 就得放棄可用性(A) , 對了, 這種情況下,雖然系統的有些功能是不能使用的, 因為需要等待資料的同步, 但是那些和資料同步無關的功能還是可以訪問的 , 相當於系統做了功能的降級。
既然有AP和CP, 會不會出現僅僅是CA(一致性+可用性)這種組合呢? 就是沒有分割槽容錯性, 只保留可用性和一致性? 仔細想想, 這種情況其實就退化成了單機應用, 沒有意義了。
大胖覺得自己似乎發現了一個規律: 在一個分散式計算機系統中,一致性(C),可用性(A)和分割槽容錯性(P) 這三種保證無法同時得到滿足,最多滿足兩個。
他決定把找個規律叫做CAP定理, 聽起來比較高大上, 顯得自己高深莫測。
如果你實在是搞不懂這CAP, 張大胖會告訴你一個更容易理解的版本: 在一個分散式系統中, 在出現節點之間無法通訊(網路分割槽產生), 你只能選擇 可用性 或者 一致性, 沒法同時選擇他們。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947338/viewspace-2656369/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式系統CAP定理教程分散式
- 深入理解分散式系統:分割槽、複製、分散式事務以及系統一致性與共識分散式
- 分散式系統知識分享:正確理解CAP定理分散式
- Java分散式系統設計:CAP定理與BASE理論Java分散式
- 分散式理論(一) - CAP定理分散式
- 你真的懂嗎?分散式系統的基本問題:可用性與一致性分散式
- 分散式系統:一致性模型分散式模型
- 分散式系統的 CAP 理論分散式
- 一張圖完美解釋CAP定理
- 胖爪裝機大師pe硬碟分割槽教程硬碟
- Calvin:分割槽資料庫系統的快速分散式事務資料庫分散式
- 分散式事務最終一致性-CAP框架輕鬆搞定分散式框架
- 分散式系統中連貫性coherence和一致性consistency的區別?分散式
- 什麼是分散式一致性領域的CALM定理? -ACM分散式ACM
- 「系統架構」CAP定理的含義架構
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- 分散式系統理論基礎2 :CAP分散式
- 分散式系統中的CAP、ACID、BASE概念分散式
- 分散式系統:CAP 理論的前世今生分散式
- 分散式系統之CAP理論雜記分散式
- 事務、全域性索引、透明分散式,再見,分割槽健!索引分散式
- 深入理解高併發下的MySQL與Redis快取一致性問題(增刪改查資料快取的一致性、Canal、分散式系統CAP定理、BASE理論、強、弱一致性、順序、線性、因果、最終一致性)MySqlRedis快取分散式
- linux系統下分割槽邏輯卷擴容Linux
- ④SpringCloud 實戰:引入Hystrix元件,分散式系統容錯SpringGCCloud元件分散式
- Linux下分散式系統以及CAP理論分析Linux分散式
- 三面阿里,面試官:講講分散式的CAP定理阿里面試分散式
- Zookeeper 如何保證分散式系統資料一致性分散式
- 分散式系統中一致性雜湊演算法分散式演算法
- 在分散式系統中通過客戶端庫包提高可用性分散式客戶端
- 架構文摘:分散式系統Session一致性問題解析架構分散式Session
- Android系統常用分割槽Android
- Linux 新增LVM分割槽及LVM分割槽擴容LinuxLVM
- 分散式系列第一彈:分散式一致性!分散式
- 分散式服務化系統一致性的“最佳實幹”薦分散式
- 淺析Win10系統主分割槽和邏輯分割槽的區別Win10
- 高併發架構系列:詳解分散式一致性ACID、CAP、BASE及區別架構分散式
- 分散式系統:常見陷阱和複雜性分散式
- ZooKeeper和CAP理論及一致性原則