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

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

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

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

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

工程師鄧生 ? 來(lái)源:CSDN ? 作者:吳聲子夜歌 ? 2022-09-26 10:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nacos架構(gòu)

464859ba-3ccd-11ed-9e49-dac502259ad0.png

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

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

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

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

Nacos Console:控制臺(tái)

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

注冊(cè)中心的原理

服務(wù)實(shí)例在啟動(dòng)時(shí)注冊(cè)到服務(wù)注冊(cè)表,并在關(guān)閉時(shí)注銷

服務(wù)消費(fèi)者查詢服務(wù)注冊(cè)表,獲得可用實(shí)例

服務(wù)注冊(cè)中心需要調(diào)用服務(wù)實(shí)例的健康檢查API來(lái)驗(yàn)證它是否能夠處理請(qǐng)求

480ad886-3ccd-11ed-9e49-dac502259ad0.png


基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

SpringCloud完成注冊(cè)的時(shí)機(jī)

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

4831214e-3ccd-11ed-9e49-dac502259ad0.png

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

SpringCloud集成Nacos的實(shí)現(xiàn)過(guò)程:

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

485fb392-3ccd-11ed-9e49-dac502259ad0.png

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

4aab3e50-3ccd-11ed-9e49-dac502259ad0.png

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

4adced88-3ccd-11ed-9e49-dac502259ad0.png


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

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

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

4b0aeca6-3ccd-11ed-9e49-dac502259ad0.png

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

4b1f96d8-3ccd-11ed-9e49-dac502259ad0.png
4b368cd0-3ccd-11ed-9e49-dac502259ad0.png


NacosServiceRegistry的實(shí)現(xiàn)

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

4b59d5d2-3ccd-11ed-9e49-dac502259ad0.png

跟蹤NacosNamingService的registerInstance()方法:

4b73ac96-3ccd-11ed-9e49-dac502259ad0.png


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

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

心跳機(jī)制:

4ba1aa06-3ccd-11ed-9e49-dac502259ad0.png


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

注冊(cè)原理:

Nacos提供了SDK和Open API兩種形式來(lái)實(shí)現(xiàn)服務(wù)注冊(cè)。

Open API:

4bb5d814-3ccd-11ed-9e49-dac502259ad0.png

SDK:

4bc27114-3ccd-11ed-9e49-dac502259ad0.png

這兩種形式本質(zhì)都一樣,底層都是基于HTTP協(xié)議完成請(qǐng)求的。所以注冊(cè)服務(wù)就是發(fā)送一個(gè)HTTP請(qǐng)求:

4bdc74ce-3ccd-11ed-9e49-dac502259ad0.png


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

4c173bb8-3ccd-11ed-9e49-dac502259ad0.png

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

調(diào)用registerInstance注冊(cè)實(shí)例

4c4d6440-3ccd-11ed-9e49-dac502259ad0.png

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

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

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

4c8718d4-3ccd-11ed-9e49-dac502259ad0.png
4cbdb15a-3ccd-11ed-9e49-dac502259ad0.png

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

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

4ccb0382-3ccd-11ed-9e49-dac502259ad0.png

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

service.init()建立心跳機(jī)制

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

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

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

4ce77a08-3ccd-11ed-9e49-dac502259ad0.png


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

4d09d116-3ccd-11ed-9e49-dac502259ad0.png


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

4d3ba0a6-3ccd-11ed-9e49-dac502259ad0.png

總結(jié):

Nacos客戶端通過(guò)Open API的形式發(fā)送服務(wù)注冊(cè)請(qǐng)求

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

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

使用定時(shí)任務(wù)對(duì)當(dāng)前服務(wù)下的所有實(shí)例建立心跳檢測(cè)機(jī)制

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

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

Open API:

4d47a932-3ccd-11ed-9e49-dac502259ad0.png

SDK:

4d64f7b2-3ccd-11ed-9e49-dac502259ad0.png

InstanceController中的list方法:

4da130a6-3ccd-11ed-9e49-dac502259ad0.png

解析請(qǐng)求參數(shù)

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

4dd25f8c-3ccd-11ed-9e49-dac502259ad0.png
4e296dcc-3ccd-11ed-9e49-dac502259ad0.png

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

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

