zookeeper和eureka的區別

   著名的CAP理論指出,一個分佈式系統不可能同時滿足C(一致性)、A(可用性)和P(分區容錯性)。由於分區容錯性在是分佈式系統中必須要保證的,因此我們只能在A和C之間進行權衡。在此Zookeeper保證的是CP, 而Eureka則是AP。

  • 首先介紹下CAP
  •       RDBMS(mysql/oracle/sqlServer)    ----->    ACID
  •       NOSQL(redis/mongdb)  ---->   CAP    
  •              ACID:A(atomicity)原子性   C(Consistency)一致性
  •                         I(Isolation)獨立性      D(Durability)持久性
  •              CAP:  C(Consistency)強一致性   A(Availability) 可用性  
  •                          P(Partition tolerance)分區容錯性
  •              CAP的3進2:
  •                  最多隻能同時較好的滿足兩個。
  •                  CAP理論的核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和
  •                     分區容錯性這三個需求。
  •                  因此,根據CAP原理將NoSQL數據庫分成了滿足CA原則、滿足CP原則
  •                      和滿足AP原則三大類;
  •         CA-單點集羣,滿足一致性,可用性的系統,通常在課擴展性上不太強大。
  •         CP-滿足一致性,分區容錯性的系統,通常性能不是特別高。
  •         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那樣使整個註冊服務癱瘓。

總結:

   Eureka作爲單純的服務註冊中心來說要比zookeeper更加“專業”,因爲註冊服務更重要的是可用性,我們可以接受短期內達不到一致性的狀況。不過Eureka目前1.X版本的實現是基於servlet的java web應用,它的極限性能肯定會受到影響。期待正在開發之中的2.X版本能夠從servlet中獨立出來成爲單獨可部署執行的服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章