91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NacosServiceRegistry的實現(xiàn)

Android編程精選 ? 來源:CSDN ? 作者:吳聲子夜歌 ? 2022-09-13 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nacos架構(gòu)

342d8b58-328f-11ed-ba43-dac502259ad0.png

Provider APP:服務(wù)提供者

Consumer APP:服務(wù)消費者

Name Server:通過VIP(Virtual IP)或DNS的方式實現(xiàn)Nacos高可用集群的服務(wù)路由

Nacos Server:Nacos服務(wù)提供者,里面包含的Open API是功能訪問入口,Conig Service、Naming Service 是Nacos提供的配置服務(wù)、命名服務(wù)模塊。Consitency Protocol是一致性協(xié)議,用來實現(xiàn)Nacos集群節(jié)點的數(shù)據(jù)同步,這里使用的是Raft算法(Etcd、Redis哨兵選舉)

Nacos Console:控制臺

346023f6-328f-11ed-ba43-dac502259ad0.jpg

注冊中心的原理

服務(wù)實例在啟動時注冊到服務(wù)注冊表,并在關(guān)閉時注銷

服務(wù)消費者查詢服務(wù)注冊表,獲得可用實例

服務(wù)注冊中心需要調(diào)用服務(wù)實例的健康檢查API來驗證它是否能夠處理請求

346e7c76-328f-11ed-ba43-dac502259ad0.png

SpringCloud完成注冊的時機

在Spring-Cloud-Common包中有一個類org.springframework.cloud. client.serviceregistry .ServiceRegistry,它是Spring Cloud提供的服務(wù)注冊的標(biāo)準(zhǔn)。集成到Spring Cloud中實現(xiàn)服務(wù)注冊的組件,都會實現(xiàn)該接口。

349b4dd2-328f-11ed-ba43-dac502259ad0.png

該接口有一個實現(xiàn)類是NacoServiceRegistry。

SpringCloud集成Nacos的實現(xiàn)過程:

在spring-clou-commons包的META-INF/spring.factories中包含自動裝配的配置信息如下:

34c4dbfc-328f-11ed-ba43-dac502259ad0.png

其中AutoServiceRegistrationAutoConfiguration就是服務(wù)注冊相關(guān)的配置類:

34f369d6-328f-11ed-ba43-dac502259ad0.png

在AutoServiceRegistrationAutoConfiguration配置類中,可以看到注入了一個AutoServiceRegistration實例,該類的關(guān)系圖如下所示。

35280326-328f-11ed-ba43-dac502259ad0.png

可以看出,AbstractAutoServiceRegistration抽象類實現(xiàn)了該接口,并且最重要的是NacosAutoServiceRegistration繼承了AbstractAutoServiceRegistration。

看到EventListener我們就應(yīng)該知道,Nacos是通過Spring的事件機制繼承到SpringCloud中去的。

AbstractAutoServiceRegistration實現(xiàn)了onApplicationEvent抽象方法,并且監(jiān)聽WebServerInitializedEvent事件(當(dāng)Webserver初始化完成之后) , 調(diào)用this.bind ( event )方法。

3555ed54-328f-11ed-ba43-dac502259ad0.png

最終會調(diào)用NacosServiceREgistry.register()方法進行服務(wù)注冊。

35731e88-328f-11ed-ba43-dac502259ad0.png359a4cc4-328f-11ed-ba43-dac502259ad0.png

NacosServiceRegistry的實現(xiàn)

在NacosServiceRegistry.registry方法中,調(diào)用了Nacos Client SDK中的namingService.registerInstance完成服務(wù)的注冊。

35b8d572-328f-11ed-ba43-dac502259ad0.png

跟蹤NacosNamingService的registerInstance()方法:

35e49b8a-328f-11ed-ba43-dac502259ad0.png

通過beatReactor.addBeatInfo()創(chuàng)建心跳信息實現(xiàn)健康檢測, Nacos Server必須要確保注冊的服務(wù)實例是健康的,而心跳檢測就是服務(wù)健康檢測的手段。

serverProxy.registerService()實現(xiàn)服務(wù)注冊

心跳機制:

