在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Nacos服務地址動態感知原理

工程師鄧生 ? 來源:CSDN ? 作者:吳聲子夜歌 ? 2022-09-26 10:40 ? 次閱讀

Nacos架構

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

Provider APP:服務提供者

Consumer APP:服務消費者

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

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

Nacos Console:控制臺

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

注冊中心的原理

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

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

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

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


基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

SpringCloud完成注冊的時機

在Spring-Cloud-Common包中有一個類org.springframework.cloud. client.serviceregistry .ServiceRegistry ,它是Spring Cloud提供的服務注冊的標準。集成到Spring Cloud中實現服務注冊的組件,都會實現該接口

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

該接口有一個實現類是NacoServiceRegistry。

SpringCloud集成Nacos的實現過程:

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

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

其中AutoServiceRegistrationAutoConfiguration就是服務注冊相關的配置類:

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

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

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


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

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

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

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

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

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


NacosServiceRegistry的實現

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

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

跟蹤NacosNamingService的registerInstance()方法:

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


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

serverProxy.registerService()實現服務注冊

心跳機制:

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


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

注冊原理:

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

Open API:

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

SDK:

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

這兩種形式本質都一樣,底層都是基于HTTP協議完成請求的。所以注冊服務就是發送一個HTTP請求:

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


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

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

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

調用registerInstance注冊實例

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

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

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

調用addInstance添加服務實例

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

根據namespaceId、serviceName從緩存中獲取Service實例

如果Service實例為空,則創建并保存到緩存中

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

通過putService()方法將服務緩存到內存

service.init()建立心跳機制

consistencyService.listen實現數據一致性監聽

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

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

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


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

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


繼續調用addInstance方法把當前注冊的服務實例保存到Service中:

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

總結:

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

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

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

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

基于數據一致性協議服務數據進行同步

服務提供者地址查詢

Open API:

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

SDK:

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

InstanceController中的list方法:

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

解析請求參數

通過doSrvIPXT返回服務列表數據

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

根據namespaceId、serviceName獲得Service實例

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

遍歷組裝JSON字符串并返回

Nacos服務地址動態感知原理

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

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

具體調用方式如下:

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

或者調用selectInstance方法,如果將subscribe屬性設置為true,會自動注冊監聽:

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

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

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

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

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

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




審核編輯:劉清

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

    關注

    2

    文章

    1501

    瀏覽量

    62026
  • RBAC
    +關注

    關注

    0

    文章

    44

    瀏覽量

    9970
  • HTTP協議
    +關注

    關注

    0

    文章

    61

    瀏覽量

    9722

