本文我們來探討Eureka的自我保護模式。自我保護模式是Eureka的重要特性。進入自我保護模式最直觀的體現(xiàn),是Eureka Server首頁輸出的警告,如圖4-10所示。
圖4-10 Eureka Server自我保護模式界面
默認情況下,如果Eureka Server在一定時間內(nèi)沒有接收到某個微服務(wù)實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當(dāng)網(wǎng)絡(luò)分區(qū)故障發(fā)生時,微服務(wù)與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務(wù)本身其實是健康的,此時本不應(yīng)該注銷這個微服務(wù)。
Eureka通過“自我保護模式”來解決這個問題——當(dāng)Eureka Server節(jié)點在短時間內(nèi)丟失過多客戶端時(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個節(jié)點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務(wù))。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,該Eureka Server節(jié)點會自動退出自我保護模式。
綜上,自我保護模式是一種應(yīng)對網(wǎng)絡(luò)異常的安全保護措施。它的架構(gòu)哲學(xué)是寧可同時保留所有微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)都會保留),也不盲目注銷任何健康的微服務(wù)。使用自我保護模式,可以讓Eureka集群更加的健壯、穩(wěn)定。
在Spring Cloud中,可以使用eureka.server.enable-self-preservation = false禁用自我保
