日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
微服務(wù)設(shè)計必看:深度解析Netflix Eureka的底層實現(xiàn)

作者 | 波哥

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的北戴河網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

審校 | 重樓

出品 | 技術(shù)棧(微信號:blog51cto)

在微服務(wù)架構(gòu)中,服務(wù)發(fā)現(xiàn)和注冊是確保各個微服務(wù)之間通信和協(xié)作的核心組件。Netflix Eureka作為一款開源的服務(wù)發(fā)現(xiàn)和注冊工具,在現(xiàn)代分布式系統(tǒng)中扮演著重要角色。本文將從代碼層面深入探討Netflix Eureka的底層實現(xiàn)原理,為讀者詳細(xì)呈現(xiàn)其內(nèi)部運行機制。

Netflix Eureka由Eureka服務(wù)器和Eureka客戶端兩部分構(gòu)成。它們協(xié)同工作,構(gòu)建了一個完整的服務(wù)發(fā)現(xiàn)和注冊系統(tǒng)。

一、Eureka服務(wù)器

Eureka服務(wù)器負(fù)責(zé)存儲和管理所有已注冊的服務(wù)實例信息,保證服務(wù)發(fā)現(xiàn)的準(zhǔn)確性。Eureka服務(wù)器的核心是InstanceRegistry、LeaseManager和SelfPreservationFilter。下面結(jié)合代碼詳細(xì)介紹下這幾個核心組件。

1.InstanceRegistry(實例注冊表)

實例注冊表負(fù)責(zé)存儲所有已注冊的服務(wù)實例信息,包括它們的元數(shù)據(jù),如實例ID、主機名、端口等。從代碼層面來看,InstanceRegistry是一個包含了實例信息的內(nèi)存數(shù)據(jù)結(jié)構(gòu),通常使用ConcurrentHashMap來存儲,當(dāng)一個新的服務(wù)實例注冊時,InstanceRegistry 的 register 方法被調(diào)用,將該實例信息添加到注冊表中;當(dāng)一個服務(wù)實例不再可用,需要從Eureka服務(wù)器取消注冊時,InstanceRegistry 的 cancel 方法被調(diào)用,從注冊表中移除該實例信息。具體的功能包括:

注冊服務(wù)實例:register 方法負(fù)責(zé)將服務(wù)實例注冊到注冊表。

取消注冊服務(wù)實例:cancel 方法用于從注冊表中移除不再可用的實例。

獲取服務(wù)實例信息:getInstancesById 方法用于獲取特定服務(wù)的所有實例信息。

2.LeaseManager(租約管理器)

租約管理器負(fù)責(zé)管理實例的租約,租約是Eureka服務(wù)器中的一個重要概念,用于確保實例的健康狀態(tài)。在代碼層面,LeaseManager維護了一個租約的集合,并提供了操作租約的方法,主要包括:

注冊實例并創(chuàng)建租約:register 方法負(fù)責(zé)為新注冊的實例創(chuàng)建租約。

續(xù)約租約:renew 方法用于更新租約的到期時間,延長租約的有效期。

移除租約:cancel 方法負(fù)責(zé)在實例取消注冊時移除租約。

在服務(wù)實例注冊時,LeaseManager 的 register 方法被調(diào)用,創(chuàng)建一個新的租約,并將其添加到租約管理器中。在服務(wù)實例定期發(fā)送心跳續(xù)約請求時,LeaseManager 的 renew 方法被調(diào)用,更新租約的到期時間,確保租約的有效性。當(dāng)一個服務(wù)實例取消注冊時,LeaseManager 的 cancel 方法被調(diào)用,從租約管理器中移除相應(yīng)的租約。

下面是具體方法內(nèi)容:

圖片

3.SelfPreservationFilter(自我保護過濾器)

自我保護機制是Netflix Eureka服務(wù)器(服務(wù)端)中的一項重要功能。它旨在確保在網(wǎng)絡(luò)抖動等異常情況下,Eureka服務(wù)器不會過早地剔除正常運行的服務(wù)實例,從而保持服務(wù)的可用性和穩(wěn)定性。