36133a8a-328f-11ed-ba43-dac502259ad0.png

從上述代碼看,所謂心跳機制就是客戶端通過schedule定時向服務(wù)端發(fā)送一個數(shù)據(jù)包 ,然后啟動-個線程不斷檢測服務(wù)端的回應(yīng),如果在設(shè)定時間內(nèi)沒有收到服務(wù)端的回應(yīng),則認(rèn)為服務(wù)器出現(xiàn)了故障。Nacos服務(wù)端會根據(jù)客戶端的心跳包不斷更新服務(wù)的狀態(tài)。

注冊原理:

Nacos提供了SDK和Open API兩種形式來實現(xiàn)服務(wù)注冊。

Open API:

3640b91a-328f-11ed-ba43-dac502259ad0.png

SDK:

3664c378-328f-11ed-ba43-dac502259ad0.png

這兩種形式本質(zhì)都一樣,底層都是基于HTTP協(xié)議完成請求的。所以注冊服務(wù)就是發(fā)送一個HTTP請求:367d1db0-328f-11ed-ba43-dac502259ad0.png

對于nacos服務(wù)端,對外提供的服務(wù)接口請求地址為nacos/v1/ns/instance,實現(xiàn)代碼咋nacos-naming模塊下的InstanceController類中:

37690f0e-328f-11ed-ba43-dac502259ad0.png

從請求參數(shù)匯總獲得serviceName(服務(wù)名)和namespaceId(命名空間Id)

調(diào)用registerInstance注冊實例。

379e29dc-328f-11ed-ba43-dac502259ad0.png

創(chuàng)建一個控服務(wù)(在Nacos控制臺“服務(wù)列表”中展示的服務(wù)信息),實際上是初始化一個serviceMap,它是一個ConcurrentHashMap集合

getService,從serviceMap中根據(jù)namespaceId和serviceName得到一個服務(wù)對象

調(diào)用addInstance添加服務(wù)實例

37cfe13e-328f-11ed-ba43-dac502259ad0.png381640fc-328f-11ed-ba43-dac502259ad0.png

根據(jù)namespaceId、serviceName從緩存中獲取Service實例

如果Service實例為空,則創(chuàng)建并保存到緩存中

382fab6e-328f-11ed-ba43-dac502259ad0.png

通過putService()方法將服務(wù)緩存到內(nèi)存

service.init()建立心跳機制

consistencyService.listen實現(xiàn)數(shù)據(jù)一致性監(jiān)聽

service.init ( )方法的如下圖所示,它主要通過定時任務(wù)不斷檢測當(dāng)前服務(wù)下所有實例最后發(fā)送心跳包的時間。如果超時,則設(shè)置healthy為false表示服務(wù)不健康,并且發(fā)送服務(wù)變更事件。

在這里請大家思考一一個問題,服務(wù)實例的最后心跳包更新時間是誰來觸發(fā)的?實際上前面有講到, Nacos客戶端注冊服務(wù)的同時也建立了心跳機制。

38614c32-328f-11ed-ba43-dac502259ad0.png

putService方法,它的功能是將Service保存到serviceMap中:

3884b474-328f-11ed-ba43-dac502259ad0.png

繼續(xù)調(diào)用addInstance方法把當(dāng)前注冊的服務(wù)實例保存到Service中:

38ad942a-328f-11ed-ba43-dac502259ad0.png

總結(jié):

Nacos客戶端通過Open API的形式發(fā)送服務(wù)注冊請求

Nacos服務(wù)端收到請求后,做以下三件事:

構(gòu)建一個Service對象保存到ConcurrentHashMap集合中

使用定時任務(wù)對當(dāng)前服務(wù)下的所有實例建立心跳檢測機制

基于數(shù)據(jù)一致性協(xié)議服務(wù)數(shù)據(jù)進行同步

服務(wù)提供者地址查詢

Open API:

38c5a006-328f-11ed-ba43-dac502259ad0.png

SDK:

38d74252-328f-11ed-ba43-dac502259ad0.png

InstanceController中的list方法:

38f32a58-328f-11ed-ba43-dac502259ad0.png

解析請求參數(shù)。

