淺談Spring Cloud Eureka 自我保護(hù)機(jī)制
自我保護(hù)背景
首先對(duì)Eureka注冊(cè)中心需要了解的是Eureka各個(gè)節(jié)點(diǎn)都是平等的,沒有ZK中角色的概念, 即使N-1個(gè)節(jié)點(diǎn)掛掉也不會(huì)影響其他節(jié)點(diǎn)的正常運(yùn)行。
默認(rèn)情況下,如果Eureka Server在一定時(shí)間內(nèi)(默認(rèn)90秒)沒有接收到某個(gè)微服務(wù)實(shí)例的心跳,Eureka Server將會(huì)移除該實(shí)例。但是當(dāng)網(wǎng)絡(luò)分區(qū)故障發(fā)生時(shí),微服務(wù)與Eureka Server之間無法正常通信,而微服務(wù)本身是正常運(yùn)行的,此時(shí)不應(yīng)該移除這個(gè)微服務(wù),所以引入了自我保護(hù)機(jī)制。
自我保護(hù)機(jī)制
官方對(duì)于自我保護(hù)機(jī)制的定義:https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication
自我保護(hù)模式正是一種針對(duì)網(wǎng)絡(luò)異常波動(dòng)的安全保護(hù)措施,使用自我保護(hù)模式能使Eureka集群更加的健壯、穩(wěn)定的運(yùn)行。
自我保護(hù)機(jī)制的工作機(jī)制是如果在15分鐘內(nèi)超過85%的客戶端節(jié)點(diǎn)都沒有正常的心跳,那么Eureka就認(rèn)為客戶端與注冊(cè)中心出現(xiàn)了網(wǎng)絡(luò)故障,Eureka Server自動(dòng)進(jìn)入自我保護(hù)機(jī)制,此時(shí)會(huì)出現(xiàn)以下幾種情況:
1、Eureka Server不再從注冊(cè)列表中移除因?yàn)殚L時(shí)間沒收到心跳而應(yīng)該過期的服務(wù)。\
2、Eureka Server仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求,但是不會(huì)被同步到其它節(jié)點(diǎn)上,保證當(dāng)前節(jié)點(diǎn)依然可用。\
3、當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前Eureka Server新的注冊(cè)信息會(huì)被同步到其它節(jié)點(diǎn)中。
因此Eureka Server可以很好的應(yīng)對(duì)因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失聯(lián)的情況,而不會(huì)像ZK那樣如果有一半不可用的情況會(huì)導(dǎo)致整個(gè)集群不可用而變成癱瘓。
自我保護(hù)開關(guān)
Eureka自我保護(hù)機(jī)制,通過配置eureka.server.enable-self-preservation來true打開/false禁用自我保護(hù)機(jī)制,默認(rèn)打開狀態(tài),建議生產(chǎn)環(huán)境打開此配置。
開發(fā)環(huán)境配置
開發(fā)環(huán)境中如果要實(shí)現(xiàn)服務(wù)失效能自動(dòng)移除,只需要修改以下配置。
1、 注冊(cè)中心關(guān)閉自我保護(hù)機(jī)制,修改檢查失效服務(wù)的時(shí)間。
eureka: server: enable-self-preservation: false eviction-interval-timer-in-ms: 3000
2、 微服務(wù)修改減短服務(wù)心跳的時(shí)間。
# 默認(rèn)90秒 lease-expiration-duration-in-seconds: 10 # 默認(rèn)30秒 lease-renewal-interval-in-seconds: 3
以上配置建議在生產(chǎn)環(huán)境使用默認(rèn)的時(shí)間配置。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 細(xì)說Springcloud eureka的幾種主動(dòng)下線服務(wù)的方式
- spring cloud eureka微服務(wù)之間的調(diào)用詳解
- 詳解SpringCloud eureka服務(wù)狀態(tài)監(jiān)聽
- Spring Cloud中Eureka開啟密碼認(rèn)證的實(shí)例
- Spring cloud Eureka注冊(cè)中心搭建的方法
- SpringCloud之服務(wù)注冊(cè)與發(fā)現(xiàn)Spring Cloud Eureka實(shí)例代碼
- 詳解Spring Cloud Eureka多網(wǎng)卡配置總結(jié)
- Spring Cloud構(gòu)建Eureka應(yīng)用的方法
- Spring Cloud EureKa Ribbon 服務(wù)注冊(cè)發(fā)現(xiàn)與調(diào)用
- 單臺(tái)Spring Cloud Eureka升級(jí)到三臺(tái)Eureka高可用集群
相關(guān)文章
java?JIT調(diào)優(yōu)的實(shí)現(xiàn)
JIT編譯器調(diào)優(yōu)方法包括啟用JIT日志、優(yōu)化熱點(diǎn)代碼、循環(huán)展開、內(nèi)聯(lián)優(yōu)化、逃逸分析以及使用性能分析工具等,本文主要介紹了java?JIT調(diào)優(yōu)的實(shí)現(xiàn),感興趣的可以了解一下2025-02-02
解決springboot導(dǎo)入失敗,yml未識(shí)別的問題
這篇文章主要介紹了解決springboot導(dǎo)入失敗,yml未識(shí)別的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法
這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Java 不使用第三方變量交換兩個(gè)變量值的四種方法詳解
這篇文章主要介紹了四種不使用第三方變量交換兩個(gè)變量值的方法。文中對(duì)于四種方法進(jìn)行了詳細(xì)的分析,需要的小伙伴們可以跟隨小編一起學(xué)習(xí)一下2021-12-12
使用springboot結(jié)合vue實(shí)現(xiàn)sso單點(diǎn)登錄
這篇文章主要為大家詳細(xì)介紹了如何使用springboot+vue實(shí)現(xiàn)sso單點(diǎn)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Java HashMap實(shí)現(xiàn)原理分析(一)
這篇文章主要介紹了Java HashMap實(shí)現(xiàn)原理的分析,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-08-08
MyBatis的一級(jí)緩存和二級(jí)緩存以及優(yōu)點(diǎn)說明
MyBatis的緩存機(jī)制包括一級(jí)緩存和二級(jí)緩存,一級(jí)緩存是SqlSession級(jí)別的緩存,開啟默認(rèn),二級(jí)緩存是跨SqlSession的緩存,需要手動(dòng)開啟和配置,二級(jí)緩存的優(yōu)點(diǎn)是減少數(shù)據(jù)庫訪問、提高性能、降低負(fù)載和提高可擴(kuò)展性,同時(shí)需要注意緩存可能導(dǎo)致的數(shù)據(jù)不一致問題2025-02-02
Java中Runnable和Callable分別什么時(shí)候使用
提到 Java 就不得不說多線程了,就算你不想說,面試官也得讓你說呀,那說到線程,就不得不說Runnable和Callable這兩個(gè)家伙了,二者在什么時(shí)候使用呢,下面就來和簡單講講2023-08-08