原文標題:從實現原理講,Nacos 為什么這么強

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    Nacos的概念和功能

    1、Nacos簡介 Nacos的概念和功能 Nacos是一個面向微服務架構的動態服務發現、配置管
    的頭像 發表于 09-25 11:02 ?2338次閱讀

    支持Dubbo生態發展,阿里巴巴啟動新的開源項目 Nacos

    ,其核心定位是 “一個更易于幫助構建云原生應用的動態服務發現、配置和服務管理平臺”。Nacos 有三大主要功能:服務發現與
    發表于 07-05 17:35

    結合場景談一談微服務配置

    數據庫連接信息限流閾值和降級開關流量的動態調度上一篇:Nacos幫我解決了什么問題?數據庫連接信息曾經有朋友跟我聊過一個問題,“業務飛速發展,團隊越來越大,人員流動也相對頻繁起來,怎么才能更好的保證
    發表于 12-12 15:53

    構建ARM64版本nacos docker鏡像

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

    還在為 Eureka 閉源擔心?Nacos 來了

    的新開源項目,Nacos 發布 v0.1.0 版本的同時也發布了中英雙語的官網,從其官網描述來看,其核心定位是 “一個更易于幫助構建云原生應用的動態服務發現、配置和服務管理平臺”。
    發表于 08-07 15:13 ?176次閱讀

    Nacos發布0.5.0版本,輕松玩轉動態 DNS 服務

    服務發現模式,DNS-F 提供獨立于應用進程的Agent, 通過攔截應用的域名解析請求,讓Nacos對應用提供域名數據動態推送更新、健康檢查、異常節點下線、以及統一的域名管理視圖等服務
    發表于 12-05 16:22 ?119次閱讀

    服務配置中心實戰:Spring + MyBatis + Druid + Nacos

    在 結合場景談服務發現和配置 中我們講述了 Nacos 配置中心的三個典型的應用場景,包括如何在 Spring Boot 中使用 Nacos 配置中心將數據庫連接信息管控起來,而在“原生
    發表于 12-29 17:09 ?1104次閱讀
    微<b class='flag-5'>服務</b>配置中心實戰:Spring + MyBatis + Druid + <b class='flag-5'>Nacos</b>

    海外服務器IP地址都有哪些類型

    恒訊科技在早期為大家分享過海外服務器的IP地址分配方式和工作原理,今日為大家分享海外服務器IP地址主要類型,一共有4種分別是:私有IP地址
    的頭像 發表于 04-29 15:10 ?6827次閱讀

    Nacos為什么這么強?Nacos注冊中心的底層原理,從服務注冊到服務發現

    來源:碼猿技術專欄 1. Nacos介紹 2. Nacos注冊中心實現原理分析 2.1 Nacos架構圖 2.2 注冊中心的原理 3. Nacos源碼分析 3.1
    的頭像 發表于 10-08 16:46 ?1.2w次閱讀

    華為云CSE 關鍵特性,支持托管Nacos注冊配置中心

    于構建云原生應用的動態服務發現、配置管理和服務管理平臺。 Nacos 幫助您發現、配置和管理微服務Na
    的頭像 發表于 12-29 16:23 ?1024次閱讀
    華為云CSE 關鍵特性,支持托管<b class='flag-5'>Nacos</b>注冊配置中心

    華為云微服務引擎0停機遷移Nacos?它是這樣做的

    華為云微服務引擎| 0停機遷移Nacos? “它”是這樣做的 遷移云環境****場景 ? 微服務規模小,使用微服務引擎CSE成本太高。 ? dubbo/
    的頭像 發表于 12-29 20:01 ?773次閱讀

    基于Nacos的簡單動態化線程池實現

    本文以Nacos作為服務配置中心,以修改線程池核心線程數、最大線程數為例,實現一個簡單的動態化線程池。
    發表于 01-06 14:14 ?864次閱讀

    Nacos實現原理:SpringCloud集成Nacos的實現過程

    Nacos服務提供者,里面包含的Open API是功能訪問入口,Conig Service、Naming Service 是Nacos提供的配置服務、命名
    發表于 10-09 16:08 ?1085次閱讀
    <b class='flag-5'>Nacos</b>實現原理:SpringCloud集成<b class='flag-5'>Nacos</b>的實現過程

    哪些關鍵點在使用動態IP作為服務地址時需要考慮?

    在考慮使用動態IP作為服務地址時,有幾個關鍵點需要考量,同時也有一些實戰策略可以幫助優化網絡性能和SEO。 一、考量因素: IP地址變化:動態
    的頭像 發表于 08-23 10:58 ?240次閱讀
    主站蜘蛛池模板: 91在线网| 免费网站啪啪大全| 国产哺乳期奶水avav| 人人爱人人艹| 国产小视频在线高清播放| 制服丝袜国产精品| 在线观看视频你懂的| 日本在线黄| 六月丁香色婷婷| 天堂在线bt| 日韩孕交| 免看乌克兰a一级| 欧美一级特黄aaaaaa在线看片 | 美国三级网| 天堂日韩| 99久久亚洲国产高清观看| 免费看黄色片网站| 三级视频欧美| 国模绪| 成人午夜网址| 五月婷在线观看| 一级免费黄色片| 插插插操操操| 四虎三级| 天天襙| 中日韩欧美在线观看| 日本亚洲欧美国产日韩ay高清| 午夜免费啪| 俄罗斯久久| 欧洲色| 激情五月宗合网| 婷婷久久综合九色综合九七| 91极品视频在线观看| 日本aaaaa| 国产一级毛片外aaaa| 免费看黄色的网站| 婷婷六月久久综合丁香一二| 亚洲aa视频| 亚洲色图片区| 精品国产乱码久久久久久浪潮| 性欧美处|