Eureka的自我保護與健康檢查機制

Eureka的自我保護與健康檢查機制

Eureka的自我保護

Eureka的自我保護是默認開啟的如果需要關(guān)閉需要加上相關(guān)的配置谍失。

#YAML配置
eureka:
  server: 
    evictionIntervalTimerInMs: 30000 #每間隔30秒剔除一次下線的服務(wù)
    enableSelfPreservation: false #關(guān)閉Eureka的自我保護

Eureka的自我保護機制其實是為了在網(wǎng)絡(luò)狀況不穩(wěn)定的情況下仍然能在一段時間內(nèi)保存服務(wù)的地址信息捶障,防止微服務(wù)因網(wǎng)絡(luò)原因頻繁被剔除和注冊铃拇,出現(xiàn)短時間內(nèi)頻繁修改注冊信息的問題加派,也防止Eureka對服務(wù)狀態(tài)的誤判熟尉。
當(dāng)Eureka進入自我保護狀態(tài)時,Eureka頁面會出現(xiàn)紅色的提示標語熙卡。

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

實際上杖刷,我們大部分情況下會注意到這個服務(wù)明明停掉了,為什么狀態(tài)還會是UP驳癌?網(wǎng)上大部分都是一筆帶過滑燃,都是粗暴的剔除下線服務(wù),就是上面提到的直接關(guān)閉自我保護颓鲜。在微服務(wù)本地的配置里配合Eureka加上這個:

eureka:
  instance:
    # 每間隔30s表窘,向服務(wù)端發(fā)送一次心跳,證明自己依然"存活"
    lease-renewal-interval-in-seconds: 15
    # 告訴服務(wù)端甜滨,如果我60s之內(nèi)沒有給你發(fā)心跳乐严,就代表我"死"了,將我踢出掉衣摩。
    lease-expiration-duration-in-seconds: 30

的確解決了不會再輪訓(xùn)到下線的服務(wù)了昂验,可我就是想見見Eureka服務(wù)狀態(tài)里面的DOWN、OUT_OF_SERVICE艾扮、UNKNOWN的這些狀態(tài)值既琴。那么這個健康狀態(tài)對于Eureka來說誰健康與否的判決別人說的不算,自家人知道自家事泡嘴,就統(tǒng)一交給微服務(wù)自己解決甫恩,真的是好有道理

Eureka的健康檢查

客戶端需要在工程中添加組件依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>1.5.14.RELEASE</version>
</dependency>

然后在配置文件里面加上健康狀態(tài)檢查配置:

eureka:
  client:
    healthcheck:
      enabled: true

這時酌予,啟動自己的服務(wù)磺箕,通過http://localhost:port/health訪問就可以得到服務(wù)的健康狀態(tài)信息:

{"description":"Composite Discovery Client","status":"UP"}

當(dāng)這個配置設(shè)置為false時,服務(wù)將不會把健康狀態(tài)傳遞給Eureka抛虫,那么Eureka就不會再更新Status信息滞磺,但是此時仍能夠通過上面的地址獲取這個真實的狀態(tài)信息。
這個信息是怎么來的呢莱褒?
當(dāng)直接增加配置啟動項目時击困,項目啟動會報找不到HealthAggregator類的錯誤,那么可以確定Eureka的服務(wù)的健康信息是由這個類來生成的广凸,在根據(jù)配置的eureka.client.healthcheck.enabled在代碼中查找阅茶,可以找到一個注解:

@ConditionalOnProperty(value = "eureka.client.healthcheck.enabled", matchIfMissing = false)

,默認情況下谅海,健康狀態(tài)檢查接口是關(guān)閉的脸哀,當(dāng)關(guān)閉時對EurekaHealthCheckHandler這個Bean的創(chuàng)建沒有關(guān)系,/health這個url仍然能夠訪問服務(wù)扭吁,返回狀態(tài)為UP的JSON字符串撞蜂。
被注解這個類是一個內(nèi)部類:

