SpringCloud之Eureka(三)

前言

之前兩篇已經搭建了簡單的高可用註冊中心,服務提供者及服務消費者。但是僅僅做這些在實際應用中還是不夠的,這篇主要對Eureka的架構進一步瞭解以及學習一些進階特性。

服務續約

服務提供者會定時發送一個心跳來防止EurekaServer將其從服務列表中排除出去,這種操作成爲服務續約(Renew)。有以下兩個屬性值可以設置:

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90

eureka-instance.lease-renewal-interval-in-seconds用於定義服務續約任務的調用間隔時間,默認爲30秒。eureka.instance.lease-expiration-duration-in-seconds用於定義服務失效的時間,默認爲90秒。

 

獲取服務

服務消費者啓動的時候會向註冊中心請求一份服務清單。Eureka Server會緩存一份只讀的服務清單用來返回給客戶端,同時該緩存會每隔30秒刷新一次。

服務調用

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

自我保護

我們有時候會在註冊中心的信息頁面上出現紅色警告信息:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. 

這就是出發了Eureka的自我保護機制。Eureka Server在運行期間,會統計心跳失敗的比例在15分鐘之內是否低於85%,如果低於,Eureka Server會將當前的實例註冊信息保護起來,讓這些實例不會過期,儘可能保護這些註冊信息,因爲服務本身可能沒有問題,由於網絡原因導致,此時不應該剔除這些服務註冊信息。在此期間,客戶端很可能拿到那些實際已經不存在的服務實例,會調用失敗,所以客戶端必須要有容錯機制,比如請求重試,斷路器等。通過以下配置可以關閉自我保護機制:

eureka.server.enable-self-preservation=false

 

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