Nacos-2--Nacos1.x版本的通信原理

在Nacos 1.x版本中,客戶端長輪詢(Long Polling)和服務端UDP主動推送是兩種不同的機制,分別用于配置管理和服務發現場景。它們的核心目標都是實現動態更新的實時感知,但實現方式、數據內容和適用場景完全不同。

1、長輪詢(Long Polling)(配置管理)

1、長輪詢的工作流程

  • 客戶端發起請求:客戶端(如Spring Boot應用)定期發起HTTP長輪詢請求,攜帶本地配置的dataId、group和MD5校驗值。
  • 服務端掛起請求:若配置未變化,服務端會掛起請求(默認30秒),期間保持連接不關閉
  • 配置變更觸發響應:當服務端檢測到配置更新(如通過控制臺修改配置),會立即返回新配置內容(包括配置值和新MD5)。
  • 客戶端處理響應:客戶端收到響應后,對比MD5,若變化則更新本地緩存,并觸發監聽器回調(如刷新Spring Bean)

2、返回的內容是什么?

  • 配置內容:返回的是完整的配置數據(如application.properties的鍵值對)。
  • MD5校驗值:用于客戶端驗證配置是否真正變化,避免網絡傳輸中的數據不一致問題。

3、是否需要客戶端重新拉取節點列表?

  • 不需要。長輪詢的目標是同步配置數據,而不是服務實例列表
  • 如果涉及服務發現(如節點狀態變化),需要通過服務發現接口(如nacos-client的服務訂閱功能)獲取實例列表。

4、特點

  • 返回內容:完整的配置內容(如application、properties的鍵值對)。
  • 實時性:延遲在0~30秒之間(取決于長輪詢超時時間)。
  • 可靠性:依賴HTTP協議的重試機制,確保配置最終一致。

2、UDP主動推送(服務發現)

1、為什么需要UDP推送?

  • 長輪詢的局限性:HTTP長輪詢雖然能減少無效請求,但仍存在延遲(如30秒超時)和網絡開銷。
  • 服務發現的實時性需求:服務實例的上下線需要毫秒級通知,否則可能導致請求發送到已下線的節點。
  • UDP的優勢:基于UDP的廣播或單播可以實現低延遲、高并發的推送,適合服務實例變更的實時通知。

2、UDP推送的內容是什么?

  • 服務實例列表:推送的是服務名(ServiceName)對應的實例IP、端口、健康狀態等元數據。即:已經發生變化的服務實例列表。
  • 變更類型:明確標識是新增實例、刪除實例還是實例狀態更新(如健康檢查失敗)。

3、UDP推送的實現原理

  • 客戶端監聽UDP端口:Nacos客戶端在本地啟動一個UDP Server,監聽特定端口
  • 服務端主動推送:當服務端檢測到實例變更(如心跳超時或新增注冊),會通過UDP協議將變更后的實例列表發送到客戶端監聽的端口
  • 客戶端更新本地緩存:收到UDP推送后,客戶端立即更新本地服務實例緩存,確保后續請求使用最新實例。

4、特點

  • 返回內容:服務實例列表(包括IP、端口、健康狀態等元數據)。
  • 實時性:毫秒級通知,延遲極低。
  • 可靠性:依賴UDP的無連接特性,可能存在丟包風險,但客戶端會通過定時拉取兜底(如10秒一次的長輪詢)。

3、長輪詢與UDP推送的區別

在這里插入圖片描述
主要區別:

  • 目的不同:雖然兩者的目的都是為了使客戶端能夠及時獲得服務列表的變化,但它們的工作機制有所不同。HTTP長輪詢是一種拉模式,即客戶端定期詢問服務器是否有變化;而UDP推送是一種推模式,服務器主動將變更信息推送給客戶端。
  • 實現方式不同:HTTP長輪詢是基于HTTP協議的,它利用了現有的HTTP連接進行通信。而UDP推送則是基于UDP協議,具有更低的延遲和開銷,但是可能不如TCP可靠。
  • 應用場景不同:在一些網絡環境不太穩定的情況下,可能會更傾向于使用HTTP長輪詢以保證消息的可靠性。而在要求快速響應的場景下,UDP推送則更為合適。

4、為什么需要兩種機制?

1、配置管理與服務發現的目標不同

  • 配置管理:關注鍵值對的動態更新,對實時性要求較低(如日志級別調整可以容忍30秒延遲)。
  • 服務發現:關注實例列表的實時同步,對延遲敏感(如服務下線需立即感知,避免請求失敗)。

2、協議選擇的權衡

  • HTTP長輪詢:基于通用協議,兼容性好,適合配置管理。
  • UDP推送:低延遲、低開銷,適合服務發現的高并發場景。

