啟動兩個client,過了一會,停了其中乙個,訪問註冊中心時,介面上顯示了紅色粗體警告資訊:
eureka server和client之間每隔30秒會進行一次心跳通訊,告訴server,client還活著。由此引出兩個名詞:
renews threshold:server期望在每分鐘中收到的心跳次數
renews (last min):上一分鐘內收到的心跳次數。
前文說到禁止註冊server自己為client,不管server是否禁止,閾值(threshold)是1。client個數為n,閾值為1+2*n(此為乙個server且禁止自註冊的情況)
如果是多個server,且開啟了自註冊,那麼就和client一樣,是對於其他的server來說就是client,是要*2的
eurake有乙個配置引數eureka.server.renewalpercentthreshold,定義了renews 和renews threshold的比值,預設值為0.85。當server在15分鐘內,比值低於percent,即少了15%的微服務心跳,server會進入自我保護狀態,self-preservation。在此狀態下,server不會刪除註冊資訊,這就有可能導致在呼叫微服務時,實際上服務並不存在。
這種保護狀態實際上是考慮了client和server之間的心跳是因為網路問題,而非服務本身問題,不能簡單的刪除註冊資訊
stackoverflow上,有人給出的建議是:
1、在生產上可以開自註冊,部署兩個server
2、在本機器上測試的時候,可以把比值調低,比如0.49
3、或者簡單粗暴把自我保護模式關閉
eureka.server.enableselfpreservation=false
關於Eureka的自我保護模式
eureka客戶試圖在同一區域與eureka伺服器進行對話。如果存在與伺服器對話的問題,或者伺服器在同一區域中不存在,則客戶端會在其他區域的伺服器上失敗。一旦伺服器開始接收流量,在伺服器上執行的所有操作都將被複製到伺服器所知道的所有節點節點。如果某個操作由於某種原因失敗了,那麼該資訊將在下一次在伺服...
理解Eureka的自我保護模式
本文我們來 eureka的自我保護模式。自我保護模式是eureka的重要特性。進入自我保護模式最直觀的體現,是eureka server首頁輸出的警告,如圖4 10所示。4 10 保護模式.png 圖4 10 eureka server自我保護模式介面 預設情況下,如果eureka server在一...
eureka自我保護時間 Eureka自我保護機制
自我保護背景 首先對eureka註冊中心需要了解的是eureka各個節點都是平等的,沒有zk中角色的概念,即使n 1個節點掛掉也不會影響其他節點的正常執行。預設情況下,如果eureka server在一定時間內 預設90秒 沒有接收到某個微服務例項的心跳,eureka server將會移除該例項。但...