微服務(一)eureka


Eureka概述

一個簡單的服務注冊,服務發現架構

在CAP理論中,eureka選擇了ap,作為注冊中心,數據可用比數據不一致更重要

邏輯架構圖

 

 

Eureka特性

1.當注冊中心掛了,客戶端之間依然可以通過原有的注冊表進行調用;注冊中心重啟后,客戶端會繼續注冊進來

2.當服務提供者掛了,在關閉自我保護的情況下,注冊中心在規定時間(默認是60s)內移除客戶端

3.自我保護,當一個新的Eureka Server出現時,它嘗試從相鄰節點獲取所有實例注冊表信息。如果從Peer節點獲取信息時出現問題,Eureka Serve會嘗試其他的Peer節點。如果服務器能夠成功獲取所有實例,則根據該信息設置應該接收的更新閾值。如果有任何時間,Eureka Serve接收到的續約低於為該值配置的百分比(默認為15分鍾內低於85%),則服務器開啟自我保護模式,即不再剔除注冊列表的信息。

 

Eureka主要功能

Register:服務注冊

當Eureka客戶端向Eureka Server注冊時,它提供自身的元數據,比如IP地址、端口,運行狀況指示符URL,主頁等

 

Renew:服務續約

Eureka客戶會每隔30秒發送一次心跳來續約。 通過續約來告知Eureka Server該Eureka客戶仍然存在,沒有出現問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將實例從其注冊表中刪除。 建議不要更改續約間隔

 

Fetch Registries:獲取注冊列表信息

Eureka客戶端從服務器獲取注冊表信息,並將其緩存在本地。客戶端會使用該信息查找其他服務,從而進行遠程調用。該注冊列表信息定期(每30秒鍾)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同, Eureka客戶端自動處理。如果由於某種原因導致注冊列表信息不能及時匹配,Eureka客戶端則會重新獲取整個注冊表信息。 Eureka服務器緩存注冊列表信息,整個注冊表以及每個應用程序的信息進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka客戶端和Eureka 服務器可以使用JSON / XML格式進行通訊。在默認的情況下Eureka客戶端使用壓縮JSON格式來獲取注冊列表的信息

 

Cancel:服務下線

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

 

Eviction 服務剔除

在默認的情況下,當Eureka客戶端連續90秒沒有向Eureka服務器發送服務續約,即心跳,Eureka服務器會將該服務實例從服務注冊列表刪除,即服務剔除

 

參考資料

http://blog.csdn.net/forezp/article/details/73017664

 

eureka配置

Eureka客戶端死了后,服務端沒有移除該客戶端

1.客戶端與服務端的心跳時間間隔為30s

2. Eureka Server在多長時間內沒有收到心跳將實例剔除的時間參數,默認為90s

官方建議這兩個參數不要修改

 

//eureka服務端默認配置

https://github.com/Netflix/eureka/blob/master/eureka-core/src/main/java/com/netflix/eureka/DefaultEurekaServerConfig.java

//客戶端默認配置

https://github.com/Netflix/eureka/blob/master/eureka-client/src/main/java/com/netflix/discovery/DefaultEurekaClientConfig.java

 

注冊表配置緩存方案

·啟動緩存

Eureka Client一啟動(不是啟動完成),不是立即向Eureka Server注冊,它有一個延遲向服務端注冊的時間,通過跟蹤源碼,可以發現默認的延遲時間為40秒

·Eureka Server的響應緩存

Eureka Server維護每30秒更新的響應緩存,可通過更改配置eureka.server.responseCacheUpdateIntervalMs來修改。 所以即使實例剛剛注冊,它也不會出現在調用/ eureka / apps REST端點的結果中。

·Eureka Server刷新緩存

Eureka客戶端保留注冊表信息的緩存。該緩存每30秒更新一次(如前所述)。因此,客戶端決定刷新其本地緩存並發現其他新注冊的實例可能需要30秒。

·LoadBalancer Refresh

Ribbon的負載平衡器從本地的Eureka Client獲取服務注冊列表信息。Ribbon本身還維護本地緩存,以避免為每個請求調用本地客戶端。此緩存每30秒刷新一次(可由ribbon.ServerListRefreshInterval配置)。所以,可能需要30多秒才能使用新注冊的實例。

官方表示,大概需要兩分鍾,會更新最新的配置到客戶端

 

Eureka操作

Eureka也支持通過rest接口來操作注冊中心

比如

DELETE eureka/v2/apps/appID/instanceID

該命令可以主動下線一個已有服務

詳細接口參考

https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

這個鏈接里有點老,當前版本的urll改成了以eureka/apps開頭

默認是采用xml協議,如果想要json協議的,在http請求頭中加入配置

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM