自我保护机制
默認情況下,如果注冊中心在一定時間內(默認90秒)沒有接收到微服務實例的心跳,注冊中心將會移除該實例。但是當網絡故障發生時,微服務與注冊中心之間無法正常通信,而微服務本身是正常運行的,此時不應該移除這個微服務,所以此時可以引入自我保護機制。
自我保護機制
自我保護模式是一種針對網絡異常波動的安全保護措施,使用自我保護模式能使注冊中心集群更加健壯、穩定的運行。
該保護機制的目的是避免網絡連接故障,在發生網絡故障時,微服務和注冊中心之間無法正常通信,但服務本身是健康的,不應該注銷該服務,如果eureka因網絡故障而把微服務誤刪了,那即使網絡恢復了,該微服務也不會重新注冊到eureka server了,因為只有在微服務啟動的時候才會發起注冊請求,后面只會發送心跳和服務列表請求,這樣的話,該實例雖然是運行著,但永遠不會被其它服務所感知。所以,eureka server在短時間內丟失過多的客戶端心跳時,會進入自我保護模式,該模式下,eureka會保護注冊表中的信息,不在注銷任何微服務,當網絡故障恢復后,eureka會自動退出保護模式。自我保護模式可以讓集群更加健壯
但是我們在開發測試階段,需要頻繁地重啟發布,如果觸發了保護機制,則舊的服務實例沒有被刪除,這時請求有可能跑到舊的實例中,而該實例已經關閉了,這就導致請求錯誤,影響開發測試。所以,在開發測試階段,我們可以把自我保護模式關閉
注意:
因為Eurek的高可用性選擇,所以設計了自我保護機制,保護那些因為網絡問題影響的微服務不會被移除。但是也可能保護了真正出了問題的微服務。這個時候,其他微服務調用這個服務時,可能就會得到一個錯誤的結果,這種情況只能在調用端自行解決,比如通過Hystrix進行熔斷
總結
- 上一篇: 商品销售统计系统java_IMS: 基于
- 下一篇: Vue使用iview组件库