Eureka介紹


1.  Eureka是什么

Eureka是一個基於REST的服務,主要用於AWS雲中的定位服務,以實現中間層服務器的負載平衡和故障轉移

在 Spring Cloud 微服務架構中通常用作注冊中心

我們稱這個服務為 Eureka Server,還有一個與之交互的客戶端稱之為 Eureka Client

2.  Eureka高級架構

如上圖所示,其中

Application Server 表示服務提供方

Application Client  表示服務消費方

Make Remote Call 表示遠程調用

服務在Eureka上注冊,然后每隔30秒發送心跳來更新它們的租約。如果客戶端不能多次續訂租約,那么它將在大約90秒內從服務器注冊表中剔除。注冊信息和更新被復制到集群中的所有eureka節點。來自任何區域的客戶端都可以查找注冊表信息(每30秒發生一次)來定位它們的服務(可能在任何區域)並進行遠程調用。

(PS:Eureka Client需要每30秒給Eureka Server發一次心跳,同時更新Server上最新的注冊信息到本地,如果Server多次沒有收到來自客戶端的心跳,那么在90秒內會被Server上剔除)

3.  Eureka 客戶端與服務器之間的通信

服務發現有兩種模式:一種是客戶端發現模式,一種是服務端發現模式。Eureka采用的是客戶端發現模式。

3.1.  Register(注冊)

Eureka客戶端將關於運行實例的信息注冊到Eureka服務器。注冊發生在第一次心跳。

3.2.  Renew(更新 / 續借)

Eureka客戶端需要更新最新注冊信息(續借),通過每30秒發送一次心跳。更新通知是為了告訴Eureka服務器實例仍然存活。如果服務器在90秒內沒有看到更新,它會將實例從注冊表中刪除。建議不要更改更新間隔,因為服務器使用該信息來確定客戶機與服務器之間的通信是否存在廣泛傳播的問題。

3.3.  Fetch Registry(抓取注冊信息)

Eureka客戶端從服務器獲取注冊表信息並在本地緩存。之后,客戶端使用這些信息來查找其他服務。通過在上一個獲取周期和當前獲取周期之間獲取增量更新,這些信息會定期更新(每30秒更新一次)。獲取的時候可能返回相同的實例。Eureka客戶端自動處理重復信息。

3.4.  Cancel(取消)

Eureka客戶端在關機時向Eureka服務器發送一個取消請求。這將從服務器的實例注冊表中刪除實例,從而有效地將實例從流量中取出。

4.  Eureka自我保護模式

如果 Eureka 服務器檢測到超過預期數量的注冊客戶端以一種不優雅的方式終止了連接,並且同時正在等待被驅逐,那么它們將進入自我保護模式。這樣做是為了確保災難性網絡事件不會擦除eureka注冊表數據,並將其向下傳播到所有客戶端。

任何客戶端,如果連續3次心跳更新失敗,那么它將被視為非正常終止,病句將被剔除。當超過當前注冊實例15%的客戶端都處於這種狀態,那么自我保護將被開啟。

當自我保護開啟以后,eureka服務器將停止剔除所有實例,直到:

  1. 它看到的心跳續借的數量回到了預期的閾值之上,或者
  2. 自我保護被禁用

默認情況下,自我保護是啟用的,並且,默認的閾值是要大於當前注冊數量的15%

5.  Eureka  VS  Zookeeper

 5.1.  Eureka保證AP

Eureka服務器節點之間是對等的,只要有一個節點在,就可以正常提供服務。

Eureka客戶端的所有操作可能需要一段時間才能在Eureka服務器中反映出來,隨后在其他Eureka客戶端中反映出來。也就是說,客戶端獲取到的注冊信息可能不是最新的,它並不保證強一致性

5.2.  Zookeeper保證CP

Zookeeper集群中有一個Leader,多個Follower。Leader負責寫,Follower負責讀,ZK客戶端連接到任何一個節點都是一樣的,寫操作完成以后要同步給所有Follower以后才會返回。如果Leader掛了,那么重新選出新的Leader,在此期間服務不可用。

5.3.  為什么用Eureka

分布式系統大都可以歸結為兩個問題:數據一致性和防止單點故障。而作為注冊中心的話,即使在一段時間內不一致,也不會有太大影響,所以在A和C之間選擇A是比較適合該場景的。

6.  其它相關

分布式事務

7.  參考

https://github.com/Netflix/eureka/wiki/Understanding-eureka-client-server-communication

https://blog.csdn.net/neosmith/article/details/53131023


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM