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服務端默認配置
//客戶端默認配置
注冊表配置緩存方案
·啟動緩存
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請求頭中加入配置