保護模式主要用於一組客戶端和eureka server之間存在網路分割槽場景下的保護。一旦進入保護模式,eureka server將會嘗試保護其服務登錄檔中的資訊,不再刪除服務登錄檔中的資料,也就是不會登出任何微服務。
為了防止eurekaclient可以正常執行,但是與eureka網路不通情況下,eurekaserver不會立刻將eurekaclient服務剔除。
預設情況下,如果eurekaserver在一定時間內沒有接受到某個微服務例項的心跳,eurekaserver將會登出該例項(預設90秒)。但是當網路分割槽故障發生(延時、卡頓、擁擠)時,微服務與eurekaserver之間無法正常通訊,以上行為可能變得非常危險--因為微服務本身其實是健康的,此時本不應該登出這個微服務。eureka通過「自我保護模式」來解決這個問題--當eurekaserver節點在短時間內丟失過多客戶端時(可能發生了網路分割槽故障),那麼這個節點就會進入自我保護模式。
預設情況下eurekaclient定時向eurekaserver端傳送心跳包
如果eureka在server端在一定時間內(預設90秒)沒有收到eurekaclient傳送心跳包,便會直接從服務註冊列表中剔除該服務,但是在短時間(90秒中)內丟失了大量的服務例項心跳,這時候eurekaserver會開啟自我保護機制,不會剔除該服務(該現象可能出現在如果網路不通,但是eurekaclient未出現宕機,此時如果換做別的註冊中心如果一定時間內沒有收到心跳會將剔除該服務,這樣就出現了嚴重失誤,因為客戶端還能正常傳送心跳,只是網路延遲問題,而保護機制是為了解決此問題而產生的)
禁止自我保護設定(預設是開啟)
註冊中心eureka:
instance:
hostname: erueka7001.com #eureka服務端的例項名稱
client:
register-with-eureka: false
#false表示不向註冊中心註冊自己
fetch-registry: false
#false表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要去檢索服務
service-url:
#設定與eureka server互動的位址查詢服務和註冊服務都需要依賴這個位址。
#禁止自我保護
eviction-interval-timer-in-ms: 2000 #由保護時間90秒限制改為2秒,單位毫秒
服務端eureka:
client:
register-with-eureka: true
#表示是否將自己註冊進eurekaserver預設為true
#是否從eurekaserver抓取已有的註冊資訊,預設為true。
#單節點無所謂,集群必須設定為true才能配合ribbon使用負載均衡
instance-id: payment8001 #主機名修改
prefer-ip-address: true
#訪問路徑可以顯示ip位址
#eureka客戶端向服務端傳送心跳的間隔,單位秒,預設30
lease-renewal-interval-in-seconds: 1#eureka服務端在收到最後一次心跳後等待時間上限,單位為秒,預設90,,超時將剔除服務
lease-expiration-duration-in-seconds: 2
Eureka自我保護機制
概念 預設情況下,eurekaclient會定時向eurekaserver端傳送心跳,如果eurekaserver在一定時間內沒有收到eurekaclient傳送的心跳,便會把該例項從註冊服務列表中剔除 預設是90秒 但是在短時間內丟失大量的例項心跳,這時候eurekaserver會開啟自我保護機制...
eureka自我保護機制
在eureka專案中看到乙個配置 renewal percent threshold。並不是很理解,就此學習一下eureka的自我保護機制。從這個配置說起,從字面角度來說就是心跳的百分比臨界值。我們都知道所有的服務都需要去向eureka伺服器進行註冊,並且維持心跳。這個欄位大概率和這個心跳的頻率有關...
Eureka自我保護機制
預設情況下,當eureka server在一定時間內沒有收到例項的心跳,便會把該例項從登錄檔中刪除 預設是90秒 但是,如果短時間內丟失大量的例項心跳,便會觸發eureka server的自我保護機制,比如在開發測試時,需要頻繁地重啟微服務例項,但是我們很少會把eureka server一起重啟 因...