3、Nacos 1.x的架構限制

  • 在Nacos 1.x中,服務發現和配置管理是兩個獨立模塊,分別采用最適合的通信方式。
  • Nacos 2.0后,通過gRPC長連接統一了服務發現和配置管理的通信協議(取代UDP和HTTP長輪詢)

5、Nacos1.x的實際場景協作

配置變更:通過HTTP長輪詢實現。
服務(節點)狀態變更:既可以通過UDP推送,也可以通過HTTP長輪詢實現。二者是并行機制,不是“二選一”,但默認優先使用UDP推送以提高性能和實時性。如果UDP不可用(如網絡限制、防火墻、客戶端不支持等),會自動降級為HTTP長輪詢

1、配置管理

  • 客戶端通過HTTP長輪詢獲取配置變更(如application.properties的timeout=3000)。
  • 變更后,客戶端更新本地配置并觸發回調(如重新加載數據庫連接池)。

2、服務發現

  • 客戶端通過UDP推送或長輪詢(作為兜底)獲取服務實例列表。
  • 實例變更(如order-service新增一個節點)時,服務端立即通過UDP推送新列表,客戶端更新負載均衡器(如Ribbon)的實例緩存。

兩者如何協作?

  • 主流程:服務端優先通過UDP推送實例變更,客戶端收到后立即更新本地緩存。
  • 兜底流程:如果UDP推送失敗,客戶端通過HTTP長輪詢定期拉取實例列表,確保最終一致性。
  • 客戶端邏輯:Nacos客戶端會同時啟動UDP監聽和HTTP長輪詢,優先使用UDP推送,失敗時自動切換到HTTP長輪詢。

6、總結

  • HTTP長輪詢:用于配置管理,返回配置內容,客戶端無需重新拉取節點列表。
  • UDP推送:用于服務發現,返回實例列表變更,解決長輪詢的延遲問題。
  • 兩者不是一回事:協議、數據內容、適用場景完全不同,但共同目標是實現動態更新的實時感知。

最終結論:
在這里插入圖片描述

通過這種分層設計,Nacos 1.x在保證兼容性的同時,滿足了不同場景下的實時性需求。在Nacos 2.0中,這些機制被gRPC長連接統一優化,進一步提升了性能和可靠性。

向陽前行,Dare To Be!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95292.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習——09 聚類算法

1 聚類算法聚類算法: 是一種無監督學習算法,它不需要預先知道數據的類別信息,而是根據樣本之間的相似性,將樣本劃分到不同的類別中;不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算…

生成式AI應用生態的爆發與專業化演進:從零和博弈到正和共贏

2025年,生成式AI產業規模已突破7000億元,全球生成式AI市場規模預計在2028年達到2842億美元(IDC數據)。在這場技術革命中,AI基礎模型的分化已證明:差異化競爭而非同質化替代,才是推動產業發展的核心邏輯。如今,這一規律正從基礎模型層向應用生成平臺層蔓延——Lovable、…

Mysql——Sql的執行過程

目錄 一、Sql的執行過程流程圖解 二、Sql的執行過程流程 1.2.1、建立連接 1.2.2、服務層(緩存、解析器、預處理器、優化器、執行器) 1.2.2.1、緩存 1.2.2.2、解析器 1.2.2.3、預處理器 1.2.2.4、優化器 1.2.2.5、執行器 1.2.3、引擎層 一、Sql的執行過程流程圖解 Sql的執行過…

【Axure高保真原型】地圖路線和定位

今天和大家分享地圖路線和定位的原型模版,載入后,可以查看汽車行進路線和所在定位 提供了停靠和不停靠站點兩個案例,具體效果可以打開下方原型地址體驗或者點擊下方視頻觀看 【Axure高保真原型】地圖路線和定位【原型預覽含下載地址】 https…

【96頁PPT】華為IPD流程管理詳細版(附下載方式)

篇幅所限,本文只提供部分資料內容,完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91633108 資料解讀:華為IPD流程管理詳細版 詳細資料請看本解讀文章的最后內容 華為的集成產品開發(IPD)…

深度解析Mysql的開窗函數(易懂版)

SQL 開窗函數(Window Function)是一種強大的分析工具,它能在保留原有數據行的基礎上,對 "窗口"(指定范圍的行集合)進行聚合、排名或分析計算,解決了傳統GROUP BY聚合會合并行的局限性…

Java靜態代理和動態代理

Java靜態代理和動態代理 靜態代理 現在有一個計算類,有四個方法,加減乘除,如果需要給這四個方法都加上同一個邏輯,可以創建一個類作為代理類,把計算類注入到這個類中,然后再代理類中定義方法,并…

MySQL——MySQL引擎層BufferPool工作過程原理

