Eureka自我保护机制、健康检查的作用
? ? ? ?本文我們來探討Eureka的自我保護模式。自我保護模式是Eureka的重要特性。進入自我保護模式最直觀的體現,是Eureka Server首頁輸出的警告,如圖:
默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該注銷這個微服務。Eureka通過“自我保護模式”來解決這個問題——當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網絡分區故障),那么這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務注冊表中的信息,不再刪除服務注冊表中的數據(也就是不會注銷任何微服務)。當網絡故障恢復后,該Eureka Server節點會自動退出自我保護模式。綜上,自我保護模式是一種應對網絡異常的安全保護措施。它的架構哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留),也不盲目注銷任何健康的微服務。使用自我保護模式,可以讓Eureka集群更加的健壯、穩定。在Spring Cloud中,可以使用eureka.server.enable-self-preservation = false?禁用自我保護模式。
Eureka自我保護機制
承接上篇文章的三個項目(spring-boot-order、spring-boot-user、spring-cloud-eurekasingle),兩個客戶端一個服務端的項目進行修改,深入理解Eureka的自我保護模式。默認Eureka是開啟自我保護的。我們來做個測試,我們先啟動三個工程看看效果!
接著我們關閉掉order的服務,刷新列表看看!如下:
我們除了看到了一行紅色的警告信息,還發現了一件神奇的事情,就是我們的服務實例雖然被kill了,但是在服務注冊中心他還是存在的(由于eureka的自我保護機制,即使我們已經關閉掉了order的服務,eureka的注冊中心依然會保留其映射狀態!)。這就是Eureka自我保護機制,他不會剔除已經掛掉的服務,他會認為這個服務是在嘗試重新連接的。我們在開發過程中肯定是不希望這樣的,不利于開發。我們可以關閉Eureka的自我保護機制(實際生產環境不建議關閉)。
接下來關閉這個服務看看效果,這里需要注意eureka的服務剔除時間一定要大于客戶端告訴服務端的時間,以本例為參考即:eviction-interval-timer-in-ms: 5000>lease-expiration-duration-in-seconds: 20
客戶端配置(order和user配置一樣)如下所示:
# 心跳檢測檢測與續約時間,測試時將值設置設置小些,保證服務關閉后注冊中心能及時踢出服務 配置說明lease-renewal-interval-in-seconds: 10 # lease-renewal-interval-in-seconds 每間隔10s,向服務端發送一次心跳,證明自己依然”存活“lease-expiration-duration-in-seconds: 20 # lease-expiration-duration-in-seconds 告訴服務端,如果我20s之內沒有給你發心跳,就代表我“死”了,將我踢出掉。服務端添加配置如下所示:
server:enable-self-preservation: false #關閉保護機制,以確保注冊中心將不可用的實例正確剔除eviction-interval-timer-in-ms: 5000 #(代表是5秒,單位是毫秒,清理失效服務的間隔 )重新啟動三個項目,待注冊列表正常后關閉order客戶端!禁用自我保護模式后eureka的服務端會給出提示,如下所示:
三個項目啟動成功后如下所示:
關閉order服務,再刷新列表查看,如下所示:
此時我們發現,紅色警告變成了自我保護被關閉的警告,且實例被注冊中心剔除,表明此時自我保護機制被關閉。
健康檢查
人會生病,就像人一樣服務有時候也會出現異常情況,我們也需要知道某個服務的健康狀況。我們可以通過添加如下依賴,開啟某個服務的健康檢查。以user為例需要在pom文件中引入對應的jar包
<!--健康檢查依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>在application中添加配置,開啟健康檢查:
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/healthcheck:enabled: true然后啟動eureka服務端和user客戶端,訪問http://localhost:8083/actuator/health,查看健康信息,如下所示:
詳細的參考文章:http://www.itmuch.com/spring-cloud/finchley-3/??
本文參考了文章:https://www.jianshu.com/p/df61a3273528
至此今天的任務就算完成了!接下里我們就開始學習eurake的高可用了,即分布式集群!
項目路徑:
鏈接:https://pan.baidu.com/s/1pNFlsE5f9e2J2T3wIRpasg?
提取碼:4bgp?
復制這段內容后打開百度網盤手機App,操作更方便哦
總結
以上是生活随笔為你收集整理的Eureka自我保护机制、健康检查的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还在使用Window原始的CMD界面?教
- 下一篇: Linux libvirt目录,在Lin