Eureka是什么?
Eureka是一個服務治理組件,它主要包括服務注冊和服務發現,主要用來搭建服務注冊中心。
Eureka 是一個基於 REST 的服務,用來定位服務,進行中間層服務器的負載均衡和故障轉移;
Eureka是Netflix 公司開發的,Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模塊來實現服務注冊和發現,也就是說Spring Cloud對Netflix Eureka 做了二次封裝;
Eureka 采用了C-S(客戶端/服務端)的設計架構,也就是Eureka由兩個組件組成:Eureka服務端和Eureka客戶端。Eureka Server 作為服務注冊的服務端,它是服務注冊中心,而系統中的其他微服務,使用 Eureka 的客戶端連接到 Eureka Server服務端,並維持心跳連接,Eureka客戶端是一個Java客戶端,用來簡化與服務器的交互、負載均衡,服務的故障切換等;
有了Eureka注冊中心,系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常運行。
Eureka與Zookeeper的比較
著名的CAP理論指出,一個分布式系統不可能同時滿足C(一致性)、A(可用性)和P(分區容錯性)。
由於分區容錯性在是分布式系統中必須要保證的,因此我們只能在A和C之間進行權衡,在此Zookeeper保證的是CP, 而Eureka則是AP。
Zookeeper保證CP
在ZooKeeper中,當master節點因為網絡故障與其他節點失去聯系時,剩余節點會重新進行leader選舉,但是問題在於,選舉leader需要一定時間, 且選舉期間整個ZooKeeper集群都是不可用的,這就導致在選舉期間注冊服務癱瘓。在雲部署的環境下,因網絡問題使得ZooKeeper集群失去master節點是大概率事件,雖然服務最終能夠恢復,但是在選舉時間內導致服務注冊長期不可用是難以容忍的。
Eureka保證AP
Eureka優先保證可用性,Eureka各個節點是平等的,某幾個節點掛掉不會影響正常節點的工作,剩余的節點依然可以提供注冊和查詢服務。而Eureka的客戶端在向某個Eureka注冊或時如果發現連接失敗,則會自動切換至其它節點,只要有一台Eureka還在,就能保證注冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)。
所以Eureka在網絡故障導致部分節點失去聯系的情況下,只要有一個節點可用,那么注冊和查詢服務就可以正常使用,而不會像zookeeper那樣使整個注冊服務癱瘓,Eureka優先保證了可用性。