目錄一、MySQL引擎層BufferPool工作過程圖解二、MySQL引擎層BufferPool工作過程原理一、MySQL引擎層BufferPool工作過程圖解 圖解 二、MySQL引擎層BufferPool工作過程原理 首先關閉自動提交,執行一條修改語句。 SET AUTOCOMMIT 0; update employees set name張三…

Python初學者筆記第二十二期 -- (JSON數據解析)

第31節課 JSON數據解析 1.JSON基礎概念 JSON 是一種輕量級的數據交換格式(另一個叫XML),具有簡潔、易讀的特點,并且在不同編程語言之間能很好地實現數據傳遞。在 Python 中,json模塊能夠實現 Python 數據類型與 JSON 數…

基于多模態大模型的個性化學習路徑生成系統研究

摘要 隨著互聯網技術的迅猛發展,個性化學習路徑生成系統的研究在教育領域日益凸顯其重要性。本研究聚焦于基于多模態大模型的個性化學習路徑生成系統,旨在通過整合多模態數據,為學習者提供更加精準、個性化的學習路徑。多模態大模型&#xf…

ESP32 燒錄固件失敗原因排除

ESP32 燒錄固件時,有哪些特殊引腳需要注意電平狀態的在 ESP32 燒錄固件時,有幾個關鍵引腳的電平狀態會直接影響燒錄過程,需要特別注意:GPIO0(BOOT 引腳):燒錄模式:需要拉低&#xff…

3D視覺系統在機器人行業中的應用

視覺引導機器人技術(VGR)具有成熟的2D成像技術,但是經濟高效的3D技術的出現使機器人應用的可能性更大。工業自動化的第一次迭代使用“盲”機器人,該機器人取決于待處理材料的精確定位。這樣的機器人相對不靈活,只能通過…

MySQL高可用改造之數據庫開發規范(大事務與數據一致性篇)

文章目錄一、前言二、延遲的原因三、大事務處理規范3.1. 刪除類操作優化設計3.2. 大事務通用拆分原則四、數據一致性核對規范4.1. 主從變更記錄識別方法五、小結一、前言 MySQL 高可用架構中最基礎、最為核心的內容:MySQL 復制(Replication)…

第9節 大模型分布式推理核心挑戰與解決方案

文章目錄 # 前言 一、通信瓶頸突破:讓數據“跑”得更快 1. 問題:通信為什么會成為瓶頸? 2. 解決方案:從硬件到算法的全鏈路優化 (1)硬件層:升級“高速公路” (2)算法層:給數據“瘦身”并“錯峰出行” (3)架構層:讓數據“少跑路” 3. 效果評估:如何判斷通信瓶頸已…

ESP32開發板接4陣腳屏幕教程(含介紹和針腳編號對應)

“4針屏幕” 一般有兩種常見類型:IC 屏幕(如 0.96" OLED、SSD1306 等) 4 個針腳通常是:VCC → 接 ESP32 的 3.3V(有的屏幕支持 5V)GND → 接 ESP32 的 GNDSCL(時鐘)→ 接 ESP32…

2025 年國內可用 Docker 鏡像加速器地址

文章目錄一、加速器地址搭建 Docker 鏡像源二、使用一、加速器地址 docker.1ms.rundocker.domys.ccdocker.imgdb.dedocker-0.unsee.techdocker.hlmirror.comcjie.eu.orgdocker.m.daocloud.iohub.rat.devdocker.1panel.livedocker.rainbond.cc 搭建 Docker 鏡像源 以上鏡像源…

[Robotics_py] 路徑規劃算法 | 啟發式函數 | A*算法

第五章:路徑規劃算法 歡迎回來,未來的機器人專家-=≡(?ω?) 在之前的章節中,我們已為機器人配備了核心知識:它能夠跟蹤自身的機器人狀態/位姿,利用環境表示(柵格地圖)理…

解決 HTTP 請求 RequestBody 只能被讀取一次的問題

簡介 HTTP 請求 RequestBody 只能被讀取一次:HttpServletRequest 的輸入流 (InputStream) 在被讀取后會被關閉,導致后續無法再次讀取。本文將介紹如何通過 請求包裝類 (RequestWrapper) 來解決這個問題。問題背景 當我們需要在以下場景中多次讀取 Reques…

(LeetCode 面試經典 150 題) 226. 翻轉二叉樹 (深度優先搜索dfs )

題目:226. 翻轉二叉樹 思路:深度優先搜索dfs,時間復雜度0(n)。 C版本: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr)…

2025牛客暑期多校訓練營3(FDJAEHB)

題目鏈接&#xff1a;牛客競賽_ACM/NOI/CSP/CCPC/ICPC算法編程高難度練習賽_牛客競賽OJ F Flower 思路 可知當n<a時無論怎么操作她都會離開 n%(ab&#xff09;是指進行完若干輪之后剩下的不足ab個&#xff0c;如果是>a的話那么最后一輪必然不在a中&#xff0c;否則就…