一 Eureka的自我保護模式
進入自我保護模式最直觀的體現就是Eureka Server首頁的警告,如下圖:
默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,這就可能變得非常危險了----因為微服務本身是健康的,此時本不應該注銷這個微服務。
Eureka Server通過“自我保護模式”來解決這個問題----當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網絡分區故障),那么這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務注冊表中的信息,不再刪除服務注冊表中的數據(也就是不會注銷任何微服務)。當網絡故障恢復后,該Eureka Server節點會自動退出自我保護模式。
自我保護模式是一種對網絡異常的安全保護措施。使用自我保護模式,而已讓Eureka集群更加的健壯、穩定。
二
在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false來禁用自我保護模式
三
Eureka的健康檢查
先看下圖:
說明:在Status欄顯示着UP,表示應用程序狀態正常。其它取值DOWN、OUT_OF_SERVICE、UNKNOWN等,只有UP的微服務會被請求。
由於Eureka Server與Eureka Client之間使用心跳機制來確定Eureka Client的狀態,默認情況下,服務器端與客戶端的心跳保持正常,應用程序就會始終保持“UP”狀態,所以微服務的UP並不能完全反應應用程序的狀態。
Spring Boot Actuator提供了/health端點,該端點可展示應用程序的健康信息,只有將該端點中的健康狀態傳播到Eureka Server就可以了,實現這點很簡單,只需為微服務配置如下內容:
#開啟健康檢查(需要spring-boot-starter-actuator依賴) eureka.client.healthcheck.enabled = true
如果需要更細粒度健康檢查,可實現com.netflix.appinfo.HealthCheckHandler接口 。 EurekaHealthCheckHandler 已實現了該接口


![}AVKR90RC]_I(CM`LA{JSIV.png 技術分享](/image/aHR0cHM6Ly9zMS41MWN0by5jb20vd3lmczAyL00wMC85OS9GMS93S2lvTDFsUExRRHdGLVFuQUFDVXRIQ0NMeHc1MTEucG5n.png)