Eureka工作原理

1.Eureka註冊中心是什麼?

Eureka是Netflix開發的服務發現組件,本身是一個基於REST的服務。Spring Cloud將它集成在其子項目spring-cloud-netflix中,以實現Spring Cloud的服務註冊於發現,同時還提供了負載均衡、故障轉移等能力。

2.Eureka中的三種角色分別是什麼?

1、Eureka Server

通過Register、Get、Renew等接口提供服務的註冊和發現。

2、Application Service (Service Provider)

服務提供方

把自身的服務實例註冊到Eureka Server中

3、Application Client (Service Consumer)

服務調用方

通過Eureka Server 獲取服務列表,消費服務。

3.Eureka Server:註冊中心服務端

註冊中心服務端主要對外提供了三個功能:

服務註冊
服務提供者啓動時,會通過 Eureka Client 向 Eureka Server 註冊信息,Eureka Server 會存儲該服務的信息,Eureka Server 內部有二層緩存機制來維護整個註冊表

提供註冊表
服務消費者在調用服務時,如果 Eureka Client 沒有緩存註冊表的話,會從 Eureka Server 獲取最新的註冊表

同步狀態
Eureka Client 通過註冊、心跳機制和 Eureka Server 同步當前客戶端的狀態。

4.Eureka Client:註冊中心客戶端

Eureka Client 是一個 Java 客戶端,用於簡化與 Eureka Server 的交互。Eureka Client 會拉取、更新和緩存 Eureka Server 中的信息。因此當所有的 Eureka Server 節點都宕掉,服務消費者依然可以使用緩存中的信息找到服務提供者,但是當服務有更改的時候會出現信息不一致。

5.Register: 服務註冊

服務的提供者,將自身註冊到註冊中心,服務提供者也是一個 Eureka Client。當 Eureka Client 向 Eureka Server 註冊時,它提供自身的元數據,比如 IP 地址、端口,運行狀況指示符 URL,主頁等。

6.Renew: 服務續約

Eureka Client 會每隔 30 秒發送一次心跳來續約。 通過續約來告知 Eureka Server 該 Eureka Client 運行正常,沒有出現問題。 默認情況下,如果 Eureka Server 在 90 秒內沒有收到 Eureka Client 的續約,Server 端會將實例從其註冊表中刪除,此時間可配置,一般情況不建議更改。

7.服務續約的兩個重要屬性

服務續約任務的調用間隔時間,默認爲30秒
eureka.instance.lease-renewal-interval-in-seconds=30

服務失效的時間,默認爲90秒。
eureka.instance.lease-expiration-duration-in-seconds=90

8.Eviction 服務剔除

當 Eureka Client 和 Eureka Server 不再有心跳時,Eureka Server 會將該服務實例從服務註冊列表中刪除,即服務剔除。

9.Cancel: 服務下線

Eureka Client 在程序關閉時向 Eureka Server 發送取消請求。 發送請求後,該客戶端實例信息將從 Eureka Server 的實例註冊表中刪除。該下線請求不會自動完成,它需要調用以下內容:
DiscoveryManager.getInstance().shutdownComponent();

10.GetRegisty: 獲取註冊列表信息

Eureka Client 從服務器獲取註冊表信息,並將其緩存在本地。客戶端會使用該信息查找其他服務,從而進行遠程調用。該註冊列表信息定期(每30秒鐘)更新一次。每次返回註冊列表信息可能與 Eureka Client 的緩存信息不同,Eureka Client 自動處理。

如果由於某種原因導致註冊列表信息不能及時匹配,Eureka Client 則會重新獲取整個註冊表信息。 Eureka Server 緩存註冊列表信息,整個註冊表以及每個應用程序的信息進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式進行通訊。在默認情況下 Eureka Client 使用壓縮 JSON 格式來獲取註冊列表的信息。

獲取服務是服務消費者的基礎,所以必有兩個重要參數需要注意:

啓用服務消費者從註冊中心拉取服務列表的功能

eureka.client.fetch-registry=true

設置服務消費者從註冊中心拉取服務列表的間隔

eureka.client.registry-fetch-interval-seconds=30

11.Remote Call: 遠程調用

當 Eureka Client 從註冊中心獲取到服務提供者信息後,就可以通過 Http 請求調用對應的服務;服務提供者有多個時,Eureka Client 客戶端會通過 Ribbon 自動進行負載均衡。

12.Eurka 工作流程

1、Eureka Server 啓動成功,等待服務端註冊。在啓動過程中如果配置了集羣,集羣之間定時通過 Replicate 同步註冊表,每個 Eureka Server 都存在獨立完整的服務註冊表信息

2、Eureka Client 啓動時根據配置的 Eureka Server 地址去註冊中心註冊服務

3、Eureka Client 會每 30s 向 Eureka Server 發送一次心跳請求,證明客戶端服務正常

4、當 Eureka Server 90s 內沒有收到 Eureka Client 的心跳,註冊中心則認爲該節點失效,會註銷該實例

5、單位時間內 Eureka Server 統計到有大量的 Eureka Client 沒有上送心跳,則認爲可能爲網絡異常,進入自我保護機制,不再剔除沒有上送心跳的客戶端

6、當 Eureka Client 心跳請求恢復正常之後,Eureka Server 自動退出自我保護模式

7、Eureka Client 定時全量或者增量從註冊中心獲取服務註冊表,並且將獲取到的信息緩存到本地

8、服務調用時,Eureka Client 會先從本地緩存找尋調取的服務。如果獲取不到,先從註冊中心刷新註冊表,再同步到本地緩存

9、Eureka Client 獲取到目標服務器信息,發起服務調用

10、Eureka Client 程序關閉時向 Eureka Server 發送取消請求,Eureka Server 將實例從註冊表中刪除

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