1. 程式人生 > 其它 >服務註冊中心:Eureka與Zookeeper

服務註冊中心:Eureka與Zookeeper

CAP理論指出,一個分散式系統不可能同時滿足一致性(Consistency)、可用性(Availability)和分割槽容錯(Partition tolerance)。由於分割槽容錯性在分散式系統中必須要保證,因此只能在C和A之間進行權衡。放棄一致性(強一致性,最終保持一致性),選擇可用性是很多分散式系統的選擇。

Zookeeper保證的是CP,而Eureka保證的是AP。

1.Zookeeper保證CP

當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但不能接受服務直接down掉不可用。也就是說,服務註冊功能可用性要求高於一致性。但是zk會出現一種情況,當master節點因為網路故障與其他節點失去聯絡時,剩餘節點會重新進行leader選舉。問題在於,leader

選舉的時間太長,一般在30~120s,且整個選舉期間zk叢集都是不可用的,這就導致在選舉期間註冊服務癱瘓。雖然服務最終能夠恢復,但是漫長的選舉時間導致服務註冊長時間不可用,這是不能容忍的。

 

2.Eureka保證AP

Eureka各節點都是平等的,幾個節點掛掉不會影響正常節點的工作,剩餘的節點依然可以提供服務註冊和查詢功能。Eureka的客戶端向某個Eureka節點註冊時如果發現連線失敗,則會自動切換至其他節點,只要一臺Eureka還在,就能保證服務註冊成功(保證可用性),只不過查詢到的資訊可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鐘之內超過85%的節點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網路故障,此時就會出現以下幾種情況:

  1. Eureka不再從註冊列表中移除因長時間沒有收到心跳而應該過期的服務

  2. Eureka任然能夠接受新服務的註冊和查詢請求,但是不會被同步到其他節點上(即保證當前節點依然可用)

  3. 當網路穩定時,當前例項新的註冊資訊會被同步到其他節點上

因此,Eureka可以很好的應對因網路故障導致部分節點失去聯絡的情況,而不會像zookeeper那樣是整個服務註冊癱瘓。