1. 程式人生 > >Eureka的功能特性及相關配置

Eureka的功能特性及相關配置

實現 font img 原因 client 情況 serve 關閉 溢出

1.服務提供者
1.1服務註冊
服務提供者啟動時,會通過rest請求的方式將自己註冊到Eureka Server上,同時帶上了自身服務的一些元數據信息。Eureka Server接收到請求後,將元數據信息存儲在一個雙層結構的Map中,其中與第一層的key是服務名,第二層的key是具體的服務實例名
eureka.client.register-with-eureka=false 是否向註冊中心註冊自己 默認 true
eureka.client.fetch-registry=false 是否去檢索註冊中心的服務 默認 true


1.2服務續約
在註冊完服務後,服務提供者會維護一個心跳用來持續高速Eureka Server“我還活著”,以防止Eureka Server的“剔除任務”將該服務實例從服務列表中排除出去
eureka.instance.lease-renewal-interval-in-seconds=30 定義服務續約任務的調用間隔時間 默認30s


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


1.3服務下線
當服務實例進行正常的關閉操作時,會觸發一個服務下線的rest請求給Eureka Server ,告訴註冊中心:”我要下線了“,服務端在接收請求後,將該服務置為下線(DOWN),並把下線時間傳播出去(通知服務消費者)


2.服務消費者
2.1獲取服務
eureka.client.fetch-registry=ture 是否檢索註冊中心的服務,獲取服務則必須設置為true 默認為true
eureka.client.registry.fetch.interval.seconds=30 當啟動服務消費者時,會發送一個rest請求給註冊中心,來獲取上面註冊的服務清單;為了性能考慮,Eureka Server會維護一份只讀的服務清單來返回給客戶端,同時緩存清單會每隔30秒更新一次


2.2服務調用
服務消費者獲取服務清單後,通過服務名可以獲取具體提供服務的實例名和該實例的元數據信息。有了這些元數據信息,客戶端可以根據自己的需要決定具體調用哪個實例。對於訪問實例的選擇,Eureka中有Region和Zone兩個概念,一個Region中可以包含多個Zone,每個服務客戶端需要被註冊到一個Zone鐘,所以每個客戶端對應一個Region和一個Zone。在進行服務調用時,優先訪問同處一個Zone的服務提供方,若訪問不到,再訪問其他Zone的服務提供者。


3.服務註冊中心
3.1服務同步
當兩個服務提供者註冊到註冊中心集群,它們的信息被註冊中心集群維護(此時註冊中心之間互相註冊為服務)當服務提供者發送服務註冊請求到一個註冊中心時,他會將該請求轉發給集群中相連的其他註冊中心,從而實現註冊中心的服務同步。通過服務同步,兩個服務提供者的服務信息就可以通過這兩臺服務註冊中心的任意一臺獲取到。


3.2失效剔除
有時,服務實例並不一定是正常下線,可能由於內存溢出,網絡故障等原因使得服務不能正常工作,而服務註冊中心並未收到“服務下線”的請求。為了從服務列表中將這些無法提供服務的實例剔除,Eureka Server在啟動時會創建一個定時任務,默認每隔一段時間(默認60s)將當前清單中超時(默認90s)沒有續約的服務剔除


3.3自我保護
服務註冊到註冊中心後,會維護一個心跳連接,告訴Eureka Server自己還活著。Eureka Server 在運行期間會統計心跳失敗比例在15分鐘內是是否低於85%,如果出現低於的情況(單機調試很容易滿足,實際在生產環境中通常是由於網絡不穩定導致的),會將當前的實例註冊信息保護起來,讓這些實例不過期,盡可能保護註冊信息。而在這段保護期間內,實例若出現問題,那麽客戶端會拿到實際已經不存在的服務實例,會出現調用失敗的情況,這時客戶端就必須要有容錯機制,比如請求重試,熔斷器等
註:在單機調試時,服務註冊中心信息面板經常會出現如下提示:
技術分享圖片


這就是由於觸發了Eureka Server的自我保護機制
可以使用eureka.server.enable-self-preservation=false參數來關閉保護機制

Eureka的功能特性及相關配置