遍歷組裝JSON字符串并返回

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

可以通過(guò)subscribe方法來(lái)實(shí)現(xiàn)監(jiān)聽(tīng),其中serviceName表示服務(wù)名、EventListener表示監(jiān)聽(tīng)到的事件:

4e501c92-3ccd-11ed-9e49-dac502259ad0.png

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

4e702136-3ccd-11ed-9e49-dac502259ad0.png

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

4e961ca6-3ccd-11ed-9e49-dac502259ad0.png

4eb2b01e-3ccd-11ed-9e49-dac502259ad0.png

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

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

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

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




審核編輯:劉清

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

    關(guān)注

    2

    文章

    1620

    瀏覽量

    64040
  • RBAC
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

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

    關(guān)注

    0

    文章

    67

    瀏覽量

    10212

原文標(biāo)題:從實(shí)現(xiàn)原理講,Nacos 為什么這么強(qiáng)

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Nacos是什么?Nacos配置管理技巧你知道嗎

    Nacos 是阿里巴巴今年7月份開(kāi)源的項(xiàng)目,如其名, Naming Configuration Service ,專注于服務(wù)發(fā)現(xiàn)和配置管理領(lǐng)域。本系列文章,將從 5W1H(What、Where
    的頭像 發(fā)表于 10-29 08:53 ?1.5w次閱讀

    Nacos的概念和功能

    1、Nacos簡(jiǎn)介 Nacos的概念和功能 Nacos是一個(gè)面向微服務(wù)架構(gòu)的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管
    的頭像 發(fā)表于 09-25 11:02 ?3181次閱讀

    支持Dubbo生態(tài)發(fā)展,阿里巴巴啟動(dòng)新的開(kāi)源項(xiàng)目 Nacos

    ,其核心定位是 “一個(gè)更易于幫助構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái)”。Nacos 有三大主要功能:服務(wù)發(fā)現(xiàn)與
    發(fā)表于 07-05 17:35

    結(jié)合場(chǎng)景談一談微服務(wù)配置

    數(shù)據(jù)庫(kù)連接信息限流閾值和降級(jí)開(kāi)關(guān)流量的動(dòng)態(tài)調(diào)度上一篇:Nacos幫我解決了什么問(wèn)題?數(shù)據(jù)庫(kù)連接信息曾經(jīng)有朋友跟我聊過(guò)一個(gè)問(wèn)題,“業(yè)務(wù)飛速發(fā)展,團(tuán)隊(duì)越來(lái)越大,人員流動(dòng)也相對(duì)頻繁起來(lái),怎么才能更好的保證
    發(fā)表于 12-12 15:53

    構(gòu)建ARM64版本nacos docker鏡像

    在適配過(guò)程中有大量合作伙伴用到nacos且采用容器化部署,dockerhub未提供官方鏡像,因此需要在鯤鵬服務(wù)器自定義構(gòu)建。構(gòu)建前提:Docker已部署構(gòu)建步驟:1、下載包含構(gòu)建所需的腳本下載完成
    發(fā)表于 06-16 14:29

    還在為 Eureka 閉源擔(dān)心?Nacos 來(lái)了

    的新開(kāi)源項(xiàng)目,Nacos 發(fā)布 v0.1.0 版本的同時(shí)也發(fā)布了中英雙語(yǔ)的官網(wǎng),從其官網(wǎng)描述來(lái)看,其核心定位是 “一個(gè)更易于幫助構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái)”。
    發(fā)表于 08-07 15:13 ?256次閱讀

    Nacos發(fā)布0.5.0版本,輕松玩轉(zhuǎn)動(dòng)態(tài) DNS 服務(wù)

    服務(wù)發(fā)現(xiàn)模式,DNS-F 提供獨(dú)立于應(yīng)用進(jìn)程的Agent, 通過(guò)攔截應(yīng)用的域名解析請(qǐng)求,讓Nacos對(duì)應(yīng)用提供域名數(shù)據(jù)動(dòng)態(tài)推送更新、健康檢查、異常節(jié)點(diǎn)下線、以及統(tǒng)一的域名管理視圖等服務(wù)
    發(fā)表于 12-05 16:22 ?143次閱讀

    服務(wù)配置中心實(shí)戰(zhàn):Spring + MyBatis + Druid + Nacos

    在 結(jié)合場(chǎng)景談服務(wù)發(fā)現(xiàn)和配置 中我們講述了 Nacos 配置中心的三個(gè)典型的應(yīng)用場(chǎng)景,包括如何在 Spring Boot 中使用 Nacos 配置中心將數(shù)據(jù)庫(kù)連接信息管控起來(lái),而在“原生
    發(fā)表于 12-29 17:09 ?1221次閱讀
    微<b class='flag-5'>服務(wù)</b>配置中心實(shí)戰(zhàn):Spring + MyBatis + Druid + <b class='flag-5'>Nacos</b>

    Nacos為什么這么強(qiáng)?Nacos注冊(cè)中心的底層原理,從服務(wù)注冊(cè)到服務(wù)發(fā)現(xiàn)

    來(lái)源:碼猿技術(shù)專欄 1. Nacos介紹 2. Nacos注冊(cè)中心實(shí)現(xiàn)原理分析 2.1 Nacos架構(gòu)圖 2.2 注冊(cè)中心的原理 3. Nacos源碼分析 3.1
    的頭像 發(fā)表于 10-08 16:46 ?1.2w次閱讀

    華為云CSE 關(guān)鍵特性,支持托管Nacos注冊(cè)配置中心

    于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。 Nacos 幫助您發(fā)現(xiàn)、配置和管理微服務(wù)Na
    的頭像 發(fā)表于 12-29 16:23 ?1274次閱讀
    華為云CSE 關(guān)鍵特性,支持托管<b class='flag-5'>Nacos</b>注冊(cè)配置中心

    華為云微服務(wù)引擎0停機(jī)遷移Nacos?它是這樣做的

    華為云微服務(wù)引擎| 0停機(jī)遷移Nacos? “它”是這樣做的 遷移云環(huán)境****場(chǎng)景 ? 微服務(wù)規(guī)模小,使用微服務(wù)引擎CSE成本太高。 ? dubbo/
    的頭像 發(fā)表于 12-29 20:01 ?994次閱讀

    基于Nacos的簡(jiǎn)單動(dòng)態(tài)化線程池實(shí)現(xiàn)

    本文以Nacos作為服務(wù)配置中心,以修改線程池核心線程數(shù)、最大線程數(shù)為例,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)態(tài)化線程池。
    發(fā)表于 01-06 14:14 ?1087次閱讀

    Nacos、OpenFeign、Ribbon組件協(xié)調(diào)工作的原理

    ? ? Nacos 如何進(jìn)行服務(wù)自動(dòng)注冊(cè)? Ribbon OpenFeign 總結(jié) 前幾天有個(gè)大兄弟問(wèn)了我一個(gè)問(wèn)題,注冊(cè)中心要集成SpringCloud,想實(shí)現(xiàn)SpringCloud的負(fù)載均衡,需要
    的頭像 發(fā)表于 05-22 10:46 ?1336次閱讀
    <b class='flag-5'>Nacos</b>、OpenFeign、Ribbon組件協(xié)調(diào)工作的原理

    Nacos實(shí)現(xiàn)原理:SpringCloud集成Nacos的實(shí)現(xiàn)過(guò)程

    Nacos服務(wù)提供者,里面包含的Open API是功能訪問(wèn)入口,Conig Service、Naming Service 是Nacos提供的配置服務(wù)、命名
    發(fā)表于 10-09 16:08 ?1454次閱讀
    <b class='flag-5'>Nacos</b>實(shí)現(xiàn)原理:SpringCloud集成<b class='flag-5'>Nacos</b>的實(shí)現(xiàn)過(guò)程

    哪些關(guān)鍵點(diǎn)在使用動(dòng)態(tài)IP作為服務(wù)地址時(shí)需要考慮?

    在考慮使用動(dòng)態(tài)IP作為服務(wù)地址時(shí),有幾個(gè)關(guān)鍵點(diǎn)需要考量,同時(shí)也有一些實(shí)戰(zhàn)策略可以幫助優(yōu)化網(wǎng)絡(luò)性能和SEO。 一、考量因素: IP地址變化:動(dòng)態(tài)
    的頭像 發(fā)表于 08-23 10:58 ?525次閱讀