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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;否则就…