springCloud服務注冊Eureka實現過程圖解
介紹
Eureka 是Netfix開發的,一個基于Rest服務的,服務注冊與發現的組件。
主要包括兩個組件:Eureka Server和Eureka Client
Eureka Server:注冊中心,提供服務注冊與發現
Eureka Client:java客戶端(通常就是微服務中的客戶端和服務端)
上圖簡要描述了Eureka的基本架構,由3個角色組成:
1.Eureka Server(注冊中心,相當于中介)
2.Service Provider(服務提供方,相當于房東)
3.Service Consumer(服務消費方,相當于租客)
服務注冊Register
當eureka提供方(provider)向Eureka Server注冊時,它提供自身的元數據,例如:ip地址,端口,運行狀況指示符等(房東在中介登記房屋信息,比如:面積,價格,地段)
服務續約Renew
服務提供方(provider)每隔30s(默認)發送一次心跳來續約,通過續約告訴Eureka Server 該服務提供方仍然存在,沒有出現問題,正常情況下,如果Eureka Server在90s內沒有收到服務提供方的續約,它會將實例從注冊中心刪除(房東定期告訴中介,我的房子還外租(續約),中介就會保留房屋信息)
服務剔除Eriction
在默認情況下,當服務提供方連續90s沒有向注冊中心進行續約,即心跳,注冊中心會將該服務從服務注冊列表中剔除(房東定期聯系中介告訴他房子還續約,如果中介長時間沒有收到房東的續約信息,中介會將他的房屋信息下架)
獲取注冊列表信息FetchRegistries
服務消費方從注冊中心獲取注冊表信息,并將其緩存到本地,消費方會使用該信息查找其他服務,從而進行遠程調用,該注冊列表定期30S更新一次,每次返回注冊列表信息可能與服務消費方緩存信息不同,服務消費方會自動處理,重新獲取整個注冊表信息,eureka Server和Eureka Client可以使用JSON/XMl格式進行通信,默認情況下Eureka Client使用Json格式來獲取注冊列表信息(租客去中介獲取所有的房屋信息,而且租客為了獲取最新的房屋 信息會定期向中介獲取并更新本地列表)
獲取服務是服務消費者的基礎,所以必有兩個重要參數需要注意:
服務下線Cancel
服務提供方在程序關閉時向注冊中心發送取消請求,發送后該服務提供方的信息將從注冊中心的服務列表中刪除(房東告訴中介房子不租了,中介將此房子的信息刪除),該下線請求不會自動完成,需要調用:
遠程調用Remote Call
當服務消費方從注冊中心獲取到服務提供方信息后,就可以通過Http請求調用對應的服務;服務提供者有多個時,服務消費方會通過Ribbon自動進行負載均衡
自我保護機制
默認情況下,如果注冊中心在90秒內沒有接受到某個微服務實例的心跳,會注銷該實例,但是在微服務架構下服務之間通常都是跨進程調用,我那果洛通信往往會面臨這各種問題,比如微服務狀態正常,網絡分區故障,導致實例被注銷。大量實例被注銷,會威脅到整個微服務架構的可用性,所以eureka就有了自我保護機制,Eureka Server 在運行期間會去統計心跳失敗比例在 15 分鐘之內是否低于 85%,如果低于 85%,Eureka Server 即會進入自我保護機制
Eureka Server 觸發自我保護機制后,頁面會出現提示:
Eureka Server 進入自我保護機制,會出現以下幾種情況:
1.Eureka不再從注冊列表中移除因為長時間沒收到心跳而應該過期的服務
2.Eureka仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其他節點上
3.當網絡穩定時,當前實例新的注冊信息會被同步到其他節點上
Eureka 自我保護機制是為了防止誤殺服務而提供的一個機制。當個別客戶端出現心跳失聯時,則認為是客戶端的問題,剔除掉客戶端;當 Eureka 捕獲到大量的心跳失敗時,則認為可能是網絡問題,進入自我保護機制;當客戶端心跳恢復時,Eureka 會自動退出自我保護機制。
如果在保護期內剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,即會調用失敗。對于這個問題需要服務消費者端要有一些容錯機制,如重試,斷路器等。
通過在 Eureka Server 配置如下參數,開啟或者關閉保護機制,生產環境建議打開:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: