日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

微服務(wù)設(shè)計(jì)必看:深度解析Netflix Eureka的底層實(shí)現(xiàn)

來(lái)源: 責(zé)編: 時(shí)間:2023-10-27 21:43:42 344觀看
導(dǎo)讀作者 | 波哥審校 | 重樓在微服務(wù)架構(gòu)中,服務(wù)發(fā)現(xiàn)和注冊(cè)是確保各個(gè)微服務(wù)之間通信和協(xié)作的核心組件。Netflix Eureka作為一款開(kāi)源的服務(wù)發(fā)現(xiàn)和注冊(cè)工具,在現(xiàn)代分布式系統(tǒng)中扮演著重要角色。本文將從代碼層面深入探討Netf

作者 | 波哥gWh28資訊網(wǎng)——每日最新資訊28at.com

審校 | 重樓gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

Netflix Eureka由Eureka服務(wù)器和Eureka客戶(hù)端兩部分構(gòu)成。它們協(xié)同工作,構(gòu)建了一個(gè)完整的服務(wù)發(fā)現(xiàn)和注冊(cè)系統(tǒng)。gWh28資訊網(wǎng)——每日最新資訊28at.com

一、Eureka服務(wù)器

gWh28資訊網(wǎng)——每日最新資訊28at.com

Eureka服務(wù)器負(fù)責(zé)存儲(chǔ)和管理所有已注冊(cè)的服務(wù)實(shí)例信息,保證服務(wù)發(fā)現(xiàn)的準(zhǔn)確性。Eureka服務(wù)器的核心是InstanceRegistry、LeaseManager和SelfPreservationFilter。下面結(jié)合代碼詳細(xì)介紹下這幾個(gè)核心組件。gWh28資訊網(wǎng)——每日最新資訊28at.com

1.InstanceRegistry(實(shí)例注冊(cè)表)

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

注冊(cè)服務(wù)實(shí)例:register 方法負(fù)責(zé)將服務(wù)實(shí)例注冊(cè)到注冊(cè)表。gWh28資訊網(wǎng)——每日最新資訊28at.com

取消注冊(cè)服務(wù)實(shí)例:cancel 方法用于從注冊(cè)表中移除不再可用的實(shí)例。gWh28資訊網(wǎng)——每日最新資訊28at.com

獲取服務(wù)實(shí)例信息:getInstancesById 方法用于獲取特定服務(wù)的所有實(shí)例信息。gWh28資訊網(wǎng)——每日最新資訊28at.com

2.LeaseManager(租約管理器)

gWh28資訊網(wǎng)——每日最新資訊28at.com

租約管理器負(fù)責(zé)管理實(shí)例的租約,租約是Eureka服務(wù)器中的一個(gè)重要概念,用于確保實(shí)例的健康狀態(tài)。在代碼層面,LeaseManager維護(hù)了一個(gè)租約的集合,并提供了操作租約的方法,主要包括:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

注冊(cè)實(shí)例并創(chuàng)建租約:register 方法負(fù)責(zé)為新注冊(cè)的實(shí)例創(chuàng)建租約。gWh28資訊網(wǎng)——每日最新資訊28at.com

續(xù)約租約:renew 方法用于更新租約的到期時(shí)間,延長(zhǎng)租約的有效期。gWh28資訊網(wǎng)——每日最新資訊28at.com

移除租約:cancel 方法負(fù)責(zé)在實(shí)例取消注冊(cè)時(shí)移除租約。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

在服務(wù)實(shí)例注冊(cè)時(shí),LeaseManager 的 register 方法被調(diào)用,創(chuàng)建一個(gè)新的租約,并將其添加到租約管理器中。在服務(wù)實(shí)例定期發(fā)送心跳續(xù)約請(qǐng)求時(shí),LeaseManager 的 renew 方法被調(diào)用,更新租約的到期時(shí)間,確保租約的有效性。當(dāng)一個(gè)服務(wù)實(shí)例取消注冊(cè)時(shí),LeaseManager 的 cancel 方法被調(diào)用,從租約管理器中移除相應(yīng)的租約。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

下面是具體方法內(nèi)容:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

3.SelfPreservationFilter(自我保護(hù)過(guò)濾器)

gWh28資訊網(wǎng)——每日最新資訊28at.com

自我保護(hù)機(jī)制是Netflix Eureka服務(wù)器(服務(wù)端)中的一項(xiàng)重要功能。它旨在確保在網(wǎng)絡(luò)抖動(dòng)等異常情況下,Eureka服務(wù)器不會(huì)過(guò)早地剔除正常運(yùn)行的服務(wù)實(shí)例,從而保持服務(wù)的可用性和穩(wěn)定性。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,雖然自我保護(hù)機(jī)制保護(hù)了Eureka服務(wù)器上的服務(wù)注冊(cè)表,但在自我保護(hù)模式下,Eureka服務(wù)器將不再?gòu)囊炎?cè)的實(shí)例中移除長(zhǎng)時(shí)間未續(xù)約的實(shí)例,這可能會(huì)導(dǎo)致注冊(cè)表中存在已經(jīng)下線或失效的實(shí)例。因此,自我保護(hù)機(jī)制只是應(yīng)對(duì)短期網(wǎng)絡(luò)問(wèn)題的臨時(shí)解決方案,當(dāng)問(wèn)題解決后,Eureka服務(wù)器會(huì)自動(dòng)退出自我保護(hù)模式,重新恢復(fù)正常的剔除機(jī)制。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

二、Eureka客戶(hù)端

gWh28資訊網(wǎng)——每日最新資訊28at.com