@Configuration
@ConditionalOnProperty(value = "eureka.client.healthcheck.enabled", matchIfMissing = false)
protected static class EurekaHealthCheckHandlerConfiguration {

    @Autowired(required = false)
    private HealthAggregator healthAggregator
        = new OrderedHealthAggregator();

    @Bean
    @ConditionalOnMissingBean(HealthCheckHandler.class)
    public EurekaHealthCheckHandler eurekaHealthCheckHandler() {
        return new EurekaHealthCheckHandler(this.healthAggregator);
    }
}

可以看出當(dāng)用戶自己沒有創(chuàng)建HealthCheckHandler這個Bean時盲镶,會自己創(chuàng)建一個默認的健康狀態(tài)檢查的類,那么Eureka注冊中心就是通過客戶端的/health來獲取服務(wù)的健康狀態(tài)的蝌诡,也就是說只有在微服務(wù)自己實現(xiàn)了HealthCheckHandler這個接口并且創(chuàng)建Bean之后溉贿,Eureka中status狀態(tài)才會有變化。這個可以通過下面這個類得到印證:

org.springframework.boot.actuate.health.Status

這個類中定義了服務(wù)狀態(tài)的UNKNOWN,UP,DOWN,OUT_OF_SERVICE這四個狀態(tài)浦旱,Eureka中的Status顯示的四個狀態(tài)剛好可以對上宇色。

總結(jié)

這兩個應(yīng)該是相互配合使用的。
Eureka的自我保護是對微服務(wù)實例的地址信息進行保護颁湖,避免因一些意外情況將正常節(jié)點直接剔除宣蠕。
實例的健康檢查則是微服務(wù)與Eureka注冊中心交互正常的情況下,微服務(wù)因自己內(nèi)部原因無法正常對外提供服務(wù)甥捺,主動告訴注冊中心自己出了問題抢蚀,讓注冊中心別發(fā)新的請求過來。
Eureka使用中镰禾,兩種方式無論哪一種單獨使用都有其局限性思币,所以在正常生產(chǎn)環(huán)境下,肯定需要自己針對業(yè)務(wù)場景調(diào)整配置參數(shù)來實現(xiàn)服務(wù)的高可用羡微。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惶我,隨后出現(xiàn)的幾起案子妈倔,更是在濱河造成了極大的恐慌,老刑警劉巖绸贡,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盯蝴,死亡現(xiàn)場離奇詭異,居然都是意外死亡听怕,警方通過查閱死者的電腦和手機捧挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尿瞭,“玉大人闽烙,你說我怎么就攤上這事∩椋” “怎么了黑竞?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疏旨。 經(jīng)常有香客問我很魂,道長,這世上最難降的妖魔是什么檐涝? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任遏匆,我火速辦了婚禮法挨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幅聘。我一直安慰自己凡纳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布喊暖。 她就那樣靜靜地躺著惫企,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陵叽。 梳的紋絲不亂的頭發(fā)上狞尔,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音巩掺,去河邊找鬼偏序。 笑死,一個胖子當(dāng)著我的面吹牛胖替,可吹牛的內(nèi)容都是我干的研儒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼独令,長吁一口氣:“原來是場噩夢啊……” “哼端朵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燃箭,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冲呢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后招狸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敬拓,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年裙戏,在試婚紗的時候發(fā)現(xiàn)自己被綠了乘凸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡累榜,死狀恐怖营勤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壹罚,我是刑警寧澤冀偶,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站渔嚷,受9級特大地震影響进鸠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜形病,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一客年、第九天 我趴在偏房一處隱蔽的房頂上張望霞幅。 院中可真熱鬧,春花似錦量瓜、人聲如沸司恳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔傅。三九已至,卻和暖如春烫饼,著一層夾襖步出監(jiān)牢的瞬間猎塞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工杠纵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠耽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓比藻,卻偏偏與公主長得像铝量,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子银亲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容