Nacos简介—2.Nacos的原理简介
大纲
1.Nacos集群模式的数据写入存储与读取问题
2.基于Distro协议在启动后的运行规则
3.基于Distro协议在处理服务实例注册时的写路由
4.由于写路由造成的数据分片以及随机读问题
5.写路由 + 数据分区 + 读路由的CP方案分析
6.基于Distro协议的定时同步机制
7.基于Distro协议的心跳校验下的数据同步补偿机制
8.基于Raft协议实现的弱CP模式
9.Nacos集群模式下的lookup寻址机制
1.Nacos集群模式的数据写入存储与读取问题
使用Nacos进行服务注册时,需要解决如下问题:
一.应该找集群里的哪个节点来发起服务注册?
二.服务实例数据应该存储在集群的哪个节点?
三.应该找集群里的哪个节点来发起服务发现?
2.基于Distro协议在启动后的运行规则
(1)Nacos集群启动后会按如下规则运行
(2)Distro协议 + 定时数据同步与AP + 心跳检验与网络分区
(1)Nacos集群启动后会按如下规则运行
一.Nacos集群的每个节点都可以处理写请求
Nacos集群节点收到写请求后:首先根据要注册的服务实例的IP:端口 + 路由算法,计算出所属集群节点。然后把服务实例注册请求转发到负责该服务实例数据的集群节点中。接着负责该服务实例数据的集群节点就会解析请求,把数据存储到内存里。同时会定期执行同步任务,把本节点负责的数据同步到其他节点。最终每个节点都会存储全量的服务实例数据。
二.新加入Nacos集群的节点会拉取全量数据
新加入Nacos集群的节点会轮询Nacos集群的所有节点,然后发送请求出去拉取各节点的数据,所以Nacos集群的每个节点上都会有所有已注册的服务实例的数据。
三.每个节点都会定期发送心跳给其他节点
Nacos集群的节点通过心跳请求进行数据校验,主要是交换数据的校验值。如果发现其他节点上的数据与自己的不一致,就会全量拉取数据进行补齐。
四.Nacos集群的每个节点都可以处理读请求
因为每个节点都有全量数据,所以每个节点都可以处理读请求。
(2)Distro协议 + 定时数据同步与AP + 心跳检验与网络分区
Distro协议兼顾了CAP中的AP。在这个协议下,所有节点通过定期数据同步 + 心跳校验实现数据最终一致。这个协议能让每个节点都有全量数据。
如果出现某节点宕机,不影响集群可用性。如果出现网络分区,同样不影响集群可用性。因为不同的网络分区只会读写分区中的Nacos节点,此时只是没办法同步数据而已。虽然数据会不一致,但一旦分区恢复后,心跳校验机制运作起来,数据会自动补齐。
3.基于Distro协议在处理服务实例注册时的写路由
首先,服务实例会随机选择Nacos集群中的一个节点发起注册请求。
然后,Nacos集群节点收到写请求后:会根据要注册的服务实例的IP:端口 + 路由算法,计算出所属的集群节点。
接着,把服务实例注册请求转发到负责该服务实例数据的集群节点中。负责该服务实例数据的节点会解析请求,缓存服务实例数据到内存中。
4.由于写路由造成的数据分片以及随机读问题
由于Nacos集群节点收到写请求后:会根据要注册的服务实例的IP:端口 + 路由算法,计算出所属的集群节点。所以会导致数据分片,即每个节点仅负责管理一部分的服务实例数据。
服务实例进行服务发现时,只能随机选择一个Nacos节点来读取数据。对Nacos集群节点进行随机读的时候,由于每个节点只负责处理部分数据,所以可能出现读取不到刚向集群注册的数据的随机读问题。
5.写路由 + 数据分区 + 读路由的CP方案分析
在数据分区 + 随机读的情况下,此时为了读取到数据,有两种解决方案。
方案一:让随机选择的节点重新进行读路由
方案二:让随机选择的节点也拥有全部数据
如果采用方案一,也就是写路由 + 数据分片 + 读路由的架构设计。那么读写某个服务实例的数据,只能由Nacos集群中的其中一个节点处理。如果节点宕机,那么对应的该服务实例数据就不可用。虽然该节点的数据不可用,但也是对所有用户都不可用,视图是一致的。视图是一致的,说明要么都能读到数据,要么都读不到数据。所以这种方案会存在可用性的问题,但优点是数据是强一致的。也就是牺牲了CAP中的A,没有了可用性,但保证了CP。
Nacos的Distro协议则使用了方案二。某个节点宕机后,该节点的数据不会全部不可用,可能会丢失部分数据。也就是牺牲了CAP中的C,不能确保强一致性,但保证了AP。加上Distro协议的同步机制,可以让各节点的数据实现最终一致性。
6.基于Distro协议的定时同步机制
Nacos集群中的每个节点,虽然通过写路由只写入由自己处理的数据,但同时也会定期执行同步任务,把本节点负责的数据同步到其他节点,最终每个节点都会存储全量的集群数据。
同步机制的存在保证了各节点的数据最终是一致的。
7.基于Distro协议的心跳校验下的数据同步补偿机制
Nacos集群的节点通过心跳请求进行数据校验,主要是交换数据的校验值。如果发现其他节点上的数据与自己的不一致,就会全量拉取数据进行补齐。
当出现网络分区时,两分区间的节点无法通信,此时自然就无法定时同步。但当分区恢复后,节点之间通过心跳校验机制,数据可以快速自动补齐。
8.基于Raft协议实现的弱CP模式
Nacos集群节点在启动时会选举出一个Leader节点,由Leader节点负责数据的写入,并将数据同步给其他节点。Leader节点成功写入数据的判断依据是,过半节点都成功同步数据了。
9.Nacos集群模式下的lookup寻址机制
(1)单机寻址
(2)文件寻址
(3)地址服务器寻址
寻址就是Nacos各节点启动时如何找到其他节点。
(1)单机寻址
Nacos通过"-m standalone"模式来启动时,会读取自己本机的IP:端口,然后构造对象放入到ServerMemberManager,它是专门负责管理所有节点信息的组件。
(2)文件寻址
cluster.conf里会写入各个节点地址,节点启动时会读取这个文件的内容。同时节点会针对这个文件施加监听器,如果发现文件有变动,会进行重新读取。但是需要手工维护每个节点的cluster.conf文件,比较适合常规的、三节点、小规模的生产集群部署。
(3)地址服务器寻址
如果Nacos需要进行大规模的集群部署,一般会采用这个方案。也就是使用一个Web服务器来维护一份cluster.conf,然后所有的Nacos都定时请求这个Web服务器获取最新的地址列表。
相关文章:

