Spring cloud eureka服務治理(2)

本文主要講解eureka的基礎架構、服務治理機制、和一些配置詳解

一、基礎架構:

Eureka整個服務治理基礎架構的三個核心要素:服務註冊中心,服務提供者、服務消費者;很多時候服務端提供者也會是消費者。

二、服務治理機制

服務提供者

(1)服務註冊

服務提供者在啓動的時候回通過發送REST請求的方式將自己註冊到Eureka Server上,同時會攜帶自身的一些元素局,Eureka Server接收到REST請求之後將服務提供者的元數據信息存儲在一個雙層的Map中,其中第一層的key是服務名,第二層的key是具體服務的實例名。

(2)服務同步

在上一篇文章中提到過,高可用的服務註冊中心,如果兩個服務註冊中心是捆綁在一起的時候,當服務提供者發送註冊請求到一個服務註冊中心的會後,它會將該請求轉發給集羣中相連的其他註冊中心,從而實現註冊中心之間的服務同步,通過服務同步,,服務提供者的信息就可以通過這兩臺服務註冊中心中的任意一臺獲取到。

(3)服務續約

在服務註冊完成之後,服務提供者會維護一個心跳用來持續告訴Eureka Server,以防被服務註冊中心剔除掉,這就叫服務續約,關於服務續約有兩個屬性:

eureka.instance.lease-renawal-interval-in-seconds=30,服務預約任務的調用時間,默認30秒

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

 

服務消費者

 (1)獲取服務

當我們啓用服務消費者的時候,會發送一個REST請求給註冊中心,獲取上面註冊的服務清單,Eureka server會維護一份只讀的清單返回給客戶端,同時清單會每隔30秒更新一次,如果希望修改服務清單的更新時間,可以通過:

eureka.client.registrl-fetch-intervsl-seconds=30 參數進行修改,默認30秒

(2)服務調用

在上一篇文章中,是通過ribbon客戶端負載均衡去調用的服務,ribbon默認採用的是輪詢的方式進行調用,還可以修改成其他負載均衡策略。

(3)服務下線

當服務實例進行正常的關閉操作,會觸發一個服務下線的REST請求給Eureka Server,註冊中心收到請求之後,將該服務狀態置爲下線,並把下線事件傳播出去。

 

服務註冊中心

(1)失效剔除

爲了將失效的服務從註冊中心剔除,Eureka Server在啓動時會創建一個定時任務,每隔一段時間(默認60秒),將清單中超時的沒有續約的(默認90秒)服務剔除出去。

(2)自我保護

服務註冊到Eureka Server中,在運行期間會統計心跳失敗比例在15分鐘時候低於85%,如果出現低於的情況,Eureka server會將當前的實例保護起來,讓這些實例不過期,儘可能的保護服務實例。

有時候客戶端會拿到已經失效或者不存在的服務,會出現調用服務失敗的情況,所以客戶端必須有容錯機制,可以使用請求重試、斷路器等機制。

由於本地調試很容易觸發註冊中心的保護機制,會使得註冊的服務實例不是特別準確,在本地開發時,可以使用:

eureka.server.enable-self-preservation=false參數來關閉保護機制,確保註冊中心可以將不可用的實例正確剔除。

 

三、配置詳解

在實際使用Spring cloud Eureka時,我們所做的配置基本都是對Eureka 客戶端進行配置,我們主要了解這部分的配置,

Eureka 客戶端的配置主要分爲兩個方面:

(1)服務註冊相關的配置信息:服務註冊中心的地址、服務獲取間隔時間、可用區域等。

(2)服務實例相關的配置,包括服務實例的名稱、IP地址、端口號、健康檢查路徑等。

服務註冊類配置,我們可以通過查看 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean源碼。主要就是服務註冊中心,就是上篇文章裏已經多次寫到。

爲了服務註冊中心的安全。我們很多時候都會爲服務註冊中心加入安全教校驗,在配置service-url時,加入相應的安全校驗信息,

比如 http://<username>:<password>@localhost:1111/eureka ,指定用戶名和密碼。

 

服務實例配置,我們可以通過org.springframework.cloud.netflix.eureka.EurekainstanceConfigBean的源碼來獲取,主要有

元數據,實例名配置,端點配置,健康檢查。

默認情況下eureka的健康檢查不是通過spring-boot-actuator模塊的/health端點來實現,而是依靠客戶端的心跳機制來保持服務實例的存活,但是依靠心跳機制無法保證客戶端應用能夠聽夠正常服務,比如一些外部資源依賴,數據庫,緩存,消息代理,如果這些外部依賴無法正常運作,那麼就算客戶端心跳是OK的,那麼還是不能對外提供正常的服務。

在Spring Cloud Eureka中, 我們可以通過簡單的配置, 把Eureka客戶端的健康檢測交 給spring-boot-actuator模塊的/health端點, 以實現更加全面的健康狀態維護。 詳細的配置步驟如下所示:

• 在pom.xml中引入spring-boot-starter-actuator模塊的依賴。

• 在application.proper巨es中增加參數配置 eureka.client.healthcheck.enabled=true。

• 如果客戶端的/health端點路徑做了一些特殊處理,請參考前文介紹端點配置時的 方法進行配置, 讓服務註冊中心可以正確訪問到健康檢測端點。

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