Nacos架构与原理 - 注册中心服务数据模型(2.x版本)

news2025/2/12 15:41:49

文章目录

  • 服务(Service)和服务实例(Instance)
    • 定义服务
    • 服务元数据
    • 定义实例
    • 实例元数据
    • 持久化属性
  • 集群(Cluster)
    • 定义集群
  • 生命周期
    • 服务的⽣命周期
    • 实例的⽣命周期
    • 集群的⽣命周期
    • 元数据的⽣命周期

在这里插入图片描述


服务(Service)和服务实例(Instance)

  • 在服务发现中,服务是应用程序提供的软件功能抽象(如登录或支付)。服务与应用不同,应用范围更广,服务属应用包含关系,应用可提供多服务。
  • 为细粒度区分和控制服务,Nacos选择服务作为注册中心最基本概念。
  • 服务实例是服务的具体提供节点。实例只属一个服务,服务可包含一个或多个实例。
  • 在许多场景下,实例也称为服务提供者,使用服务的实例为服务消费者。
  • Nacos将服务作为注册中心的基本单元,实例为服务的具体提供节点。一个实例只属一个服务,服务可包含多个实例。
  • 实例也称为服务提供者,使用实例的为服务消费者。

定义服务

在这里插入图片描述

  • 命名空间(Namespace):Nacos 数据模型中最顶层、也是包含范围最广的概念,用于在类似环境或租户等需要强制隔离的场景中定义。Nacos 的服务也需要使用命名空间来进行隔离。
  • 分组(Group):Nacos 数据模型中次于命名空间的⼀种隔离概念,区别于命名空间的强制隔离属性,分组属于⼀个弱隔离概念,主要用于逻辑区分⼀些服务使用场景或不同应用的同名服务,最常用的情况主要是同⼀个服务的测试分组和生产分组、或者将应用名作为分组以防止不同应用提供的服务重名。
  • 服务名(Name):该服务实际的名字,⼀般用于描述该服务提供了某种功能或能力。

通常推荐使用由运行环境作为命名空间、应用名作为分组和服务功能作为服务名的组合来确保该服务的天然唯⼀性,当然使用者可以忽略命名空间和分组,仅使用服务名作为服务唯⼀标示,这就需要使用者在定义服务名时额外增加自己的规则来确保在使用中能够唯⼀定位到该服务而不会发现到错误的服务上.


服务元数据

服务的定义只是为服务设置了⼀些基本的信息,用于描述服务以及方便快速的找到服务,而服务的元数据是进⼀步定义了 Nacos 中服务的细节属性和描述信息。主要包含:

  • 健康保护阈值(ProtectThreshold):为了防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成的雪崩效应。应将健康保护阈值定义为⼀个 0 到 1之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失了⼀部分流量,但是保证了集群中剩余健康实例能正常工作。
  • 实例选择器(Selector):用于在获取服务下的实例列表时,过滤和筛选实例。该选择器也被称为路由器,目前 Nacos 支持通过将实例的部分信息存储在外部元数据管理 CMDB 中,并在发现服务时使用 CMDB 中存储的元数据标签来进行筛选的能力。
  • 拓展数据(extendData):用于用户在注册实例时自定义扩展的元数据内容,形式为 K-V 。可以在服务中拓展服务的元数据信息,方便用户实现自己的自定义逻辑。

在这里插入图片描述


定义实例

由于服务实例是具体提供服务的节点,因此 Nacos 在设计实例的定义时,主要需要存储该实例的⼀些网络相关的基础信息,主要包含以下内容:

  • 网络 IP 地址:该实例的 IP 地址,在 Nacos2.0 版本后支持设置为域名。
  • 网络端口:该实例的端口信息。
  • 健康状态(Healthy):用于表示该实例是否为健康状态,会在 Nacos 中通过健康检查的手段进行维护,具体内容将在 Nacos 健康检查机制章节中详细说明,读者目前只需要该内容的含义即可。
  • 集群(Cluster):用于标示该实例归属于哪个逻辑集群
  • 拓展数据(extendData):用于用户自定义扩展的元数据内容,形式为 K-V。可以在实例中拓展该实例的元数据信息,方便用户实现自己的自定义逻辑和标示该实例。

