EureKa與ZooKeeper的CAP原則分析
EureKa與ZooKeeper的CAP原則分析
回顧CAP原則
在關係型資料庫系統中RDBMS (Mysql、Oracle、sqlServer),一個事務往往具有ACID特性
在非關係型資料庫中NoSQL(redis、mongdb),往往遵循CAP原則
ACID是什麼?
- A(Atomicity) 原子性
- 一個事務(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。即,事務不可分割、不可約簡。
- C(Consistency)一致性
- I(Isolation)隔離性
- 資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括未提交讀(Read uncommitted)、提交讀(read committed)、可重複讀(repeatable read)和序列化(Serializable)
- D(Durability)永續性
- 事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。
CAP是什麼?
- C(Consistency) 強一致性
- 在分散式系統中的所有資料備份,在同一時刻是否同樣的值。(等同於所有節點訪問同一份最新的資料副本)
- A(Availability)可用性
- P(Partition tolerance) 分割槽容錯性
- 以實際效果而言,分割槽相當於對通訊的時限要求。系統如果不能在時限內達成資料一致性,就意味著發生了分割槽的情況,必須就當前操作在C和A之間做出選擇。
CAP的三進二出:CA、AP、CP
CAP理論的核心
- 一個分散式系統不可能同時很好的滿足一致性,可用性,容錯性這三個需求
- 根據CAP原理,將NoSQL資料庫分成了滿足CA原則,滿足CP原則和滿足AP原則三大類:
- CA:單點叢集,滿足一致性,可用性的系統,通常可擴充套件性較差
- CP:滿足一致性,分割槽容錯性的系統,通常 效能不是特別高
- AP:滿足可用性,分割槽容錯性的系統,通常可能對一致性要求要低一些
作為服務註冊中興,EureKa比ZooKeeper好在哪裡?
著名的CAP理論指出,一個分散式系統不可能同時滿足C(一致性)、A(可用性)、P(容錯性)。
由於分割槽容錯性P在分散式系統中是必須要保證,因此我們只能在A和C之間進行權衡。
- Zookeeper保證的是CP;
- Eureka保證的是AP;
Zookeeper保證的是CP
當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但是不能接受 服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。但是ZK會出現這樣一種情況,當master結點因為網路故障與其他結點失去聯絡時,剩餘結點會重新進行leader選舉,問題在於,選取leader的時間太長30~120s,且選舉期間整個ZK叢集都是不可用的,這就導致在選舉期間註冊服務癱瘓。在雲部署的環境下,因為網路問題使得zk叢集失去master結點是較大概率會發生的事件,雖然最終能夠回覆,但是漫長的選舉時間導致的註冊長期不可用是不能容忍的。
Eureka保證的是AP
Eureka看明白了這一點,因此在設計時就優先保證可用性。Eureka各個結點都是平等的。幾個結點掛掉不會影響正常結點的工作,剩餘的結點依然可以提供註冊和查詢服務。而Eureka的客戶端在向某個Eureka註冊時,如果發現連線失敗,則會自動切換至其他結點,只要有一臺Eureka還在,就能保住註冊服務的可用性,只不過檢視到的資訊可能不是最新的,除此之外,Eureka還是一種自我保護機制,如果在15分鐘內超過85%的結點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網路故障,此時會出現以下幾種情況:
1.Eureka不再從註冊列表中移除因為長時間沒收到心跳而應該過期的服務
2.Eureka仍然能夠接收新服務註冊和查詢請求,但是不會被同步到其他結點(即保證當前結點依然可用)
3.當網路穩定時,當前網路穩定時,當前例項新的註冊資訊會被同步到其他結點中
因此,Eureka可用很好的應對因網路故障導致部分結點失去聯絡的情況,而不像Zookeeper那樣使整個註冊服務癱瘓
相關文章
- ZooKeeper和CAP理論及一致性原則
- Eureka與Zookeeper的區別
- Spring Cloud:Zookeeper和Eureka的區別在哪?SpringCloud
- 引導分析原則
- Eureka 原始碼分析之 Eureka Server原始碼Server
- 互動設計原則分析
- Eureka原始碼分析原始碼
- 開閉原則OCP與KISS簡單原則衝突嗎? - macerubMac
- Zookeeper原始碼分析(二) —– zookeeper日誌原始碼
- Zookeeper原始碼分析(二) ----- zookeeper日誌原始碼
- OCP原則——開閉原則
- Java中23種設計模式:六大設計原則的分析與介紹Java設計模式
- 17條建模實踐與原則
- Zookeeper原始碼分析原始碼
- 閒聊CAP、BASE與XA
- Java中的介面與抽象類設計原則Java抽象
- SQL語句優化的原則與方法QOSQL優化
- SAP Cloud Application Programming 程式設計模型(CAP)的設計準則CloudAPP程式設計模型
- 《JavaScript設計模式與開發實踐》原則篇(2)—— 最少知識原則JavaScript設計模式
- 物件導向設計的六大原則(SOLID原則)-——里氏替換原則物件Solid
- 資料庫設計原則與方法資料庫
- 重構的原則
- 2.2.1.1 共性的原則
- 保健品選擇與服用的哲學原則
- 設計出色API的最佳實踐與原則 - JamesAPI
- 碎片化敘事的文案撰寫原則與方法
- 設計原則:開閉原則(OCP)
- CAP 與 Raft 相關知識Raft
- 遠端sudo與cap_setpcapPCA
- 開放封閉原則與規則引擎設計模式 - devgenius設計模式dev
- 《JavaScript設計模式與開發實踐》原則篇(3)—— 開放-封閉原則JavaScript設計模式
- 《JavaScript設計模式與開發實踐》原則篇(1)—— 單一職責原則JavaScript設計模式
- 必知必會的設計原則——介面隔離原則
- 服務註冊與發現【Eureka】- Eureka簡介
- 設計原則-依賴反轉原則
- SOLDI原則之DIP:依賴倒置原則
- 設計原則之【介面隔離原則】
- 設計原則:介面隔離原則(ISP)