javascript
Spring Cloud Eureka 全解 (5) - 自我保护机制
本文基于SpringCloud-Dalston.SR5
自我保護機制
關閉自我保護機制(默認是打開的):eureka.server.enable-self-preservation=false
自我保護機制:默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該注銷這個微服務。
Eureka通過“自我保護模式”來解決這個問題——當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網絡分區故障),那么這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務注冊表中的信息,不再刪除服務注冊表中的數據(也就是不會注銷任何微服務)。當網絡故障恢復后,該Eureka Server節點會自動退出自我保護模式。
綜上,自我保護模式是一種應對網絡異常的安全保護措施。它的架構哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留),也不盲目注銷任何健康的微服務。使用自我保護模式,可以讓Eureka集群更加的健壯、穩定。
但是,在我們實際生產中,我們云環境同一個Region下不會發生大規模網絡分區狀況,所以沒有啟用自我保護。
相關參數:eureka.server.renewalPercentThreshold = 0.85
整體邏輯
在每一個服務實例注冊時:
expectedNumberOfRenewsPerMin += 2 numberOfRenewsPerMinThreshold = RenewalPercentThreshold*numberOfRenewsPerMinThreshold無論你設置心跳時間是多少,expectedNumberOfRenewsPerMin都是+2(默認心跳時間是30s,每分鐘有60s,所以+2,但是沒有根據真正的心跳時間修改,應該算是個缺陷)
在收到心跳時:
renewsLastMin.increment()當renewsLastMin<numberOfRenewsPerMinThreshold,就會觸發自我保護,不會失效過期服務
總結
以上是生活随笔為你收集整理的Spring Cloud Eureka 全解 (5) - 自我保护机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天带软件测试2班学员就业前的复习分析(
- 下一篇: 使用 JS 循环解决经典数学问题!