实例元数据

和服务元数据不同,实例的元数据主要作用于实例运维相关的数据信息。主要包含:

  • 权重(Weight):实例级别的配置。权重为浮点数,范围为 0-10000。权重越大,分配给该实例的流量越大。
  • 上线状态(Enabled):标记该实例是否接受流量,优先级大于权重和健康状态。用于运维人员在不变动实例本身的情况下,快速地手动将某个实例从服务中移除。
  • 拓展数据(extendData):不同于实例定义中的拓展数据,这个拓展数据是给予运维人员在不变动实例本身的情况下,快速地修改和新增实例的扩展数据,从而达到运维实例的作用。

在 Nacos2.0 版本中,实例数据被拆分为实例定义和实例元数据,主要是因为这两类数据其实是同⼀个实例的两种不同场景:开发运行场景及运维场景

对于上下线及权重这种属性,⼀般认为在实例已经在运行时,需要运维人员手动修改和维护的数据,

而 IP,端口和集群等信息,⼀般情况下在实例启动并注册后,则不会在进行变更。

将这两部分数据合并后,就能够得到实例的完整信息,也是 Nacos1.0 版本中的实例数据结构。

在这里插入图片描述


持久化属性

Nacos 提供两种类型的服务:持久化服务和非持久化服务,分别给类 DNS 的基础的服务组件场景和上层实际业务服务场景使用。

为了标示该服务是哪种类型的服务,需要在创建服务时选择服务的持久化属性。考虑到目前大多数使用动态服务发现的场景为非持久化服务的类型(如 Spring Cloud,Dubbo,Service Mesh 等),Nacos 将缺醒值设置为了非持久化服务

在 Nacos2.0 版本后,持久化属性的定义被抽象到服务中,⼀个服务只能被定义成持久化服务或非持久化服务,⼀旦定义完成,在服务生命周期结束之前,无法更改其持久化属性。

持久化属性将会影响服务及实例的数据是否会被 Nacos 进行持久化存储,设置为持久化之后,实例将不会再被自动移除,需要使用者手动移除实例。


集群(Cluster)

集群是 Nacos 中⼀组服务实例的⼀个逻辑抽象的概念,它介于服务和实例之间,是⼀部分服务属性的下沉和实例属性的抽象。

定义集群

在 Nacos 中,集群中主要保存了有关健康检查的⼀些信息和数据:

  • 健康检查类型(HealthCheckType):使用哪种类型的健康检查方式,目前支持:TCP,HTTP,MySQL;设置为 NONE 可以关闭健康检查。

  • 健康检查端口(HealthCheckPort):设置用于健康检查的端口。

  • 是否使用实例端口进行健康检查(UseInstancePort):如果使用实例端口进行健康检查,将会使用实例定义中的网络端口进行健康检查,而不再使用上述设置的健康检查端口进行。

  • 拓展数据(extendData):用于用户自定义扩展的元数据内容,形式为 K-V 。可以自定义扩展该集群的元数据信息,方便用户实现自己的自定义逻辑和标示该集群。

在这里插入图片描述
【服务&集群&实例】


生命周期

在注册中心中,实例数据都和服务实例的状态绑定,因此服务实例的状态直接决定了注册中心中实例数据的生命周期。而服务作为实例的聚合抽象,生命周期也会由服务实例的状态来决定

服务的⽣命周期

服务的生命周期相对比较简单,是从用户向注册中心发起服务注册的请求开始。

在 Nacos 中,发起服务注册有两种方式,⼀种是直接创建服务,⼀种是注册实例时自动创建服务;前者可以让发起者在创建时期就制定⼀部分服务的元数据信息,而后者只会使用默认的元数据创建服务。

在生命周期期间,用户可以向服务中新增,删除服务实例,同时也能够对服务的元数据进行修改。

当用户主动发起删除服务的请求或⼀定时间内服务下没有实例(无论健康与否)后,服务才结束其生命周期,等待下⼀次的创建


实例的⽣命周期