通過doSrvIPXT返回服務(wù)列表數(shù)據(jù)

39398002-328f-11ed-ba43-dac502259ad0.png399643b4-328f-11ed-ba43-dac502259ad0.png

根據(jù)namespaceId、serviceName獲得Service實例

從Service實例中基于srvIPs得到所有服務(wù)提供者實例

遍歷組裝JSON字符串并返回

Nacos服務(wù)地址動態(tài)感知原理

可以通過subscribe方法來實現(xiàn)監(jiān)聽,其中serviceName表示服務(wù)名、EventListener表示監(jiān)聽到的事件:

39ceeaca-328f-11ed-ba43-dac502259ad0.png

具體調(diào)用方式如下:

39e38f48-328f-11ed-ba43-dac502259ad0.png

或者調(diào)用selectInstance方法,如果將subscribe屬性設(shè)置為true,會自動注冊監(jiān)聽:

3a126dd6-328f-11ed-ba43-dac502259ad0.png3a354cde-328f-11ed-ba43-dac502259ad0.png

Nacos客戶端中有一個HostReactor類,它的功能是實現(xiàn)服務(wù)的動態(tài)更新,基本原理是:

客戶端發(fā)起時間訂閱后,在HostReactor中有一個UpdateTask線程,每10s發(fā)送一次Pull請求,獲得服務(wù)端最新的地址列表

另外,搜索公眾號Java架構(gòu)師技術(shù)后臺回復(fù)“Spring”,獲取一份驚喜禮包。

對于服務(wù)端,它和服務(wù)提供者的實例之間維持了心跳檢測,一旦服務(wù)提供者出現(xiàn)異常,則會發(fā)送一個Push消息給Nacos客戶端,也就是服務(wù)端消費者

服務(wù)消費者收到請求之后,使用HostReactor中提供的processServiceJSON解析消息,并更新本地服務(wù)地址列表。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2375

    瀏覽量

    66805
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    229

    瀏覽量

    21166
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1101

    瀏覽量

    51745
  • HTTP協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    10636

