springCloud服務(wù)注冊(cè)Eureka實(shí)現(xiàn)過程圖解
介紹
Eureka 是Netfix開發(fā)的,一個(gè)基于Rest服務(wù)的,服務(wù)注冊(cè)與發(fā)現(xiàn)的組件。
主要包括兩個(gè)組件:Eureka Server和Eureka Client
Eureka Server:注冊(cè)中心,提供服務(wù)注冊(cè)與發(fā)現(xiàn)
Eureka Client:java客戶端(通常就是微服務(wù)中的客戶端和服務(wù)端)

上圖簡(jiǎn)要描述了Eureka的基本架構(gòu),由3個(gè)角色組成:
1.Eureka Server(注冊(cè)中心,相當(dāng)于中介)
2.Service Provider(服務(wù)提供方,相當(dāng)于房東)
3.Service Consumer(服務(wù)消費(fèi)方,相當(dāng)于租客)
服務(wù)注冊(cè)Register
當(dāng)eureka提供方(provider)向Eureka Server注冊(cè)時(shí),它提供自身的元數(shù)據(jù),例如:ip地址,端口,運(yùn)行狀況指示符等(房東在中介登記房屋信息,比如:面積,價(jià)格,地段)
服務(wù)續(xù)約Renew
服務(wù)提供方(provider)每隔30s(默認(rèn))發(fā)送一次心跳來續(xù)約,通過續(xù)約告訴Eureka Server 該服務(wù)提供方仍然存在,沒有出現(xiàn)問題,正常情況下,如果Eureka Server在90s內(nèi)沒有收到服務(wù)提供方的續(xù)約,它會(huì)將實(shí)例從注冊(cè)中心刪除(房東定期告訴中介,我的房子還外租(續(xù)約),中介就會(huì)保留房屋信息)

服務(wù)剔除Eriction
在默認(rèn)情況下,當(dāng)服務(wù)提供方連續(xù)90s沒有向注冊(cè)中心進(jìn)行續(xù)約,即心跳,注冊(cè)中心會(huì)將該服務(wù)從服務(wù)注冊(cè)列表中剔除(房東定期聯(lián)系中介告訴他房子還續(xù)約,如果中介長(zhǎng)時(shí)間沒有收到房東的續(xù)約信息,中介會(huì)將他的房屋信息下架)
獲取注冊(cè)列表信息FetchRegistries
服務(wù)消費(fèi)方從注冊(cè)中心獲取注冊(cè)表信息,并將其緩存到本地,消費(fèi)方會(huì)使用該信息查找其他服務(wù),從而進(jìn)行遠(yuǎn)程調(diào)用,該注冊(cè)列表定期30S更新一次,每次返回注冊(cè)列表信息可能與服務(wù)消費(fèi)方緩存信息不同,服務(wù)消費(fèi)方會(huì)自動(dòng)處理,重新獲取整個(gè)注冊(cè)表信息,eureka Server和Eureka Client可以使用JSON/XMl格式進(jìn)行通信,默認(rèn)情況下Eureka Client使用Json格式來獲取注冊(cè)列表信息(租客去中介獲取所有的房屋信息,而且租客為了獲取最新的房屋 信息會(huì)定期向中介獲取并更新本地列表)
獲取服務(wù)是服務(wù)消費(fèi)者的基礎(chǔ),所以必有兩個(gè)重要參數(shù)需要注意:

服務(wù)下線Cancel
服務(wù)提供方在程序關(guān)閉時(shí)向注冊(cè)中心發(fā)送取消請(qǐng)求,發(fā)送后該服務(wù)提供方的信息將從注冊(cè)中心的服務(wù)列表中刪除(房東告訴中介房子不租了,中介將此房子的信息刪除),該下線請(qǐng)求不會(huì)自動(dòng)完成,需要調(diào)用:

遠(yuǎn)程調(diào)用Remote Call
當(dāng)服務(wù)消費(fèi)方從注冊(cè)中心獲取到服務(wù)提供方信息后,就可以通過Http請(qǐng)求調(diào)用對(duì)應(yīng)的服務(wù);服務(wù)提供者有多個(gè)時(shí),服務(wù)消費(fèi)方會(huì)通過Ribbon自動(dòng)進(jìn)行負(fù)載均衡
自我保護(hù)機(jī)制
默認(rèn)情況下,如果注冊(cè)中心在90秒內(nèi)沒有接受到某個(gè)微服務(wù)實(shí)例的心跳,會(huì)注銷該實(shí)例,但是在微服務(wù)架構(gòu)下服務(wù)之間通常都是跨進(jìn)程調(diào)用,我那果洛通信往往會(huì)面臨這各種問題,比如微服務(wù)狀態(tài)正常,網(wǎng)絡(luò)分區(qū)故障,導(dǎo)致實(shí)例被注銷。大量實(shí)例被注銷,會(huì)威脅到整個(gè)微服務(wù)架構(gòu)的可用性,所以eureka就有了自我保護(hù)機(jī)制,Eureka Server 在運(yùn)行期間會(huì)去統(tǒng)計(jì)心跳失敗比例在 15 分鐘之內(nèi)是否低于 85%,如果低于 85%,Eureka Server 即會(huì)進(jìn)入自我保護(hù)機(jī)制
Eureka Server 觸發(fā)自我保護(hù)機(jī)制后,頁(yè)面會(huì)出現(xiàn)提示:

Eureka Server 進(jìn)入自我保護(hù)機(jī)制,會(huì)出現(xiàn)以下幾種情況:
1.Eureka不再?gòu)淖?cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒收到心跳而應(yīng)該過期的服務(wù)
2.Eureka仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求,但是不會(huì)被同步到其他節(jié)點(diǎn)上
3.當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前實(shí)例新的注冊(cè)信息會(huì)被同步到其他節(jié)點(diǎn)上
Eureka 自我保護(hù)機(jī)制是為了防止誤殺服務(wù)而提供的一個(gè)機(jī)制。當(dāng)個(gè)別客戶端出現(xiàn)心跳失聯(lián)時(shí),則認(rèn)為是客戶端的問題,剔除掉客戶端;當(dāng) Eureka 捕獲到大量的心跳失敗時(shí),則認(rèn)為可能是網(wǎng)絡(luò)問題,進(jìn)入自我保護(hù)機(jī)制;當(dāng)客戶端心跳恢復(fù)時(shí),Eureka 會(huì)自動(dòng)退出自我保護(hù)機(jī)制。
如果在保護(hù)期內(nèi)剛好這個(gè)服務(wù)提供者非正常下線了,此時(shí)服務(wù)消費(fèi)者就會(huì)拿到一個(gè)無效的服務(wù)實(shí)例,即會(huì)調(diào)用失敗。對(duì)于這個(gè)問題需要服務(wù)消費(fèi)者端要有一些容錯(cuò)機(jī)制,如重試,斷路器等。
通過在 Eureka Server 配置如下參數(shù),開啟或者關(guān)閉保護(hù)機(jī)制,生產(chǎn)環(huán)境建議打開:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何在JDK 9中更簡(jiǎn)潔使用 try-with-resources 語句
本文詳細(xì)介紹了自 JDK 7 引入的 try-with-resources 語句的原理和用法,以及介紹了 JDK 9 對(duì) try-with-resources 的改進(jìn),使得用戶可以更加方便、簡(jiǎn)潔的使用 try-with-resources 語句。,需要的朋友可以參考下2019-06-06
關(guān)于@SpringBootApplication與@SpringBootTest的區(qū)別及用法
這篇文章主要介紹了關(guān)于@SpringBootApplication與@SpringBootTest的區(qū)別及用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java線程編程中isAlive()和join()的使用詳解
這篇文章主要介紹了Java線程編程中isAlive()和join()的使用詳解,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
使用idea+gradle編譯spring5.x.x源碼分析
這篇文章主要介紹了idea?+?gradle編譯spring5.x.x源碼,在編譯spring5源碼時(shí)需要將項(xiàng)目導(dǎo)入idea中然后編譯配置,本文給大家講解的非常詳細(xì),需要的朋友可以參考下2022-04-04
SpringBoot的API文檔生成工具SpringDoc使用詳解
這篇文章主要為大家介紹了SpringBoot的API文檔生成工具SpringDoc使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
詳解Java如何實(shí)現(xiàn)有效的并發(fā)處理
隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,現(xiàn)代軟件系統(tǒng)對(duì)于并發(fā)性能的要求越來越高,如何學(xué)習(xí)和掌握并發(fā)編程技術(shù)成為了Java開發(fā)人員必備的技能之一,本文主要介紹了Java并發(fā)編程的相關(guān)概念、原理和實(shí)踐技巧,感興趣的可以了解下2023-11-11
解決2022.3.1版本中?IDEA中?XML文件提示屎黃色背景的方法
這篇文章主要介紹了解決2022.3.1版本中?IDEA中?XML文件屎黃色背景?的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01