當(dāng)Eureka服務(wù)器開啟自我保護機制時,它會監(jiān)測心跳續(xù)約失敗的實例數(shù)量。如果在某個時間段內(nèi),心跳續(xù)約失敗的實例數(shù)量超過了預(yù)定的閾值,Eureka服務(wù)器將進(jìn)入自我保護模式。在自我保護模式下,Eureka服務(wù)器不會剔除任何正常運行的實例,以免影響整個系統(tǒng)的穩(wěn)定性。這是為了避免在網(wǎng)絡(luò)抖動等情況下,誤判正常實例失效。

需要注意的是,雖然自我保護機制保護了Eureka服務(wù)器上的服務(wù)注冊表,但在自我保護模式下,Eureka服務(wù)器將不再從已注冊的實例中移除長時間未續(xù)約的實例,這可能會導(dǎo)致注冊表中存在已經(jīng)下線或失效的實例。因此,自我保護機制只是應(yīng)對短期網(wǎng)絡(luò)問題的臨時解決方案,當(dāng)問題解決后,Eureka服務(wù)器會自動退出自我保護模式,重新恢復(fù)正常的剔除機制。

在代碼層面,SelfPreservationFilter定期計算心跳續(xù)約失敗的比例,根據(jù)配置啟動或關(guān)閉自我保護模式。SelfPreservationFilter 是一個在后臺運行的線程,定期檢查注冊表中的實例健康狀態(tài)。它會周期性地計算心跳續(xù)約失敗的比例,當(dāng)心跳續(xù)約失敗比例超過一定閾值時,會啟動自我保護模式,以防止錯誤地移除正常的服務(wù)實例。如果心跳續(xù)約失敗比例降低到一定程度,會關(guān)閉自我保護模式。具體功能包括:

  • 統(tǒng)計心跳續(xù)約失敗比例:calculateThresholdBreachCount 方法統(tǒng)計失敗的心跳續(xù)約比例。
  • 啟動/關(guān)閉自我保護模式:disable 和 enable 方法分別用于啟動和關(guān)閉自我保護模式。

圖片

圖片

二、Eureka客戶端

在微服務(wù)應(yīng)用啟動時,Eureka客戶端將自身的實例信息注冊到Eureka服務(wù)器,并從服務(wù)器獲取其他服務(wù)實例信息,實現(xiàn)服務(wù)的發(fā)現(xiàn)和負(fù)載均衡。它包括DiscoveryClient(服務(wù)發(fā)現(xiàn)客戶端)、InstanceInfo(實例信息)、EurekaHttpClient(Eureka HTTP客戶端)三個核心組件,下面詳細(xì)介紹每個組件:

1.DiscoveryClient(服務(wù)發(fā)現(xiàn)客戶端)

從Eureka服務(wù)器獲取服務(wù)實例信息,并緩存在本地。它提供了getInstances、getServices等方法,支持負(fù)載均衡和服務(wù)發(fā)現(xiàn)。

圖片

其中g(shù)etInstances 方法用于在服務(wù)調(diào)用前獲取特定服務(wù)的所有實例信息,實現(xiàn)動態(tài)的服務(wù)發(fā)現(xiàn)。getNextServerFromEureka 方法在服務(wù)調(diào)用時被調(diào)用,實現(xiàn)負(fù)載均衡邏輯,選擇要調(diào)用的服務(wù)實例;而refreshRegistry 方法定期刷新注冊表信息,以確保實例信息的最新性。

2.InstanceInfo(實例信息)

在應(yīng)用啟動時,Eureka客戶端創(chuàng)建InstanceInfo對象,包含實例的元數(shù)據(jù)。它在服務(wù)實例啟動時創(chuàng)建并初始化,存儲了該實例的基本信息,如實例ID、主機名、端口和狀態(tài)。它通過HTTP請求將元數(shù)據(jù)注冊到Eureka服務(wù)器。

圖片

3.EurekaHttpClient(Eureka HTTP客戶端)

它用于客戶端與Eureka服務(wù)器的通信,發(fā)送注冊、續(xù)約、取消注冊等HTTP請求,獲取注冊表信息。

圖片

圖片

