服務註冊中心,Eureka比Zookeeper好在哪裏?

著名的CAP理論指出,一個分佈式系統不可能同時知足C(一致性)、A(可用性)、和P(分區容錯性)。因爲分區容錯性P在分佈式系統中必需要保證的,所以咱們只能在A和C之間進行權衡。網絡

所以:
Zookeeper保證的是CP,
Eureka則是AP。分佈式

Zoopkeeper保證CP:
當向註冊中心查詢服務列表時,咱們能夠容忍註冊中心返回的是幾分鐘之前的註冊信息,可是不能接受服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。可是zk會出現這樣的一種狀況,當master節點因網路故障與其餘節點失去聯繫時,剩餘的節點會從新進行leader選舉。問題在於,選舉leader的時間太長,30~120s,且選舉期間整個zk集羣是都是不可用的,這就致使在選舉期間註冊服務癱瘓,在雲部署的環境下,因網絡問題使得zk集羣失去master節點是較大機率會發生的事,雖然服務可以最終恢復,可是漫長的選舉時間致使的註冊長期不可用是不能容忍的。oop

Eureka保證AP:
Eureka看明白了這一點,所以在設計時就優先保證可用性。Eureka各個節點都是平等的,幾個節點掛掉不影響正常節點的工做,剩餘的節點依然能夠提供註冊和查詢服務。而Eureka的客戶端在向某個Eureka註冊時若是發現鏈接失敗,則會自動切換至其餘的節點,只要有一臺Eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證一致性)。除此以外,Eureka還有一種自我保護機制,若是在15分鐘內超過85%的節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,此時會出現如下幾種狀況:
1.Eureka再也不從註冊列表中移除由於長時間沒有收到心跳而應該過時的服務
2.Eureka仍然可以接受新服務的註冊和查詢請求,可是不會被同步到其它節點上(即保證當前節點依然可用)
3.當前網絡穩定時,當前實例新的註冊信息會被同步到其它節點中
所以,Eureka能夠很好的應對因網絡故障致使節點失去聯繫的狀況,而不會像zookeeper那樣使整個註冊服務癱瘓。
 設計

相關文章
相關標籤/搜索