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客戶端(通常就是微服務(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ā)送一次心跳來(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è)和查詢請(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)為是客戶端的問(wèn)題,剔除掉客戶端;當(dāng) Eureka 捕獲到大量的心跳失敗時(shí),則認(rèn)為可能是網(wǎng)絡(luò)問(wèn)題,進(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ú)效的服務(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í)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python 寫(xiě)一個(gè)文件分發(fā)小程序2. Python本地及虛擬解釋器配置過(guò)程解析3. Python importlib模塊重載使用方法詳解4. Vue3中使用this的詳細(xì)教程5. Python 利用flask搭建一個(gè)共享服務(wù)器的步驟6. Python中Anaconda3 安裝gdal庫(kù)的方法7. 用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試8. Python自動(dòng)化之定位方法大殺器xpath9. Python類(lèi)綁定方法及非綁定方法實(shí)例解析10. Python Selenium破解滑塊驗(yàn)證碼最新版(GEETEST95%以上通過(guò)率)