在微服務(wù)應(yīng)用啟動(dòng)時(shí),Eureka客戶(hù)端將自身的實(shí)例信息注冊(cè)到Eureka服務(wù)器,并從服務(wù)器獲取其他服務(wù)實(shí)例信息,實(shí)現(xiàn)服務(wù)的發(fā)現(xiàn)和負(fù)載均衡。它包括DiscoveryClient(服務(wù)發(fā)現(xiàn)客戶(hù)端)、InstanceInfo(實(shí)例信息)、EurekaHttpClient(Eureka HTTP客戶(hù)端)三個(gè)核心組件,下面詳細(xì)介紹每個(gè)組件:gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

從Eureka服務(wù)器獲取服務(wù)實(shí)例信息,并緩存在本地。它提供了getInstances、getServices等方法,支持負(fù)載均衡和服務(wù)發(fā)現(xiàn)。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

其中g(shù)etInstances 方法用于在服務(wù)調(diào)用前獲取特定服務(wù)的所有實(shí)例信息,實(shí)現(xiàn)動(dòng)態(tài)的服務(wù)發(fā)現(xiàn)。getNextServerFromEureka 方法在服務(wù)調(diào)用時(shí)被調(diào)用,實(shí)現(xiàn)負(fù)載均衡邏輯,選擇要調(diào)用的服務(wù)實(shí)例;而refreshRegistry 方法定期刷新注冊(cè)表信息,以確保實(shí)例信息的最新性。gWh28資訊網(wǎng)——每日最新資訊28at.com

2.InstanceInfo(實(shí)例信息)

gWh28資訊網(wǎng)——每日最新資訊28at.com

在應(yīng)用啟動(dòng)時(shí),Eureka客戶(hù)端創(chuàng)建InstanceInfo對(duì)象,包含實(shí)例的元數(shù)據(jù)。它在服務(wù)實(shí)例啟動(dòng)時(shí)創(chuàng)建并初始化,存儲(chǔ)了該實(shí)例的基本信息,如實(shí)例ID、主機(jī)名、端口和狀態(tài)。它通過(guò)HTTP請(qǐng)求將元數(shù)據(jù)注冊(cè)到Eureka服務(wù)器。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

3.EurekaHttpClient(Eureka HTTP客戶(hù)端)

gWh28資訊網(wǎng)——每日最新資訊28at.com

它用于客戶(hù)端與Eureka服務(wù)器的通信,發(fā)送注冊(cè)、續(xù)約、取消注冊(cè)等HTTP請(qǐng)求,獲取注冊(cè)表信息。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

其中:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

三、流程梳理

gWh28資訊網(wǎng)——每日最新資訊28at.com

下面筆者大概梳理了下幾個(gè)主要流程:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

1、服務(wù)注冊(cè)流程gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

2、心跳續(xù)約流程gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

3、服務(wù)發(fā)現(xiàn)與負(fù)載均衡流程gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

四、實(shí)例演示

gWh28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,讓我們通過(guò)實(shí)際演示來(lái)了解如何使用Eureka服務(wù)端和客戶(hù)端。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

1、Eureka服務(wù)端演示:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建Eureka Server:首先,創(chuàng)建一個(gè)Spring Boot項(xiàng)目,并添加Eureka Server依賴(lài)。gWh28資訊網(wǎng)——每日最新資訊28at.com

配置文件:在application.yml中,進(jìn)行基本的配置,如端口和Eureka Server配置。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

啟動(dòng)類(lèi):創(chuàng)建啟動(dòng)類(lèi),并添加@EnableEurekaServer注解。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行應(yīng)用:?jiǎn)?dòng)Eureka Server應(yīng)用,訪問(wèn)http://localhost:8761,將看到Eureka的控制臺(tái)。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

2、Eureka客戶(hù)端演示:gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建Controller:創(chuàng)建一個(gè)簡(jiǎn)單的Controller用于演示服務(wù)調(diào)用。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

啟動(dòng)類(lèi):創(chuàng)建啟動(dòng)類(lèi),并添加@EnableDiscoveryClient注解。gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片gWh28資訊網(wǎng)——每日最新資訊28at.com

gWh28資訊網(wǎng)——每日最新資訊28at.com

  • 運(yùn)行應(yīng)用:?jiǎn)?dòng)Eureka Client應(yīng)用,訪問(wèn)http://localhost:8761,將看到Eureka的控制臺(tái),顯示有一個(gè)已注冊(cè)的客戶(hù)端。
  • 服務(wù)調(diào)用:在瀏覽器中訪問(wèn)http://localhost:8080/hello,將會(huì)調(diào)用Eureka Client的Controller方法,并得到響應(yīng)。

gWh28資訊網(wǎng)——每日最新資訊28at.com

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

gWh28資訊網(wǎng)——每日最新資訊28at.com

作者介紹:

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

本文鏈接:http://www.www897cc.com/showinfo-26-15480-0.html微服務(wù)設(shè)計(jì)必看:深度解析Netflix Eureka的底層實(shí)現(xiàn)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 數(shù)據(jù)結(jié)構(gòu)與算法緒論

下一篇: 并發(fā)的查詢(xún)請(qǐng)求增加時(shí),數(shù)據(jù)架構(gòu)部分如何做主從分離?

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 金寨县| 芜湖市| 内乡县| 青浦区| 黄大仙区| 岑巩县| 井研县| 昌宁县| 南郑县| 抚州市| 德清县| 永善县| 锡林浩特市| 内乡县| 南涧| 南平市| 平山县| 平江县| 台南县| 曲沃县| 青浦区| 安达市| 宁国市| 涞水县| 深泽县| 瓮安县| 左贡县| 库尔勒市| 新邵县| 东阿县| 阿鲁科尔沁旗| 洛隆县| 武夷山市| 台湾省| 陆川县| 辉南县| 卢龙县| 肥东县| 玉田县| 泗洪县| 木里|