其中:

  • register 方法在服務(wù)實例啟動時調(diào)用,向Eureka服務(wù)器注冊實例信息。
  • renew 方法定期發(fā)送心跳續(xù)約請求,保持實例的健康狀態(tài)。
  • cancel 方法在服務(wù)實例關(guān)閉或取消注冊時調(diào)用,向Eureka服務(wù)器發(fā)送取消注冊請求。
  • getInstances 方法在服務(wù)發(fā)現(xiàn)過程中被調(diào)用,向Eureka服務(wù)器請求特定服務(wù)的實例信息。
  • refreshRegistry 方法周期性地刷新注冊表信息,以保持信息的準(zhǔn)確性。

三、流程梳理

下面筆者大概梳理了下幾個主要流程:

1、服務(wù)注冊流程

  • Eureka客戶端創(chuàng)建InstanceInfo對象,包含實例元數(shù)據(jù)。
  • 客戶端通過HTTP請求將InstanceInfo注冊到Eureka服務(wù)器的InstanceRegistry。
  • LeaseManager創(chuàng)建租約,管理續(xù)約周期和到期時間。

2、心跳續(xù)約流程

  • Eureka客戶端定期發(fā)送心跳續(xù)約請求,維持租約有效。
  • LeaseManager更新租約到期時間,確保租約不會過期。
  • Eureka服務(wù)器根據(jù)心跳續(xù)約來監(jiān)測實例的健康狀態(tài)。

3、服務(wù)發(fā)現(xiàn)與負(fù)載均衡流程

  • Eureka客戶端通過DiscoveryClient獲取其他服務(wù)實例信息。
  • 客戶端根據(jù)負(fù)載均衡策略選擇一個實例。
  • 客戶端發(fā)起HTTP請求,實現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。

四、實例演示

現(xiàn)在,讓我們通過實際演示來了解如何使用Eureka服務(wù)端和客戶端。

1、Eureka服務(wù)端演示:

創(chuàng)建Eureka Server:首先,創(chuàng)建一個Spring Boot項目,并添加Eureka Server依賴。

配置文件:在application.yml中,進(jìn)行基本的配置,如端口和Eureka Server配置。

圖片

啟動類:創(chuàng)建啟動類,并添加@EnableEurekaServer注解。

圖片

運行應(yīng)用:啟動Eureka Server應(yīng)用,訪問http://localhost:8761,將看到Eureka的控制臺。

2、Eureka客戶端演示:

  • 創(chuàng)建Eureka Client:創(chuàng)建另一個Spring Boot項目,并添加Eureka Client依賴。
  • 配置文件:在application.yml中,配置Eureka Client信息。

圖片

創(chuàng)建Controller:創(chuàng)建一個簡單的Controller用于演示服務(wù)調(diào)用。

圖片

啟動類:創(chuàng)建啟動類,并添加@EnableDiscoveryClient注解。

圖片

  • 運行應(yīng)用:啟動Eureka Client應(yīng)用,訪問http://localhost:8761,將看到Eureka的控制臺,顯示有一個已注冊的客戶端。
  • 服務(wù)調(diào)用:在瀏覽器中訪問http://localhost:8080/hello,將會調(diào)用Eureka Client的Controller方法,并得到響應(yīng)。

Netflix Eureka在微服務(wù)架構(gòu)中扮演著重要角色,支持服務(wù)發(fā)現(xiàn)和注冊。Eureka的底層實現(xiàn)涵蓋了服務(wù)注冊、心跳續(xù)約、自我保護機制、服務(wù)發(fā)現(xiàn)和負(fù)載均衡等關(guān)鍵功能。通過深入代碼層面的分析,我們可以更清晰地理解這些功能是如何在底層實現(xiàn)的。

作者介紹:

波哥,互聯(lián)行業(yè)從業(yè)10余年,先后擔(dān)任項目總監(jiān)及架構(gòu)師。目前專攻技術(shù),喜歡研究技術(shù)原理。技術(shù)全面,主攻Java,精通JVM底層機制及Spring全家桶底層框架原理,熟練掌握當(dāng)前主流的中間件、服務(wù)網(wǎng)格等技術(shù)原理。


網(wǎng)頁題目:微服務(wù)設(shè)計必看:深度解析Netflix Eureka的底層實現(xiàn)
文章鏈接:http://www.dlmjj.cn/article/cdjjeid.html