springCloud服務(wù)注冊(cè)Eureka實(shí)現(xiàn)過(guò)程圖解
介紹
Eureka 是Netfix開(kāi)發(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客戶(hù)端(通常就是微服務(wù)中的客戶(hù)端和服務(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ā)送一次心跳來(lái)續(xù)約,通過(guò)續(xù)約告訴Eureka Server 該服務(wù)提供方仍然存在,沒(méi)有出現(xiàn)問(wèn)題,正常情況下,如果Eureka Server在90s內(nèi)沒(méi)有收到服務(wù)提供方的續(xù)約,它會(huì)將實(shí)例從注冊(cè)中心刪除(房東定期告訴中介,我的房子還外租(續(xù)約),中介就會(huì)保留房屋信息)

服務(wù)剔除Eriction
在默認(rèn)情況下,當(dāng)服務(wù)提供方連續(xù)90s沒(méi)有向注冊(cè)中心進(jìn)行續(xù)約,即心跳,注冊(cè)中心會(huì)將該服務(wù)從服務(wù)注冊(cè)列表中剔除(房東定期聯(lián)系中介告訴他房子還續(xù)約,如果中介長(zhǎng)時(shí)間沒(méi)有收到房東的續(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格式來(lái)獲取注冊(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ù)提供方信息后,就可以通過(guò)Http請(qǐng)求調(diào)用對(duì)應(yīng)的服務(wù);服務(wù)提供者有多個(gè)時(shí),服務(wù)消費(fèi)方會(huì)通過(guò)Ribbon自動(dòng)進(jìn)行負(fù)載均衡
自我保護(hù)機(jī)制
默認(rèn)情況下,如果注冊(cè)中心在90秒內(nèi)沒(méi)有接受到某個(gè)微服務(wù)實(shí)例的心跳,會(huì)注銷(xiāo)該實(shí)例,但是在微服務(wù)架構(gòu)下服務(wù)之間通常都是跨進(jìn)程調(diào)用,我那果洛通信往往會(huì)面臨這各種問(wèn)題,比如微服務(wù)狀態(tài)正常,網(wǎng)絡(luò)分區(qū)故障,導(dǎo)致實(shí)例被注銷(xiāo)。大量實(shí)例被注銷(xiāo),會(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í)間沒(méi)收到心跳而應(yīng)該過(guò)期的服務(wù)
2.Eureka仍然能夠接受新服務(wù)的注冊(cè)和查詢(xún)請(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è)別客戶(hù)端出現(xiàn)心跳失聯(lián)時(shí),則認(rèn)為是客戶(hù)端的問(wèn)題,剔除掉客戶(hù)端;當(dāng) Eureka 捕獲到大量的心跳失敗時(shí),則認(rèn)為可能是網(wǎng)絡(luò)問(wèn)題,進(jìn)入自我保護(hù)機(jī)制;當(dāng)客戶(hù)端心跳恢復(fù)時(shí),Eureka 會(huì)自動(dòng)退出自我保護(hù)機(jī)制。
如果在保護(hù)期內(nèi)剛好這個(gè)服務(wù)提供者非正常下線了,此時(shí)服務(wù)消費(fèi)者就會(huì)拿到一個(gè)無(wú)效的服務(wù)實(shí)例,即會(huì)調(diào)用失敗。對(duì)于這個(gè)問(wèn)題需要服務(wù)消費(fèi)者端要有一些容錯(cuò)機(jī)制,如重試,斷路器等。
通過(guò)在 Eureka Server 配置如下參數(shù),開(kāi)啟或者關(guān)閉保護(hù)機(jī)制,生產(chǎn)環(huán)境建議打開(kāi):

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring?Cloud?Eureka服務(wù)注冊(cè)中心入門(mén)流程分析
- springcloud client指定注冊(cè)到eureka的ip與端口號(hào)方式
- springboot2.0和springcloud Finchley版項(xiàng)目搭建(包含eureka,gateWay,F(xiàn)reign,Hystrix)
- Spring-cloud-eureka使用feign調(diào)用服務(wù)接口
- 詳解spring-cloud與netflixEureka整合(注冊(cè)中心)
- Spring Eureka 未授權(quán)訪問(wèn)漏洞修復(fù)問(wèn)題小結(jié)
相關(guān)文章
java實(shí)例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)
下面小編就為大家?guī)?lái)一篇java實(shí)例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
springBoot集成redis的key,value序列化的相關(guān)問(wèn)題
這篇文章主要介紹了springBoot集成redis的key,value序列化的相關(guān)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
簡(jiǎn)單學(xué)習(xí)Java API 設(shè)計(jì)實(shí)踐
API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件的以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。需要的可以了解一下2019-06-06
Java中浮點(diǎn)數(shù)精度問(wèn)題的解決方法
這篇文章給大家介紹了Java中浮點(diǎn)數(shù)精度問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),有問(wèn)題描述有原因分析,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-10-10
新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個(gè)web項(xiàng)目(圖文教程)
這篇文章主要介紹了新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個(gè)web項(xiàng)目的圖文教程,需要的朋友可以參考下2018-01-01
Java中統(tǒng)計(jì)字符個(gè)數(shù)以及反序非相同字符的方法詳解
本篇文章是對(duì)Java中統(tǒng)計(jì)字符個(gè)數(shù)以及反序非相同字符的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
application.yaml與bootstrap.yaml的使用
這篇文章主要介紹了application.yaml與bootstrap.yaml的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
springboot整合x(chóng)xl-job的實(shí)現(xiàn)示例
本文主要介紹了springboot整合x(chóng)xl-job的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

