一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

NacosServiceRegistry的實現(xiàn)

Android編程精選 ? 來源:CSDN ? 作者:吳聲子夜歌 ? 2022-09-13 10:51 ? 次閱讀

Nacos架構

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

Provider APP:服務提供者

Consumer APP:服務消費者

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

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

Nacos Console:控制臺

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

注冊中心的原理

服務實例在啟動時注冊到服務注冊表,并在關閉時注銷

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

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

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

SpringCloud完成注冊的時機

在Spring-Cloud-Common包中有一個類org.springframework.cloud. client.serviceregistry .ServiceRegistry,它是Spring Cloud提供的服務注冊的標準。集成到Spring Cloud中實現(xiàn)服務注冊的組件,都會實現(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就是服務注冊相關的配置類:

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

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

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

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

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

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

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

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

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

NacosServiceRegistry的實現(xiàn)

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

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

跟蹤NacosNamingService的registerInstance()方法:

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

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

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

心跳機制:

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

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

注冊原理:

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

Open API:

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

SDK:

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

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

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

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

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

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

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

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

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

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

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()方法將服務緩存到內(nèi)存

service.init()建立心跳機制

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

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

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

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

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

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

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

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

總結:

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

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

構建一個Service對象保存到ConcurrentHashMap集合中

使用定時任務對當前服務下的所有實例建立心跳檢測機制

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

服務提供者地址查詢

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返回服務列表數(shù)據(jù)

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

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

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

遍歷組裝JSON字符串并返回

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

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

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

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

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

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

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

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

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

另外,搜索公眾號Java架構師技術后臺回復“Spring”,獲取一份驚喜禮包。

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

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



審核編輯:劉清

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

    關注

    2

    文章

    1556

    瀏覽量

    63334
  • DNS
    DNS
    +關注

    關注

    0

    文章

    221

    瀏覽量

    20200
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1057

    瀏覽量

    47391
  • HTTP協(xié)議

    關注

    0

    文章

    67

    瀏覽量

    10046

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何實現(xiàn)Crestron connected ?

    DLP技術的最新投影功能夠實現(xiàn)標準的乙太網(wǎng)鏈結,由Crestron RoomView實現(xiàn)在網(wǎng)路上對所有投影機的全球範圍內(nèi)的遠端控制。Crestron控制器置入DLP投影機,提供無需控制系統(tǒng)或編程的直接
    發(fā)表于 02-25 06:34

    WEBENCH電源設計與實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《WEBENCH電源設計與實現(xiàn).pdf》資料免費下載
    發(fā)表于 01-21 14:52 ?0次下載
    WEBENCH電源設計與<b class='flag-5'>實現(xiàn)</b>

    基于FPGA實現(xiàn)圖像直方圖設計

    直方圖統(tǒng)計的原理 直方圖統(tǒng)計從數(shù)學上來說,是對圖像中的像素點進行統(tǒng)計。圖像直方圖統(tǒng)計常用于統(tǒng)計灰度圖像,表示圖像中各個灰度級出現(xiàn)的次數(shù)或者概率。統(tǒng)計直方圖的實現(xiàn)采用C/C++或者其他高級語言實現(xiàn)十分
    的頭像 發(fā)表于 12-24 10:24 ?585次閱讀
    基于FPGA<b class='flag-5'>實現(xiàn)</b>圖像直方圖設計

    智能制造如何實現(xiàn)

    智能制造的實現(xiàn)是一個系統(tǒng)性工程,涉及技術、流程、組織結構等多個方面的變革。以下是實現(xiàn)智能制造的關鍵步驟和方法: 1. 技術升級和應用:智能制造的實現(xiàn)需要依托先進的信息技術,包括工業(yè)互聯(lián)網(wǎng)、5G
    的頭像 發(fā)表于 11-20 09:43 ?1047次閱讀

    PowerPAD?輕松實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PowerPAD?輕松實現(xiàn).pdf》資料免費下載
    發(fā)表于 10-29 10:08 ?0次下載
    PowerPAD?輕松<b class='flag-5'>實現(xiàn)</b>

    高壓側電荷FET實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《高壓側電荷FET實現(xiàn).pdf》資料免費下載
    發(fā)表于 10-14 09:30 ?0次下載
    高壓側電荷FET<b class='flag-5'>實現(xiàn)</b>

    多協(xié)議移動電源的實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《多協(xié)議移動電源的實現(xiàn).pdf》資料免費下載
    發(fā)表于 09-30 11:44 ?0次下載
    多協(xié)議移動電源的<b class='flag-5'>實現(xiàn)</b>

    通過電平轉換實現(xiàn)窄帶IoT實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《通過電平轉換實現(xiàn)窄帶IoT實現(xiàn).pdf》資料免費下載
    發(fā)表于 09-21 11:08 ?0次下載
    通過電平轉換<b class='flag-5'>實現(xiàn)</b>窄帶IoT<b class='flag-5'>實現(xiàn)</b>

    使用DSPLIB FFT實現(xiàn)實現(xiàn)實際輸入,無需數(shù)據(jù)縮放

    電子發(fā)燒友網(wǎng)站提供《使用DSPLIB FFT實現(xiàn)實現(xiàn)實際輸入,無需數(shù)據(jù)縮放.pdf》資料免費下載
    發(fā)表于 09-19 11:27 ?0次下載
    使用DSPLIB FFT<b class='flag-5'>實現(xiàn)實現(xiàn)</b>實際輸入,無需數(shù)據(jù)縮放

    如何實現(xiàn)多枚TAS5630并聯(lián)實現(xiàn)更多功率輸出?

    我想請教下,如何實現(xiàn)多枚TAS5630并聯(lián)實現(xiàn)更多功率輸出,謝謝
    發(fā)表于 09-13 06:47

    labview實現(xiàn)tcp通訊

    labview實現(xiàn)tcp通訊
    發(fā)表于 08-19 14:26 ?18次下載

    如何實現(xiàn)pwm的控制功能

    數(shù)字信號控制技術,通過控制脈沖的占空比來實現(xiàn)對模擬信號的控制。占空比是指在一個周期內(nèi),脈沖的高電平時間與整個周期時間的比值。 特點 PWM具有以下特點: (1)簡單易實現(xiàn):PWM只需要數(shù)字信號,不需要模擬信號,因此實現(xiàn)起來相對簡
    的頭像 發(fā)表于 08-08 15:08 ?1352次閱讀

    實現(xiàn)智能制造的重要條件是什么

    智能制造是工業(yè)4.0的核心,它通過高度集成的信息技術和自動化技術,實現(xiàn)生產(chǎn)過程的智能化、自動化和網(wǎng)絡化。實現(xiàn)智能制造的重要條件有很多,以下是一些關鍵因素的詳細分析: 技術創(chuàng)新 技術創(chuàng)新是實現(xiàn)智能制造
    的頭像 發(fā)表于 06-07 15:42 ?2295次閱讀

    PWM控制電機轉速的原理與實現(xiàn)

    PWM(脈寬調(diào)制)是一種廣泛應用于電機控制領域的調(diào)制技術。它通過調(diào)節(jié)脈沖信號的占空比,實現(xiàn)對電機轉速的精確控制。PWM控制電機轉速的方法因其高效、穩(wěn)定、易于實現(xiàn)等優(yōu)點,在現(xiàn)代工業(yè)、家電、汽車等領域得到了廣泛應用。本文將詳細介紹PWM控制電機轉速的原理、
    的頭像 發(fā)表于 06-03 17:23 ?7946次閱讀

    逆變電路實現(xiàn)降壓的原理是什么

    逆變電路實現(xiàn)降壓的原理主要基于電力電子器件的開關特性和控制策略。
    的頭像 發(fā)表于 05-29 16:01 ?1156次閱讀