Nacos 中使用了哪些缓存?缓存的目的是什么?是如何实现的?
Nacos 在服务端和客户端都广泛的使用了缓存机制,下面着重介绍一下。
一、 Nacos 服务端缓存 (Server-Side Caching)
Nacos 服务端缓存的主要目的是提高读取性能、降低对底层存储(数据库或磁盘文件)的压力,并加速对客户端请求的响应。
-
缓存的内容:
- 服务实例信息: 注册到 Nacos 的服务实例列表(IP、端口、权重、元数据、健康状态等)。这是服务发现的核心数据,查询频率非常高。
- 服务信息: 服务的元数据,例如服务名、分组名、保护阈值等。
- 配置信息: 用户发布的配置内容(按
dataId
和group
区分)。客户端会频繁拉取或监听配置变更。 - 集群节点信息: Nacos 集群自身节点的状态和信息。
- 其他内部状态或元数据: 用于加速内部处理逻辑。
-
缓存的目的:
- 提升读性能/降低延迟: 从内存缓存中读取数据远快于从数据库或磁盘读取,可以极大加速客户端对服务列表或配置内容的查询请求。
- 减轻存储层负载: 大量的客户端(可能成千上万)会频繁请求服务实例和配置信息。如果每次请求都直接访问数据库,会对数据库造成巨大压力,容易成为性能瓶颈。缓存层可以挡住绝大部分读请求。
- 提高可用性: 即使底层存储暂时出现抖动,只要缓存中有数据,服务端仍然可以在一定程度上继续提供(可能是稍微过期的)服务发现和配置查询能力。
-
实现方式:
- 内存缓存: 主要使用 JVM 内存作为缓存存储。常见使用
java.util.concurrent.ConcurrentHashMap
等线程安全的 Map 结构来存储缓存数据,Key 通常是服务名、dataId
+group
的组合等。 - 缓存更新机制:
- 写操作触发更新/失效: 当有数据变更操作时(如服务注册、注销、心跳更新、配置发布/删除),Nacos 首先会更新底层持久化存储(如数据库)。操作成功后,会主动更新或失效相应的内存缓存。这是保证缓存一致性的关键。
- 事件驱动: Nacos 内部通常有事件发布/订阅机制。当数据发生变化并持久化成功后,会发布一个事件,相关的缓存监听器接收到事件后更新缓存。
- 一致性协议关联: 在集群模式下,数据的变更通常通过一致性协议(如 Raft 或 Nacos 早期版本的类 Distro 协议)同步到其他节点。当一个节点通过协议成功应用(Apply)了一个数据变更日志后,它会更新自己的内存缓存。这保证了集群中各个节点缓存状态的最终一致性。
- 懒加载/定时加载 (较少用于核心数据): 某些非核心或不经常变动的数据可能会在首次读取时加载,或通过定时任务定期从存储刷新。但对于服务实例和配置这类核心数据,主动更新是主要方式。
- 分层缓存 (可能): 某些实现可能会考虑使用多级缓存(如 L1/L2),但 Nacos 的核心缓存主要是基于内存的单层缓存。
- 内存缓存: 主要使用 JVM 内存作为缓存存储。常见使用
二、 Nacos 客户端缓存 (Client-Side Caching)
Nacos 客户端(即你的应用程序中引入 nacos-client
的部分)也实现了缓存,主要目的是提高应用程序性能、降低对 Nacos Server 的请求频率,并在 Nacos Server 短暂不可用时提供一定的容错能力。
-
缓存的内容:
- 服务实例列表: 客户端订阅的服务,其可用的实例信息会被缓存在客户端内存中。
- 配置信息: 客户端获取到的配置内容会被缓存在内存中,并且通常会有一个本地文件快照(Failover 机制)。
-
缓存的目的:
- 提升应用性能: 应用获取服务实例或配置时,可以直接从本地内存缓存读取,避免了网络请求的开销,速度极快。
- 降低服务端压力: 客户端不需要每次需要数据都去请求 Nacos Server,大大减少了服务端的 QPS。
- 提高应用容错性/可用性 (Failover):
- 服务发现: 如果 Nacos Server 暂时宕机或网络不通,客户端仍然可以使用本地缓存的(可能是稍微过期的)服务实例列表进行服务调用,避免完全瘫痪。
- 配置管理: 如果 Nacos Server 不可用,客户端可以加载本地磁盘上的配置快照文件 (
snapshot
目录),保证应用能够使用上一份正确的配置启动或运行。
-
实现方式:
- 内存缓存: 同样主要使用
ConcurrentHashMap
等内存结构存储服务实例和配置。 - 本地文件快照 (配置管理): Nacos Client 会将成功获取到的配置内容写入到本地磁盘的一个文件中(通常在用户主目录下的
nacos/config
目录的snapshot
子目录)。当启动时无法连接 Nacos Server 或获取配置失败时,会尝试从这个快照文件加载。 - 缓存更新机制:
- 服务发现:
- 定时拉取: 客户端会定时(可配置)向 Nacos Server 拉取最新的服务实例列表来更新本地缓存。
- UDP推送 (Nacos 1.x): Nacos 1.x 版本支持服务端通过 UDP 协议主动将变更推送给客户端(但 UDP 不可靠,仍需定时拉取保证)。
- gRPC 长连接/Watch (Nacos 2.x): Nacos 2.x 推荐使用 gRPC,客户端与服务端建立长连接。当服务实例发生变化时,服务端可以通过长连接主动将变更推送给客户端,实现更实时的更新。即使有推送,通常也会保留定时拉取作为兜底。
- 配置管理:
- 长轮询 (Long Polling): 客户端向服务端发起一次获取配置的请求。如果配置没有变更,服务端会 hold 住这个连接一段时间(例如 30 秒)。如果期间配置发生变更,服务端会立即返回变更内容;如果超时仍无变更,服务端返回无变更,客户端收到响应后立即发起下一次长轮询。这种方式可以准实时地获取配置变更,同时避免了大量无效的轮询请求。
- gRPC 长连接/Watch (Nacos 2.x): 类似服务发现,通过 gRPC 长连接实现配置变更的主动推送。
- 服务发现:
- 缓存失效: 客户端缓存通常没有复杂的过期策略,主要依赖于服务端的推送或客户端的定时/长轮询来更新。
- 内存缓存: 同样主要使用
总结:
Nacos 中的缓存是其架构设计的核心部分,遍布服务端和客户端。
- 服务端缓存 主要为了 提升性能和降低存储压力,通过内存缓存和主动更新机制实现。
- 客户端缓存 主要为了 提升应用性能、降低服务端压力和提供故障容错能力,通过内存缓存、本地文件快照以及与服务端的实时/准实时同步机制(如 gRPC Watch、长轮询)实现。
相关文章:
Nacos 中使用了哪些缓存?缓存的目的是什么?是如何实现的?
Nacos 在服务端和客户端都广泛的使用了缓存机制,下面着重介绍一下。 一、 Nacos 服务端缓存 (Server-Side Caching) Nacos 服务端缓存的主要目的是提高读取性能、降低对底层存储(数据库或磁盘文件)的压力,并加速对客户端请求的响…...
「GitHub热榜」AIGC系统源码:AI问答+绘画+PPT+音乐生成一站式
—零门槛搭建私有化AI内容工厂,源码开放商业落地指南 为什么全栈AIGC系统成为企业刚需? 1. 传统方案的致命缺陷 痛点 使用ChatGPTMidjourneyCanva 本全栈方案 工具割裂 需切换5平台 一个系统全搞定 成本 年费50万 一次部署永久免费 数据安全 …...
Dify LLM大模型参数(一)
深入了解大语言模型(LLM)的参数设置 模型的参数对模型的输出效果有着至关重要的影响。不同的模型会拥有不同的参数,而这些参数的设置将直接影响模型的生成结果。以下是 DeepSeek 模型参数的详细介绍: 温度(Tempera…...
快速使用工具Cursor
Cursor 是一款面向开发者的集成开发环境,用途如下: 代码编写:支持多语言,有语法高亮、智能补全与格式化功能。代码生成:能依据自然语言描述生成代码。协作开发:支持多人实时协作编辑项目。调试程序&#x…...
JVM之经典垃圾回收器
一、垃圾回收算法 1. 标记-清除(Mark-Sweep) 步骤: 标记:遍历对象图,标记所有存活对象。清除:回收未被标记的垃圾对象。 特点:简单,但会产生内存碎片。 2. 标记-复制(…...
【“星瑞” O6 评测】—NPU 部署 face parser 模型
前言 瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力,支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 类型的加速。这里通过通过官方的工具链进行FaceParsingBiSeNet的部署 1. FaceParsingBiSeNet onnx 推理 首先从百度网盘…...
hadoop的三大结构及其各自的作用
Hadoop 主要有三大核心组件,分别是 HDFS(Hadoop Distributed File System)、MapReduce 和 YARN,以下是它们各自的作用: HDFS(Hadoop Distributed File System) 存储数据:HDFS 是一个…...
免费将静态网站部署到服务器方法(仅支持HTML,CSS,JS)
原视频链接:把HTML免费部署到网站上,实现别人也能访问的教程来啦QAQ_哔哩哔哩_bilibili 注意:仅支持HTML、CSS、JS。不支持Vue等框架。 1.打开网站www.wordpress.org 点击红框按钮 点击红框按钮下载wordpress模板文件并解压。 将自己编写的…...
2、SpringAI接入ChatGPT与微服务整合
2、SpringAI接入ChatGPT与微服务整合 小薛博客AI 大模型资料 1、SpringAI简介 https://spring.io/projects/spring-ai Spring AI是一个人工智能工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于人工智能领域&#…...
6.7.图的深度优先遍历(英文缩写DFS)
树是特殊的图,没有回路的图就是树 BFS与DFS的区别在于,BFS使用了队列,DFS使用了栈 一.深度优先遍历: 1.树的深度优先遍历: 树的深度优先遍历分为先根遍历和后根遍历。 以树的先根遍历为例: 上述图片里…...
若依同步企业微信架构及ACTIVITI
企业微信配置 1.进入企业微信后台管理应用管理,新建应用 2.配置网页授权及JS-SDK 将验证文件下载到项目的pubilc下 启动项目 npm run dev 然后验证域名归属 3.配置企业可信IP 公网IP地址即可,仅此IP的服务可调用企业微信接口信息 4.构造域名回调域&a…...
PyTorch分布式训练调试方法(跟踪调用过程)
PyTorch分布式训练调试方法(跟踪调用过程) 背景 在分布式深度学习训练场景中,通信操作(如AllReduce、Send/Recv)和CUDA操作的时序问题往往难以调试。本工具通过以下方式提供调试支持: 拦截所有PyTorch张量操作并记录调用栈监控分布式通信操作的完整生命周期自动生成带时间…...
跟我学C++中级篇——内存异常的分析
一、内存问题引发的现象 在实际使用电脑过程中,经常会遇到电脑卡住了,鼠标和键盘也没反应。这时候儿会怎么办?其实此时打开任务管理器,就可以发现,有几种情况:一是CPU占用过高;二是IO占用过高&…...
HTML新标签与核心 API 实战
HTML5 新标签与核心 API 实战 引言 今天咱们来看看HTML5 新标签以及一些核心 API。 HTML5 的引入彻底改变了 Web 前端开发格局,尤其是其新增的多媒体和交互能力标签。对于前端开发者而言,理解并掌握 <video>、<audio>、<canvas> 和…...
vscode 红色波浪线问题
VSCode 红色波浪线问题终极解决方案 问题描述 在编写 C 项目时,CMake 编译通过但代码出现红色波浪线,常见问题: #include 提示找不到头文件枚举或类型名未定义成员函数或变量无法识别 这些是 VSCode 的 IntelliSense 配置问题,…...
类型补充,scan 和数据库管理命令
Redis 数据类型 stream stream 就是一个队列(阻塞队列) Redis 作为一个消息队列的重要支撑,属于是 list 中 blpop 和 brpop 的升级版本 geospatial 主要用于存储地理位置信息,并对存储的信息进行操作 存储一些点后,…...
AI Agent系列(十) -Data Agent(数据分析智能体)开源资源汇总
AI Agent系列【十】 前言一、 Open Interpreter1.1 Open Interpreter的特点1.2 Open Interpreter的优势1.3 Open Interpreter的应用场景 二、DB-GPT2.1 核心能力2.2关键特性:2.3 系统架构 三、DeepBI3.1 特点 前言 DataAgent的能力本质上比较依赖大模型的自然语言转API/SQL/代…...
Vue3 + TypeScript中provide和inject的用法示例
基础写法(类型安全) typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定义类型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…...
【国家能源集团生态协作平台-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
不确定与非单调推理的基本概念
前文我们讨论了建立在经典逻辑基础上的确定性推理,这是一种运用确定性知识进行的精确推理。同时,它又是一种单调性推理,即随着新知识的加人,推出的结论或证明了的命题将单调地增加。但是,人们通常是在信息不完善、不精确的情况下运用不确定性知识进行思维、求解问题的,推…...
系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)高效记忆要点、知识体系、考点详解、、练习题并提供答案与解析
计算机组成与体系结构高效记忆要点 从CPU、存储系统、I/O系统三大模块展开,结合高频考点与记忆技巧,有助于系统化掌握核心知识点。 一、CPU结构与工作原理 1. CPU的组成 核心组件: 运算器(ALU) :负责算术…...
FreeSWITCH中SIP网关(Gateway)操作
freeswitch是一款简单好用的VOIP开源软交换平台。 以下是一篇关于FreeSWITCH中SIP网关(Gateway)操作的技术指南,基于提供的官方文档内容整理: 一、网关生命周期管理 1. 创建新SIP Profile并启动 FreeSWITCH支持多SIP Profile&…...
构建自动翻译工作流:技术与实践
一、引言 制药行业客户迫切需要一种翻译解决方案,以解决公司内部多样化的翻译难题。他们需要的不仅是提升翻译效率和准确性的工具,更希望能够保持文档的原始格式。我们观察到客户的需求广泛,包括多语言办公文件、研究文档和药品报批文件等&a…...
在pycharm中搭建yolo11分类检测系统--PyQt5学习(二)
第二部分 测试本地pycharm通过程序连接远程服务器autodl 模型的推理需要借助远程服务器autodl,但是界面的运行是在pycharm中,我的设想是按钮调用一个py文件就好了。 1. 本地运行PyQt5界面。 2. 当需要载入权重时,通过SSH连接到AutodL服务…...
汽车行驶工况特征参数:从“速度曲线”到“驾驶DNA”的硬核解码
作为新能源汽车行业的从业者,你是否曾困惑于这些问题: 为什么同一款电动车,不同用户的实际续航差异高达30%?如何精准量化驾驶行为对电池寿命的影响?车企标定的“NEDC续航”与真实路况差距的根源是什么? 这…...
dify本地部署,docker-plugin_daemon-1启动不了,一直报错
解决办法,修改这两个配置,然后重启 进入源代码目录,docker文件夹下 docker compose down docker compose up -d https://github.com/langgenius/dify/issues/17677...
2025 年第十五届 MathorCup 数学应用挑战赛 A 题:汽车风阻预测
A 题:汽车风阻预测 在空气动力学领域,空气阻力对汽车以及航空航天工业中载具的 性能和效率有着至关重要的影响。以往的研究表明,预测这种阻力需 要借助先进的工业仿真软件进行大规模流体力学模拟仿真,而该模拟 过程不仅算法复杂…...
AI Agents系列之AI代理架构体系
1. 引言 智能体架构是定义智能体组件如何组织和交互的蓝图,使智能体能够感知其环境、推理并采取行动。本质上,它就像是智能体的数字大脑——集成了“眼睛”(传感器)、“大脑”(决策逻辑)和“手”(执行器),用于处理信息并采取行动。 选择正确的架构对于构建有效的智能…...
使用Java动态数据生成PDF报告:简化您的报告导出流程
在当今的数据驱动世界中,能够快速且有效地将数据转化为可视化的报告是一项宝贵的技能。无论是商业分析、项目管理还是学术研究,PDF报告都是分享和存档信息的理想格式。在这篇博客中,我们将探讨如何使用Java编程语言结合iText库来动态生成包含…...
Sqlite3交叉编译全过程
Sqlite3交叉编译全过程 一、概述二、下载三、解压四、配置五、编译六、安装七、验证文件类型八、移植8.1、头文件sqlite3.h8.2、动态链接库移植8.3、静态态链接库移植 九、验证使用9.1. 关键函数说明 十、触发器使用十一、sqlite表清空且恢复id值十二、全文总结 一、概述 SQLi…...
Qt QThread 两种线程管理方法
在 Qt 中,QThread 有两种常见的用法,分别对应不同的线程管理模型。这两种方法各有优缺点,适用于不同的场景: 1. 子类化 QThread(继承 QThread,重写 run() 方法) 这是传统的线程用法,类似于 Java 或 C++ 标准库中的线程模型。通过继承 QThread 并重写 run() 方法,将需…...
React 中如何获取 DOM:用 useRef 操作非受控组件
📌 场景说明 在写 React 的时候,通常我们是通过“受控组件”来管理表单元素,比如用 useState 控制 <input> 的值。 但有些时候,控制的需求只是临时性的,或者完全不需要重新渲染组件,这时候直接访问…...
GoogleCodeUtil.java
Google动态验证码实现 GoogleCodeUtil.java package zwf;import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.SecureRandom;/** https://mvnrepository.com/artifact/commons-codec/…...
Hutool之DateUtil:让Java日期处理变得更加简单
前言 在Java开发中,日期和时间的处理是一个常见问题。为了简化这个过程,许多开发者会使用第三方工具包,如Hutool。Hutool是一个Java工具包,提供了许多实用的功能,其中之一就是日期处理。日期时间工具类是Hutool的核心包…...
解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例
历史灾害文献分析方法论的研究,是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析,不仅能够重建千年尺度的灾害事件序列(如台风、洪旱等),弥补仪器观测数据的时空局限性&#…...
DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析
随着大模型技术的迅猛发展,国产模型正逐渐崭露头角,尤其是DeepSeek-R3的发布,更是在AI技术社区中引起广泛关注。而与此同时,国际领先的GPT-4o和Claude-3.5-Sonnet也在不断迭代升级,持续刷新业界对AI能力的认知。下文将…...
智能翻译播放器,让无字幕视频不再难懂
打工人们你们好!这里是摸鱼 特供版~ 今天给大家带来一款超牛的黑科技——Splayer,完全免费的智能翻译播放器,让你轻松看懂无字幕视频! 推荐指数:★★★★★ 软件简介 Splayer 是一款完全免费的智能翻译播放器&#…...
快手本地生活2024年GMV同增200%,“新线城市+AI”将成增长引擎
4月17日,“新线大市场,AI新机遇”快手本地生活2025聚力大会在沈阳召开。 会上,快手高级副总裁、本地生活事业部负责人笑古在聚力大会上表示,“新线城市AI”将成为快手本地生活的增长引擎。 据「TMT星球」了解,2024年…...
第七篇:系统分析师第三遍——1、2章
目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...
2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)
2025 年第十五届 MathorCup 数学建模D题完整分析论文 目录 摘要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(MATLAB和Python) 4.1.4问题1结果…...
软考高级-系统架构设计师 论文范文参考(一)
文章目录 论SOA技术的应用论SOA在企业信息化中的应用论UP(统一过程方法)的应用论分布式数据库的设计与实现论改进Web服务器性能的有关技术论基于UML的需求分析论基于构件的软件开发论基于构件的软件开发(二) 论SOA技术的应用 摘要: 本人于…...
江湖路远,唯PUT可稳:Express 路由更新招式全解
前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...
【k8s系列1】一主两从结构的环境准备
环境准备 虚拟机软件准备及安装,这里就不详细展开了,可以看文章:【一、虚拟机vmware安装】 linux环境准备及下载,下载镜像centOS7.9,以前也有写过这个步骤的文章,可以看:【二、安装centOS】 开始进入正题…...
通过特定协议拉起 electron 应用
在 Android 通过 sheme 协议可以拉起其他应用。 electron 应用也可以通过类似特定协议被拉起。 在同时有 web、客户端的应用里,可以通过这种方式在 web 拉起客户端。 支持拉起客户端 const PROTOCOL xxxif (process.defaultApp) {// 这里是开发环境,有…...
IDEA MyBatisCodeHelper Pro插件高版本解密
声明,该方法仅仅作为个人研究学习使用,请勿传播 版本说明 系统:macOS(Windows同理)IDE:IntelliJ IDEA 2024.4MyBatisCodeHelper Pro 3.4 环境准备 从插件市场下载MyBatisCodeHelper Pro 找到MyBatisCo…...
网站制作公司哪家好?如何选择靠谱的网站设计公司
在当今数字化时代,企业想要在互联网上立足,一个专业、美观且功能强大的网站是必不可少的。然而,面对众多的网站建设公司,如何选择一家真正适合自己需求的合作伙伴,成为了许多企业主和创业者面临的难题。毕竟࿰…...
Linux之基础命令
Linux作为开源操作系统的代表,以其高效、灵活和强大的命令行工具闻名。无论是系统管理、开发调试还是日常使用,掌握基础命令都是与Linux系统交互的必备技能。本文整理了20个最常用的Linux基础命令,帮助新手快速入门。 目录 目录与文件导航文…...
使用手机归属地查询API,使效率事半功倍
手机归属地查询API通过查询手机号码的归属地信息,为企业提供了一个高效、便捷的解决方案,帮助企业在竞争激烈的市场中脱颖而出。 代码示例 请求参数说明: 名称必填类型说明key是string个人中心查看phone是int手机号 返回参数说明: 名称类型说明phon…...
基于FPGA的AES加解密系统verilog实现,包含testbench和开发板硬件测试
目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 4.1 字节替换(SubBytes) 4.2 行移位(ShiftRows) 4.3 列混合(MixColumns) 4.4 轮密钥加(AddRoundKey) 4.…...
【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心
访问部署在Cloud Studio上的web服务 当你把该项目部署在本地时,访问该服务的请求地址为http://localhost:8080/hello;当你把该项目部署在Cloud Studio工作台启动时,要想访问到该服务,需要先在工作台右侧打开访问链接面板ÿ…...