实例的生命周期开始于注册实例的请求。但是根据不同的持久化属性,实例后续的生命周期有⼀定的不同

  • 持久化的实例,会通过健康检查的状态维护健康状态,但是不会自动的终止该实例的生命周期;在生命周期结束之前,持久化实例均可以被修改数据,甚至主动修改其健康状态。唯⼀终止持久化实例生命周期的方式就是注销实例的请求

  • 而非持久化的实例,会根据版本的不同,采用不同的方式维持健康状态

    Nacos1.0 的版本,会通过定时的心跳请求来进行续约,当超过⼀定时间内没有心跳进行续约时,该非持久化实例则终止生命周期;

    Nacos2.0 的版本,会通过 gRPC 的长连接来维持状态,当连接发生中断时,该非持久化实例则终止生命周期

当然,非持久化实例也可以通过注销实例的请求,主动终止其生命周期,但是由于长连接和心跳续约的存在,可能导致前⼀个实例数据的生命周期刚被终止移除,立刻又因为心跳和长连接的补偿请求,再次开启实例的生命周期,给人⼀种注销失败的假象。


集群的⽣命周期

集群的生命周期则相对复杂,由于集群作为服务和实例的⼀个中间层,因此集群的生命周期与实例和服务的生命周期均有关。

集群的生命周期开始与该集群第⼀个实例的生命周期同时开始,因为⼀个实例必定归属于⼀个集群,哪怕是默认的集群,因此当第⼀个实例的生命周期开始时,也就是集群生命周期的开始;

当⼀个集群下不存在实例时,集群的生命周期也不会立刻结束,而是会等到这个服务的生命周期结束时,才会⼀起结束生命周期。


元数据的⽣命周期

由于元数据的其对应的数据模型是紧密关联的,所以元数据的生命周期基本和对应的数据模型保持⼀致。

但是元数据通常为运维人员的主动操作的数据,会被 Nacos 进行⼀段时间内的记忆,因此元数据的生命周期的终止相比对应的数据要滞后;

若这滞后期间内,对应的数据又重新开始生命周期,则该元数据的生命周期将被立刻重置,不再终止。

在这里插入图片描述

【各数据的生命周期图】

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DM Ticket-大麦网自动购票工具 支持Docker一键部署

DM Ticket-大麦网自动购票工具 支持Docker一键部署 DM Ticket,一个大麦网演唱会自动购票工具,支持Docker一键部署,不过小白想要操作的话需要一点命令知识,作者的GitHub项目页面有很详细的介绍,感兴趣的同学可以到GitH…

反汇编分析——全局、局部、静态、堆变量

在可执行文件编译的时候就已经存储在固定的位置了,甚至还可以跨文件共享,因为他本身就是静态的,固定在文件当中的嘛 反汇编窗口就是直接拿指针解引用,也就是拿这个地址来访问的,直接寻址 自动变量,不用我们…

C# .NET ADO.NET介绍和如何使用

文章目录 环境配置ADO.NET简介ADO.NET是什么面向过程和面向对象什么是ORM ADO.NET用于解决什么问题优化开发效率对已存在的数据库,设计多个程序对开发中的程序,动态设计数据库,同步更新 ADO.NET如何使用,以sql server为例ADO.NET如…

多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清…

IPV6综合实验

拓扑结构: 要求: 1、两个局域网基于6 to 4 tunnel可达,公网使用IPV4地址 2、R1可以访问R3的环回 3、保障网络更新安全,全网可达 使用的设备:8台路由器 解决网络拓扑: 1、确定广播域的个数 2、分配网段 …

react---pubsub-js消息订阅与发布

pubsub是一个用Javascript编写的基于主题的发布/订阅库,适用于任意组件间的通信,需要先订阅再发布 ,在组件即将卸载时钩子函数中进行取消订阅。 1. 在线文档: https://github.com/mroderick/PubSubJS 2. 下载: 【npm install pubsub-js --sav…

MySQL数据库备份和还原

备份对于数据库而言是至关重要的。当数据文件发生损坏、MySQL服务出现错误、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时,使用一种有效的数据备份方案,就可以快速解决以上所有的问题。MySQL提供了多种备份方案,包括:逻辑…

机器学习—逻辑回归