Nacos简介—2.Nacos的原理简介
大纲 1.Nacos集群模式的数据写入存储与读取问题 2.基于Distro协议在启动后的运行规则 3.基于Distro协议在处理服务实例注册时的写路由 4.由于写路由造成的数据分片以及随机读问题 5.写路由 数据分区 读路由的CP方案分析 6.基于Distro协议的定时同步机制 7.基于Distro协…...
【信息系统项目管理师】高分论文:论人力资源管理与成本管理(医院信息系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文一、规划人力资源管理二、组建项目团队三、建设项目团队四、管理项目团队论文 一个完善的医院信息系统通常由上百个子系统构成,而这些系统随着医院发展需求逐步建设的,他们来源于不同厂家,基于不同的技…...
Docker Compose和 Kubernetes(k8s)区别
Docker Compose 和 Kubernetes(k8s)是两种不同层次的容器编排工具,主要区别体现在设计目标、使用场景和功能特性上。以下是它们的核心对比: 1. 设计目标 Docker Compose 单机编排:专注于在单个主机上定义和运行多容器应…...
IP查询专业版:支持IPv4/IPv6自动识别并切换解析的API接口使用指南
以下是根据您提供的网页内容编辑的符合CSDN内容发布要求的Markdown格式文本: 一、API概述 在开发过程中,我们常常需要对IP地址进行查询,以获取其详细信息,如地理位置、运营商等。万维易源的“IP查询专业版”API接口能够提供丰富…...
Spring Boot中的监视器:Actuator的原理、功能与应用
在 Spring Boot 应用中,监视器通常指 Spring Boot Actuator,一个内置的生产就绪工具,用于监控和管理运行中的应用。Actuator 提供了一系列 RESTful 端点,暴露应用的运行时信息,如健康状态、性能指标、日志配置和环境变…...
P12167 [蓝桥杯 2025 省 C/Python A] 倒水
P12167 [蓝桥杯 2025 省 C/Python A] 倒水 题目描述 小蓝有 n n n 个装了水的瓶子,从左到右摆放,第 i i i 个瓶子里装有 a i a_i ai 单位的水。为了美观,小蓝将水循环染成了 k k k 种颜色,也就是说,第 i i i …...

TCP协议理解
文章目录 TCP协议理解理论基础TCP首部结构图示字段逐项解析 TCP是面向连接(Connection-Oriented)面向连接的核心表现TCP 面向连接的核心特性TCP 与UDP对比 TCP是一个可靠的(reliable)序号与确认机制(Sequencing & Acknowledgment…...

用 LangChain 手搓 RAG 系统:从原理到实战
一、RAG 系统简介 在当今信息爆炸的时代,如何高效地从海量数据中获取有价值的信息并生成准确、自然的回答,成为了人工智能领域的重要课题。检索增强生成(Retrieval-Augmented Generation,RAG)系统应运而生,…...

联合体和枚举类型
1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样,联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成,这些成员变量既可以是不同的类型,也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...
一种企业信息查询系统设计和实现:xujian.tech/cs
一种企业信息查询系统设计和实现:xujian.tech/cs 背景与定位 企业在对外合作、风控审查或市场调研时,常需快速获取公开的工商信息。本文介绍一个企业信息搜索引擎,面向普通用户与开发者,帮助快速定位企业名称、统一社会信用代码…...

C语言指针5
1.void*概述 void称为无类型,void*称为无类型指针,void不可以单独定义变量,却可以定义无类型的指针,而且所定义的指针称为泛型指针,所谓泛型指针,其含义是void*类型的指针可以接收一切类型变量的地址 struc…...
[4A/OP]
2.2 安装程序 2.2.1 解压缩.tar.gz文件 调用UNIX命令tar会在当前目录下创建4A/OP子例程主目录4AOP-1.5/,包括所有必要的子目录。只需键入以下命令即可解压缩和“untar”4AOP-1.5.tar.gz: tar -xzvf 4AOP-1.5.tar.gz4AOP-1.5/目录现在应该已经创建&…...
来云台跑腿配送平台:用户体验至上的服务理念
来云台跑腿配送平台始终秉持用户体验至上的服务理念,从下单到收货的每一个环节,都致力于为用户提供优质、便捷的服务。 简洁的下单流程是良好体验的开端。用户通过 APP 或小程序,只需几步操作就能完成下单。清晰的服务分类、自动定位功能和…...
本地部署 Dify + Ollama 到 D盘,并挂载本地大模型 的完整教程,结合 Docker 运行环境
一、环境准备 1. 软件与硬件要求 • 操作系统:Windows 10/11 专业版(需开启 Hyper-V) • 硬件配置: • CPU ≥ 4核(推荐 Intel i5 及以上) • 内存 ≥ 16GB(大模型运行需预留 8GB 以上&#…...

文档构建:Sphinx全面使用指南 — 强化篇
文档构建:Sphinx全面使用指南 — 强化篇 Sphinx 是一款强大的文档生成工具,使用 reStructuredText 作为标记语言,通过扩展兼容 Markdown,支持 HTML、PDF、EPUB 等多种输出格式。它具备自动索引、代码高亮、跨语言支持等功能&#…...

深度理解C语言函数之strlen()的模拟实现
文章目录 前言一、strlen的模拟实现二、模拟实现代码及思路2.1 计数法2.2 指针相减法三、递归计数法 总结 前言 我写这篇文章的目的主要是帮助理解C语言中重要函数的用法,后面也会总结C相关的函数的模拟实现,这里的算法不一定是最好的,因为只…...

0基础 | Proteus仿真 | 51单片机 | 继电器
继电器---RELAY 本次选择一款5v一路继电器进行讲解 信号输入 IN1输入高电平,三极管导通,LED1点亮,电磁铁12接通吸引3向下与4接通,J1A的12接通 IN1输入低电平,则J1A的23接通 产品引脚定义及功能 序号 引脚符号 引脚…...

Python解析地址中省市区街道
Python解析地址中省市区街道 1、效果 输入:海珠区沙园街道西基村 输出: 2、导入库 pip install jionlp3、示例代码 import jionlp as jiotext 海珠区沙园街道西基村 res jio.parse_location(text, town_villageTrue) print(res)...

在vscode终端中运行npm命令报错
解决方案 这个错误信息表明,你的系统(可能是 Windows)阻止了 PowerShell 执行脚本,这是由于 PowerShell 的执行策略导致的。PowerShell 的执行策略控制着在系统上运行哪些 PowerShell 脚本。默认情况下,Windows 可能…...

提升变电站运维效率:安科瑞无线测温系统创新应用
一、引言 变电站作为电力系统的关键枢纽,承担着变换电压、分配电能以及控制电力流向等重要任务。在变电站的运行过程中,电气设备的接点温度监测至关重要。过热问题可能由多种因素引发,如电阻过大、接头质量欠佳、衔接不紧密、物理老化等&…...

vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包
场景: 之前写过一篇 vite vue2 的配置,但是现在项目使用 vue3 较多,再更新一下 vue脚手架初始化之后的项目,每个项目都是独立的,导致项目多了之后,node依赖包过多,占用内存较多。想实现的效果…...

WebRTC服务器Coturn服务器用户管理和安全性
1、概述 Coturn服务器对用户管理和安全方面也做了很多的措施,以下会介绍到用户方面的设置 1.1、相关术语 1.1.1 realm 在 coturn 服务器中,域(realm)是一种逻辑上的分组概念,用于对不同的用户群体、应用或者服务进行区…...

如何使用极狐GitLab 的外部状态检查功能?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部状态检查 (ULTIMATE ALL) pending 状态引入于极狐GitLab 16.5 pending 状态检查的超时时间为两分钟引入于极狐GitLab 16…...
如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画
如何在 Element UI 中优雅地使用 this.$loading 显示和隐藏加载动画 在现代 Web 应用开发中,用户体验至关重要。当执行耗时操作(如网络请求或数据处理)时,显示一个友好的加载动画可以让用户知道系统正在工作,而不是卡…...
大模型微调 - 自注意力机制
一.什么是自注意力机制 注意力机制(Attention Mechanism)是一种能够根据输入的相关性动态分配权重的机制,广泛应用于自然语言处理、计算机视觉等领域。其核心思想是:“让模型在处理当前元素时,关注与其最相关的其他部…...
TDengine 集群高可用方案设计(二)
四、TDengine 集群高可用方案设计 4.1 硬件与网络架构设计 服务器选型:选择配置高、稳定性强的服务器,如戴尔 PowerEdge R740xd、华为 RH2288H V5 等。以戴尔 PowerEdge R740xd 为例,它配备英特尔至强可扩展处理器,具备高性能计…...

【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)
RAG 优化:提高语义完整性、向量相关性、召回率–从字符分割到语义分块 (SemanticChunker) 背景:提升 RAG 检索质量 在构建基于知识库的问答系统(RAG)时,如何有效地将原始文档分割成合适的文本块(Chunks&a…...

深入剖析扣子智能体的工作流与实战案例
前面我们已经初步带大家体验过扣子工作流,工作流程是 Coze 最为强大的功能之一,它如同扣子中蕴含的奇妙魔法工具,赋予我们的机器人处理极其复杂问题逻辑的能力。 这篇文章会带你更加深入地去理解并运用工作流解决实际问题 目录 一、工作流…...
C++----模拟实现string
模拟实现string,首先我们要知道成员变量有哪些: class _string{private:char* _str;size_t capacity;//空间有多大size_t size;//有效字符多少const static size_t npos;};const size_t _string::npos-1;//static在外面定义不需要带static,np…...
CodeMeter Runtime 安装失败排查与解决指南
CodeMeter Runtime 是威步提供的核心运行服务组件,用于加密授权的识别与管理。如果安装过程中出现异常或中断,常见原因包括系统冲突程序、数字签名校验失败、安全软件干扰或权限不足。 以下为推荐的完整排查步骤: 1. 检查并清理冲突程序或驱动…...