Eureka自我保護機制

2021-10-01 03:47:30 字數 1295 閱讀 6462

概念:

預設情況下,eurekaclient會定時向eurekaserver端傳送心跳,如果eurekaserver在一定時間內沒有收到eurekaclient傳送的心跳,便會把該例項從註冊服務列表中剔除(預設是90秒),但是在短時間內丟失大量的例項心跳,這時候eurekaserver會開啟自我保護機制,eureka不會踢出該服務。

自我保護機制的目的:

保護機制的目的是避免網路連線故障,在發生網路故障時,微服務和註冊中心之間無法正常通訊,但服務本身是健康的,不應該登出該服務,如果eureka因網路故障而把微服務誤刪了,那即使網路恢復了,該微服務也不會重新註冊到eureka server了,因為只有在微服務啟動的時候才會發起註冊請求,後面只會傳送心跳和服務列表請求,這樣的話,該例項雖然是執行著,但永遠不會被其它服務所感知。所以,eureka server在短時間內丟失過多的客戶端心跳時,會進入自我保護模式,該模式下,eureka會保護登錄檔中的資訊,不在登出任何微服務,當網路故障恢復後,eureka會自動退出保護模式。自我保護模式可以讓集群更加健壯。

何時開啟自我保護機制:

我們在開發測試階段,需要頻繁地重啟發布,如果觸發了保護機制,則舊的服務例項沒有被刪除,這時請求有可能跑到舊的例項中,而該例項已經關閉了,這就導致請求錯誤,影響開發測試。所以,在開發測試階段,我們可以把自我保護模式關閉。

但在生產環境,不會頻繁重啟,所以,一定要把自我保護機制開啟,否則網路一旦終端,就無法恢復。

如何配置自我保護機制:

服務端核心配置:

eureka:

server:

# 測試時關閉自我保護機制,保證不可用服務及時踢出

enable-self-preservation: false

eviction-interval-timer-in-ms: 2000 #生產環境下一般預設90s

客戶端核心配置:

eureka:

# 心跳檢測檢測與續約時間

# 測試時將值設定設定小些,保證服務關閉後註冊中心能及時踢出服務

instance:

###eureka客戶端向服務端傳送心跳的時間間隔,單位為秒(客戶端告訴服務端自己會按照該規則)

lease-renewal-interval-in-seconds: 1

####eureka服務端在收到最後一次心跳之後等待的時間上限,單位為秒,超過則剔除(客戶端告訴服務端按照此規則等待自己)

lease-expiration-duration-in-seconds: 2 #生產環境下一般預設90s

eureka自我保護機制

在eureka專案中看到乙個配置 renewal percent threshold。並不是很理解,就此學習一下eureka的自我保護機制。從這個配置說起,從字面角度來說就是心跳的百分比臨界值。我們都知道所有的服務都需要去向eureka伺服器進行註冊,並且維持心跳。這個欄位大概率和這個心跳的頻率有關...

Eureka自我保護機制

預設情況下,當eureka server在一定時間內沒有收到例項的心跳,便會把該例項從登錄檔中刪除 預設是90秒 但是,如果短時間內丟失大量的例項心跳,便會觸發eureka server的自我保護機制,比如在開發測試時,需要頻繁地重啟微服務例項,但是我們很少會把eureka server一起重啟 因...

Eureka自我保護機制

1.為什麼會產生eureka自我保護機制?為了防止eurekaclient可以正常進行,但是與eurekaserver網路不通情況下,eurekaserver不會立刻將eurekaclient服務剔除 2.什麼是自我保護模式 預設情況下,如果eurekaserver在一定時間內沒有接收到某個微服務例...