练习2:逻辑回归 介绍 在本练习中,您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试模型算法。 在开始练习前,需要下载如下的文件进行数据上…

自学黑客【网络安全】,一般人我还是劝你算了吧

十多年前还是高中生的时候开始搞安全的,刚开始是看大佬们在群里发黑页觉得很牛逼。然后慢慢开始学,当时还在网上问过IP和ID有什么区别,,, 后来慢慢开始学注入,日到了第一个站,是家卖钢琴的。放…

Linux 一“文”搞定Shell编程

又到了毕业季,又得去找实习工作。。。 最近在某直聘软件上找实习工作,看到有许多工作都需要会Shell编程的,然后自己对Shell编程也是一知半解,所以趁着最后还有半个月在校时间,索性学习一下! Shell是一个命…

Apache Hadoop概述

Hadoop是一个开源的分布式计算框架,它可以处理大规模的数据集。Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce编程模型。HDFS是一个高度容错性的系统,可以在数百台服务器上存储PB级别的数据。MapReduce是一种编程模型,它可…

css基础知识二:CSS选择器有哪些?优先级?哪些属性可以继承?

一、选择器 CSS选择器是CSS规则的第一部分 它是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式 选择器所选择的元素&#xff0c;叫做“选择器的对象” 我们从一个Html结构开始 <div id"box"><div class"o…

k8s 探针

1.前言 Kubernetes探针(Probe)是用于检查容器运行状况的一种机制。探针可以检查容器是否正在运行&#xff0c;容器是否能够正常响应请求&#xff0c;以及容器内部的应用程序是否正常运行等。在Kubernetes中&#xff0c;探针可以用于确定容器的健康状态&#xff0c;如果容器的健…

Prometheus+Grafana安装极简教程

目录 初始化监控主机 安装go环境 安装Prometheus 安装Grafana 初始化被监控主机 监控主机配置监控被监控主机 课后 初始化监控主机 安装go环境 下载对应的go版本&#xff0c;解压&#xff0c;设置环境变量 export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin 执…

alist与Raidrive配置开机自动启动,开机就可以拥有网盘硬盘!

目录 1. alist配置为开机自动启动服务1.1 制作一个alist启动命令行1.2 将VBS添加到开机启动项 2. Raidrive设置开机启动2.1 进入设置2.2 添加到启动项 总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 1. al…

大数据治理入门系列:数据质量

无论您是数据领域的专业人员&#xff0c;还是其他领域的非专业人士&#xff0c;也许都曾遇到过数据不完整、数据过时、数据不一致、数据不准确等问题。这些低质量的数据不仅没能解决最初的疑问&#xff0c;甚至还可能衍生出了其他问题。质量低劣的数据会影响数据分析结果&#…

代码随想录刷题第52天|LeetCode300最长递增子序列、 LeetCode674最长连续递增序列、LeetCode718最长重复子数组

1、LeetCode300最长递增子序列 题目链接&#xff1a;300最长递增子序列 1、dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。 2、递推公式&#xff1a; if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&…

Rust X DatenLord l Rust China Conf 2023 倒计时!

Rust语言作为一种强调性能、安全和并发性的新的编程语言&#xff0c;吸引了越来越多的程序员想要尝试学习和使用Rust。达坦科技&#xff08;DatenLord&#xff09;旗下的开源项目Xline &#xff08;用于元数据管理的分布式KV存储&#xff09;就是用Rust写就的&#xff0c;我们也…

android remount 工作原理简介

android remount 在调试android 系统的时候是个非常有用的调试手段&#xff0c; 有remount 的帮助&#xff0c; 可以轻松的修改系统分区的某些文件&#xff0c;或者在系统分区添加删除文件。但有时候remount 也会因为一些verity&#xff0c; checkpoint &#xff0c;和remount …

【python数据可视化】Matplotlib绘图练习(一)

目录 Matplotlib &#x1f947;Summary 获取源码&#xff1f;私信&#xff1f;关注&#xff1f;点赞&#xff1f;收藏&#xff1f; Python数据可视化的由来主要是因为数据可视化在数据分析领域扮演了至关重要的角色。这是因为&#xff0c;数据可视化能够更好地向人们展示大量…