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

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

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

服務下線Cancel
服務提供方在程序關閉時向注冊中心發(fā)送取消請求,發(fā)送后該服務提供方的信息將從注冊中心的服務列表中刪除(房東告訴中介房子不租了,中介將此房子的信息刪除),該下線請求不會自動完成,需要調用:

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
java實例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)
下面小編就為大家?guī)硪黄猨ava實例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
springBoot集成redis的key,value序列化的相關問題
這篇文章主要介紹了springBoot集成redis的key,value序列化的相關問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
新版本IntelliJ IDEA 構建maven,并用Maven創(chuàng)建一個web項目(圖文教程)
這篇文章主要介紹了新版本IntelliJ IDEA 構建maven,并用Maven創(chuàng)建一個web項目的圖文教程,需要的朋友可以參考下2018-01-01
Java中統(tǒng)計字符個數(shù)以及反序非相同字符的方法詳解
本篇文章是對Java中統(tǒng)計字符個數(shù)以及反序非相同字符的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
application.yaml與bootstrap.yaml的使用
這篇文章主要介紹了application.yaml與bootstrap.yaml的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
springboot整合xxl-job的實現(xiàn)示例
本文主要介紹了springboot整合xxl-job的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06

