SpringCloud Eureka自我保護機制

自我保護背景

首先對Eureka註冊中心須要瞭解的是Eureka各個節點都是平等的,沒有ZK中角色的概念, 即便N-1個節點掛掉也不會影響其餘節點的正常運行。git

默認狀況下,若是Eureka Server在必定時間內(默認90秒)沒有接收到某個微服務實例的心跳,Eureka Server將會移除該實例。可是當網絡分區故障發生時,微服務與Eureka Server之間沒法正常通訊,而微服務自己是正常運行的,此時不該該移除這個微服務,因此引入了自我保護機制。github

自我保護機制

官方對於自我保護機制的定義:安全

https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication微信

自我保護模式正是一種針對網絡異常波動的安全保護措施,使用自我保護模式能使Eureka集羣更加的健壯、穩定的運行。網絡

自我保護機制的工做機制是若是在15分鐘內超過85%的客戶端節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,Eureka Server自動進入自我保護機制,此時會出現如下幾種狀況:微服務

一、Eureka Server再也不從註冊列表中移除由於長時間沒收到心跳而應該過時的服務。
二、Eureka Server仍然可以接受新服務的註冊和查詢請求,可是不會被同步到其它節點上,保證當前節點依然可用。
三、當網絡穩定時,當前Eureka Server新的註冊信息會被同步到其它節點中。code

所以Eureka Server能夠很好的應對因網絡故障致使部分節點失聯的狀況,而不會像ZK那樣若是有一半不可用的狀況會致使整個集羣不可用而變成癱瘓。server

自我保護開關

Eureka自我保護機制,經過配置eureka.server.enable-self-preservation來true打開/false禁用自我保護機制,默認打開狀態,建議生產環境打開此配置。教程

開發環境配置

開發環境中若是要實現服務失效能自動移除,只須要修改如下配置。開發

一、 註冊中心關閉自我保護機制,修改檢查失效服務的時間。

eureka:
  server: 
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000

二、 微服務修改減短服務心跳的時間。

# 默認90秒
lease-expiration-duration-in-seconds: 10
# 默認30秒
lease-renewal-interval-in-seconds: 3

以上配置建議在生產環境使用默認的時間配置。

推薦:Spring Boot & Cloud 最強技術教程

掃描關注咱們的微信公衆號,乾貨天天更新。

image

相關文章
相關標籤/搜索