1. 程式人生 > >SpringCloud Eureka服務治理機制

SpringCloud Eureka服務治理機制

lin nbsp term 元數據 存儲 架構 實例名 實現 spring

一、基礎架構

技術分享圖片

構建Eureka服務治理有三個核心角色:服務註冊中心服務提供者服務消費者。上圖就是這三個角色之間的通信工作架構圖。

  • 服務註冊中心(Eureka Server):Eureka提供的服務端,提供服務註冊發現的功能;
  • 服務提供者:提供服務的應用,遵循Eureka通信機制的應用。它將自己註冊到Eureka Server中,以供其他應用發現;
  • 服務消費者:消費者應用從服務註冊中心獲取服務列表,從而讓消費者知道可以從哪個服務提供者調用其所需的服務;

二、各核心要素

在高可用的集群中,都會創建兩個或兩個以上的服務註冊中心,他們之間進行相互註冊,使得各自所管理的服務列表在各個註冊中心進行信息同步。

服務註冊中心

1、失效剔除

有時候服務實例異常(內存溢出、網絡故障等)下線, 此時服務註冊中心並沒有收到“服務下線”的請求,為了從列表中將這些無法提供服務的實例剔除,Eureka Server在啟動時會創建一個定時任務,默認每隔一段時間(默認為60秒),將當前清單中超時(默認90秒)沒有續約的服務剔除出去。

2、自我保護

Eureka Server在 運行期間,會統計心跳失敗的比例在15分鐘之內是否低於85%,如果是,Eureka Server就會將當前實例註冊信息保護起來,讓這些實例不會過期。在單機的情況之下容易觸發自我保護機制。當觸發自我保護機制時,Spring Eureka面板頁面出現下面情況:

技術分享圖片默認情況下,是會開啟自我保護機制,可以通過設置參數關閉,但一般情況都是要開啟的。

服務提供者

1、服務註冊

“服務提供者”在啟動時,會通過發送REST請求的方式將自己註冊到Eureka Server上,同時帶上自身服務的一些元數據信息。Eureka Server接收到REST請求後,將元數據信息存儲到一個雙層結構Map中,第一層的key是服務名,第二層key是具體的服務實例名,如下:

技術分享圖片

架構圖中,有兩個服務提供者實例,分別註冊到兩個不同的服務註冊中心,即它們的信息分別被兩個不同的服務註冊中心所維護,因為服務註冊中心之間實現了同步(即當一個服務提供者發送註冊請求到一個服務註冊中心時,它就會將請求轉發到集群中的與之相連的服務註冊中心),所以通過這兩臺服務註冊中心的任意一臺都可以獲取該服務提供者的信息(服務列表)。

2、服務續約

註冊完成之後,服務提供者還會維護一個心跳,告訴Eureka Server:“我還活著”,以防止被Eureka Server剔除。默認情況下,續約任務間隔為30秒,服務失效的時間為90秒,可以通過配置文件設置時間。

服務消費者

1、獲取服務列表

如果現在有兩個服務註冊中心,而且有兩個服務提供者實例(如架構圖),當啟動一個服務消費者的時候,首先,它會發送REST請求,獲取由服務註冊中心返回的服務列表信息,為了性能考慮,Eureka Server會維護一份只讀服務清單返回給客戶端,同時每30秒更新一次清單列表。

2、服務調用

服務消費者獲取到服務清單後,通過服務名可以獲取提供服務的實例名和該實例的元數據信息。因為有這些服務實例的詳細信息,所以客戶端可以根據自己的需要決定具體調用哪個實例,在Ribbon中,會默認采用輪詢的方式進行調用,從而實現客戶端的負載均衡。

Eureka中有Region和Zone兩個概念,一個Region中可以包括多個Zone,每個服務客戶端需要被註冊到一個Zone中,所以客戶端對應一個Region和一個Zone。在進行服務調用的時候,優先訪問同處一個Zone中的服務提供方,若訪問不到,則訪問其他Zone。

SpringCloud Eureka服務治理機制