原文標(biāo)題:Nacos 為什么這么強!Nacos實現(xiàn)原理詳解。。

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何用軟件實現(xiàn)系統(tǒng)的復(fù)位?

    看門狗的工作過程是怎樣的? 如何用軟件實現(xiàn)系統(tǒng)的復(fù)位?
    發(fā)表于 01-08 06:15

    使用TFTP實現(xiàn)IAP的方法

    使用 TFTP 實現(xiàn) IAP 的方法廣泛應(yīng)用于需要具有固件升級功能的嵌入式應(yīng)用中(例如,嵌入式 Linux bootloader 中)。TFTP 是一種在 UDP 傳輸層上執(zhí)行的簡單文件傳輸協(xié)議。此
    發(fā)表于 12-10 07:21

    RapidIO標(biāo)準(zhǔn)的串行物理層實現(xiàn)

    Serial RapidIO(SRIO) 特指 RapidIO 標(biāo)準(zhǔn)的串行物理層實現(xiàn)。
    的頭像 發(fā)表于 12-09 10:41 ?493次閱讀
    RapidIO標(biāo)準(zhǔn)的串行物理層<b class='flag-5'>實現(xiàn)</b>

    如何使用 LwIP 實現(xiàn) Modbus TCP?

    如何使用 LwIP 實現(xiàn) Modbus TCP?
    發(fā)表于 08-20 08:17

    如何使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)使用樹莓派和OpenCV實現(xiàn)手部識別與手指識別
    的頭像 發(fā)表于 08-14 17:45 ?1640次閱讀
    如何使用樹莓派與OpenCV<b class='flag-5'>實現(xiàn)</b>面部和運動追蹤的云臺系統(tǒng)?

    Flash讀保護怎么實現(xiàn)?

    我們客戶要求要對代碼存儲區(qū)(code flash)增加外部讀保護機制 我在TRM手冊中只看到有flash 寫保護 讀保護應(yīng)該怎么實現(xiàn)?
    發(fā)表于 07-30 07:30

    基于DSP的SPWM調(diào)制的實現(xiàn)

    摘 要:在工業(yè)上,交流電機得到廣泛應(yīng)用,其中相當(dāng)一部分需要由調(diào)速裝置供電。采用了一種較為容易實現(xiàn)、普遍用于變頻器的 SPWM調(diào)制方案,并結(jié)合 IMS320LF2407芯片,使系統(tǒng)更容易實現(xiàn)。 純
    發(fā)表于 07-25 14:34

    基于Matlab與FPGA的雙邊濾波算法實現(xiàn)

    前面發(fā)過中值、均值、高斯濾波的文章,這些只考慮了位置,并沒有考慮相似度。那么雙邊濾波來了,既考慮了位置,有考慮了相似度,對邊緣的保持比前幾個好很多,當(dāng)然實現(xiàn)上也是復(fù)雜很多。本文將從原理入手,采用Matlab與FPGA設(shè)計實現(xiàn)雙邊濾波算法。
    的頭像 發(fā)表于 07-10 11:28 ?4562次閱讀
    基于Matlab與FPGA的雙邊濾波算法<b class='flag-5'>實現(xiàn)</b>

    基于FPGA的壓縮算法加速實現(xiàn)

    本設(shè)計中,計劃實現(xiàn)對文件的壓縮及解壓,同時優(yōu)化壓縮中所涉及的信號處理和計算密集型功能,實現(xiàn)對其的加速處理。本設(shè)計的最終目標(biāo)是證明在充分并行化的硬件體系結(jié)構(gòu) FPGA 上實現(xiàn)該算法時,可以大大提高該算
    的頭像 發(fā)表于 07-10 11:09 ?2405次閱讀
    基于FPGA的壓縮算法加速<b class='flag-5'>實現(xiàn)</b>

    HarmonyOS實戰(zhàn): 城市選擇功能的快速實現(xiàn)

    最近在日常開發(fā)過程中,需要實現(xiàn)城市選擇功能,同時支持模糊搜索??此坪唵蔚墓δ軇邮?b class='flag-5'>實現(xiàn)起來卻有很多難點。本篇文章詳細(xì)記錄開發(fā)過程中遇到的問題和對應(yīng)的解決方法,希望能夠幫助你,建議點贊收藏!
    的頭像 發(fā)表于 06-24 17:07 ?491次閱讀

    如何同時實現(xiàn)實現(xiàn)寬帶寬和高增益?

    本人大學(xué)生,初次接觸multisim,想問問這樣的電路該如何實現(xiàn)
    發(fā)表于 06-10 15:27

    建筑能耗監(jiān)測系統(tǒng)的組成與實現(xiàn)功能

    在全球倡導(dǎo)節(jié)能減排與可持續(xù)發(fā)展的大背景下,建筑行業(yè)的能耗問題愈發(fā)受到關(guān)注。建筑能耗監(jiān)測系統(tǒng)作為實現(xiàn)建筑節(jié)能的關(guān)鍵手段,能夠?qū)崟r掌握建筑內(nèi)各類能源的消耗情況,為能源管理與優(yōu)化提供數(shù)據(jù)支撐。 對此,數(shù)
    的頭像 發(fā)表于 05-30 16:13 ?658次閱讀
    建筑能耗監(jiān)測系統(tǒng)的組成與<b class='flag-5'>實現(xiàn)</b>功能

    并行CRC實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《并行CRC實現(xiàn).pdf》資料免費下載
    發(fā)表于 05-20 17:26 ?0次下載

    智慧路燈如何實現(xiàn)節(jié)能

    和功能,成為城市降低能源消耗、實現(xiàn)可持續(xù)發(fā)展的重要力量。然而,叁仟智慧路燈實現(xiàn)節(jié)能并非一蹴而就,其背后涉及一系列復(fù)雜且精妙的技術(shù)手段和管理策略,深入探究這些方法,對于推動城市照明節(jié)能工作具有重要意義。 日光初現(xiàn)
    的頭像 發(fā)表于 03-24 16:57 ?996次閱讀

    ADC硬件過采樣是怎么實現(xiàn)的?

    ADC硬件過采樣是怎么實現(xiàn)
    發(fā)表于 03-11 07:46