springCloud服務(wù)注冊Eureka實現(xiàn)過程圖解
介紹
Eureka 是Netfix開發(fā)的,一個基于Rest服務(wù)的,服務(wù)注冊與發(fā)現(xiàn)的組件。
主要包括兩個組件:Eureka Server和Eureka Client
Eureka Server:注冊中心,提供服務(wù)注冊與發(fā)現(xiàn)
Eureka Client:java客戶端(通常就是微服務(wù)中的客戶端和服務(wù)端)
上圖簡要描述了Eureka的基本架構(gòu),由3個角色組成:
1.Eureka Server(注冊中心,相當(dāng)于中介)
2.Service Provider(服務(wù)提供方,相當(dāng)于房東)
3.Service Consumer(服務(wù)消費方,相當(dāng)于租客)
服務(wù)注冊Register
當(dāng)eureka提供方(provider)向Eureka Server注冊時,它提供自身的元數(shù)據(jù),例如:ip地址,端口,運行狀況指示符等(房東在中介登記房屋信息,比如:面積,價格,地段)
服務(wù)續(xù)約Renew
服務(wù)提供方(provider)每隔30s(默認(rèn))發(fā)送一次心跳來續(xù)約,通過續(xù)約告訴Eureka Server 該服務(wù)提供方仍然存在,沒有出現(xiàn)問題,正常情況下,如果Eureka Server在90s內(nèi)沒有收到服務(wù)提供方的續(xù)約,它會將實例從注冊中心刪除(房東定期告訴中介,我的房子還外租(續(xù)約),中介就會保留房屋信息)
服務(wù)剔除Eriction
在默認(rèn)情況下,當(dāng)服務(wù)提供方連續(xù)90s沒有向注冊中心進(jìn)行續(xù)約,即心跳,注冊中心會將該服務(wù)從服務(wù)注冊列表中剔除(房東定期聯(lián)系中介告訴他房子還續(xù)約,如果中介長時間沒有收到房東的續(xù)約信息,中介會將他的房屋信息下架)
獲取注冊列表信息FetchRegistries
服務(wù)消費方從注冊中心獲取注冊表信息,并將其緩存到本地,消費方會使用該信息查找其他服務(wù),從而進(jìn)行遠(yuǎn)程調(diào)用,該注冊列表定期30S更新一次,每次返回注冊列表信息可能與服務(wù)消費方緩存信息不同,服務(wù)消費方會自動處理,重新獲取整個注冊表信息,eureka Server和Eureka Client可以使用JSON/XMl格式進(jìn)行通信,默認(rèn)情況下Eureka Client使用Json格式來獲取注冊列表信息(租客去中介獲取所有的房屋信息,而且租客為了獲取最新的房屋 信息會定期向中介獲取并更新本地列表)
獲取服務(wù)是服務(wù)消費者的基礎(chǔ),所以必有兩個重要參數(shù)需要注意:
服務(wù)下線Cancel
服務(wù)提供方在程序關(guān)閉時向注冊中心發(fā)送取消請求,發(fā)送后該服務(wù)提供方的信息將從注冊中心的服務(wù)列表中刪除(房東告訴中介房子不租了,中介將此房子的信息刪除),該下線請求不會自動完成,需要調(diào)用:
遠(yuǎn)程調(diào)用Remote Call
當(dāng)服務(wù)消費方從注冊中心獲取到服務(wù)提供方信息后,就可以通過Http請求調(diào)用對應(yīng)的服務(wù);服務(wù)提供者有多個時,服務(wù)消費方會通過Ribbon自動進(jìn)行負(fù)載均衡
自我保護(hù)機(jī)制
默認(rèn)情況下,如果注冊中心在90秒內(nèi)沒有接受到某個微服務(wù)實例的心跳,會注銷該實例,但是在微服務(wù)架構(gòu)下服務(wù)之間通常都是跨進(jìn)程調(diào)用,我那果洛通信往往會面臨這各種問題,比如微服務(wù)狀態(tài)正常,網(wǎng)絡(luò)分區(qū)故障,導(dǎo)致實例被注銷。大量實例被注銷,會威脅到整個微服務(wù)架構(gòu)的可用性,所以eureka就有了自我保護(hù)機(jī)制,Eureka Server 在運行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低于 85%,如果低于 85%,Eureka Server 即會進(jìn)入自我保護(hù)機(jī)制
Eureka Server 觸發(fā)自我保護(hù)機(jī)制后,頁面會出現(xiàn)提示:
Eureka Server 進(jìn)入自我保護(hù)機(jī)制,會出現(xiàn)以下幾種情況:
1.Eureka不再從注冊列表中移除因為長時間沒收到心跳而應(yīng)該過期的服務(wù)
2.Eureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點上
3.當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實例新的注冊信息會被同步到其他節(jié)點上
Eureka 自我保護(hù)機(jī)制是為了防止誤殺服務(wù)而提供的一個機(jī)制。當(dāng)個別客戶端出現(xiàn)心跳失聯(lián)時,則認(rèn)為是客戶端的問題,剔除掉客戶端;當(dāng) Eureka 捕獲到大量的心跳失敗時,則認(rèn)為可能是網(wǎng)絡(luò)問題,進(jìn)入自我保護(hù)機(jī)制;當(dāng)客戶端心跳恢復(fù)時,Eureka 會自動退出自我保護(hù)機(jī)制。
如果在保護(hù)期內(nèi)剛好這個服務(wù)提供者非正常下線了,此時服務(wù)消費者就會拿到一個無效的服務(wù)實例,即會調(diào)用失敗。對于這個問題需要服務(wù)消費者端要有一些容錯機(jī)制,如重試,斷路器等。
通過在 Eureka Server 配置如下參數(shù),開啟或者關(guān)閉保護(hù)機(jī)制,生產(chǎn)環(huán)境建議打開:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 基于PHP做個圖片防盜鏈2. ASP.NET MVC使用Boostrap實現(xiàn)產(chǎn)品展示、查詢、排序、分頁3. XML在語音合成中的應(yīng)用4. asp.net core 認(rèn)證和授權(quán)實例詳解5. .NET中實現(xiàn)對象數(shù)據(jù)映射示例詳解6. php使用正則驗證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)7. ASP.NET MVC把數(shù)據(jù)庫中枚舉項的數(shù)字轉(zhuǎn)換成文字8. 如何使用ASP.NET Core 配置文件9. jscript與vbscript 操作XML元素屬性的代碼10. 基于javaweb+jsp實現(xiàn)企業(yè)車輛管理系統(tǒng)
