【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型

文章目录

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

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

在服务发现领域中,服务指的是由应用程序提供的一个或一组软件功能的一种抽象概念(例如登录服务和支付服务)。服务和应用不同,应用范围更广,即一个应用可能包含多个服务。Nacos选择服务作为注册中心最基本的概念

服务实例是某个服务的具体提供能力的节点,一个实例仅从属一个服务,而一个服务可以包含一个或多个实例。许多场景下,实例又被称为服务提供者(Provider),而使用该服务的实例被称为服务消费者(Consumer)。

定义服务

在 Nacos 中,服务的定义包括以下几个内容:

  • 命名空间(Namespace):Nacos 数据模型中最顶层、也是包含范围最广的概念,用于在类似环境或租户等需要强制隔离的场景中定义。Nacos 的服务也需要使用命名空间来进行隔离。
  • 分组(Group):Nacos 数据模型中次于命名空间的一种隔离概念,区别于命名空间的强制隔离属性,分组属于一个弱隔离概念,主要用于逻辑区分一些服务使用场景或不同应用的同名服务,最常用的情况主要是同一个服务的测试分组和生产分组、或者将应用名作为分组以防止不同应用提供的服务重名。
  • 服务名(Name):该服务实际的名字,一般用于描述该服务提供了某种功能或能力。
    在这里插入图片描述
    Nacos之所以将服务进行拆分为命名空间分组服务名,除了方便隔离使用场景,还方便用户发现唯一服务的优点。注册中心的实际使用场景中,同个公司的不同开发者会开发类似的服务,如果仅仅使用服务名来做服务的定义和表示,容易在一些通用服务 上出现冲突,比如登录服务。
    通常推荐使用由运行环境作为命名空间、应用名作为分组和服务功能作为服务名的组合来确保该服务的天然唯一性
服务元数据

服务定义只是为服务设置了一些基本信息,用于描述和快速找到服务。
服务元数据进一步定义了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):不同于实例定义中的拓展数据,这个拓展数据是给予运维人员在不变动实例本身的情况下,快速地修改和新增实例的扩展数据,从而达到运维实例的作用。
持久化属性

Nacos 提供两种类型的服务持久化服务非持久化服务,分别给类DNS 的基础的服务组件场景和上层实际业务服务场景使用。为了标示该服务是哪种类型的服务,需要在创建服务时选择服务的持久化属性。考虑到目前大多数使用动态服务发现的场景为非持久化服务的类型(如Spring Cloud,Dubbo,Service Mesh等),Nacos 将缺省值设置为了非持久化服务。
在 Nacos2.0 版本后,持久化属性的定义被抽象到服务中,一个服务只能被定义成持久化服务或非持久化服务,一旦定义完成,在服务生命周期结束之前,无法更改其持久化属性。
持久化属性将会影响服务及实例的数据是否会被 Nacos 进行持久化存储,设置为持久化之后,实例将不会再被自动移除,需要使用者手动移除实例。

集群

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

定义集群

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

  • 健康检查类型(HealthCheckType):使用哪种类型的健康检查方式,目前支持:TCP,HTTP,MySQL;设置为NONE可以关闭健康检查。
  • 健康检查端口(HealthCheckPort):设置用于健康检查的端口。
  • 是否使用实例端口进行健康检查(UseInstancePort):如果使用实例端口进行健康检查,将会使用实例定义中的网络端口进行健康检查,而不再使用上述设置的健康检查端口进行。
  • 拓展数据(extendData):用于用户自定义扩展的元数据内容,形式为 K-V 。可以自定义扩展该集群的元数据信息,方便用户实现自己的自定义逻辑和标示该集群。
    在这里插入图片描述
生命周期

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

服务的生命周期

服务的生命周期相对比较简单,是从用户向注册中心发起服务注册的请求开始。在Nacos中,发起服务注册有两种方式,一种是直接创建服务,一种是注册实例时自动创建服务;前者可以让发起者在创建时期就制定一部分服务的元数据信息,而后者只会使用默认的元数据创建服务。
生命周期期间,用户可以向服务中新增,删除服务实例,同时也能够对服务的元数据进行修改。
用户主动发起删除服务的请求或一定时间内服务下没有实例(无论健康与否)后,服务才结束其生命周期,等待下一次的创建。

实例的生命周期

实例的生命周期开始于注册实例的请求。但是根据不同的持久化属性,实例后续的生命周期有一定的不同
持久化的实例:会通过健康检查的状态维护健康状态,但是不会自动的终止该实例的生命周期;在生命周期结束之前,持久化实例均可以被修改数据,甚至主动修改其健康状态唯一终止持久化实例生命周期的方式就是注销实例的请求
非持久化的实例:会根据版本的不同,采用不同的方式维持健康状态:如果是 Nacos1.0 的版本,会通过定时的心跳请求来进行续约,当超过一定时间内没有心跳进行续约时,该非持久化实例则终止生命周期;如果是Nacos2.0 的版本,会通过 gRPC 的长连接来维持状态,当连接发生中断时,该非持久化实例则终止生命周期。当然,非持久化实例也可以通过注销实例的请求,主动终止其生命周期,但是由于长连接和心跳续约的存在,可能导致前一个实例数据的生命周期刚被终止移除,立刻又因为心跳和长连接的补偿请求,再次开启实例的生命周期,给人一种注销失败的假象

集群的生命周期

集群的生命周期则相对复杂,由于集群作为服务和实例的一个中间层,因此集群的生命周期与实例和服务的生命周期均有关。
集群的生命周期开始与该集群第一个实例的生命周期同时开始,因为一个实例必定归属于一个集群,哪怕是默认的集群,因此当第一个实例的生命周期开始时,也就是集群生命周期的开始
一个集群下不存在实例时,集群的生命周期也不会立刻结束,而是会等到这个服务的生命周期结束时,才会一起结束生命周期

元数据的生命周期

元数据的生命周期基本和对应的数据模型保持一致。但是也如前文所说,元数据通常为运维人员的主动操作的数据,会被 Nacos 进行一段时间内的记忆,因此元数据的生命周期的终止相比对应的数据要滞后;若这滞后期间内,对应的数据又重新开始生命周期,则该元数据的生命周期将被立刻重置,不再终止。

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

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

相关文章

收单外包机构备案分析及建议

2020年9月16日,中国支付清算协会(下称“中支协”或“协会”)公示了首批收单外包服务机构备案名单。历经5年,约进行50次公示后,截至9月21日共备案收单外包机构32457家,取消备案机构316家,拟取消机…

YOLO v11实时目标检测3:训练数据集格式说明

一、Yolov11简介 YOLOv11 是 YOLO 系列的最新版本,它不仅在目标检测方面表现出色,还引入了对象分割和多目标跟踪的功能。本文将介绍如何使用 YOLOv11 进行人流统计、车流统计以及跟踪的实际应用。 二、Yolo v11训练数据集格式说明 2.1 数据组织&#…

Redis --- 第二讲 --- 特性和安装

一、背景知识 Redis特性: Redis是一个在内存中存储数据的中间件,用于作为数据库,作为缓存,在分布式系统中能够大展拳脚。Redis的一些特性造就了现在的Redis。 在内存中存储数据,通过一系列的数据结构。MySQL主要是通…

4 款语音识别转文字神器,打工人速速码住!

现在这信息多得不得了的时代哈,文字处理这玩意儿可成了咱日常生活里少不了的一部分啦。对那些忙得不行的打工人来说,能又快又准地把语音变成文字,那绝对是提升工作效率的关键。今天呢,咱就一起来瞅瞅四款挺受推崇的语音识别转文字…

TypeScript 第三部分 扩展

1. 声明文件 主要作用: 类型声明:为库或模块提供类型信息。全局声明:为全局作用域中的类型和变量提供声明。类型兼容性:确保第三方库或自定义代码的类型正确性。代码提示与检查:在开发环境中提供更好的代码提示和类型…

基于单片机人体反应速度测试仪系统

** 文章目录 前言概要设计思路 软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

CSP-J Day 2 模拟赛补题报告

upd: T4 重新上传 AC 代码,一开始的有 hack。 姓名:王胤皓,校区:和谐校区,考试时间: 2024 2024 2024 年 10 10 10 月 2 2 2 日 9 : 00 : 00 9:00:00 9:00:00~ 12 : 30 : 00 12:30:00 12:30:00&#xff…

简单理解程序地址空间:Linux 中的内存映射与页表解析

ps: Linux操作系统对于程序地址,物理地址的处理,对于源码,我也看不大懂,只是截取当我们进程发生正常缺页中断的时候的调用情况。本文中所有的源码都是进行截取过的,如果大家感兴趣可以去下载源码。 在Linux 操作系统 …

【Burp入门第三十三篇】IP Rotate 插件实现IP轮换爆破

Burp Suite是一款功能强大的渗透测试工具,被广泛应用于Web应用程序的安全测试和漏洞挖掘中。 本专栏将结合实操及具体案例,带领读者入门、掌握这款漏洞挖掘利器 读者可订阅专栏:【Burp由入门到精通 |CSDN秋说】 文章目录 正文安装步骤使用步骤应用场景实战文章正文 在 Burp…

留存率的定义与SQL实现

1.什么是留存率 留存率是指在特定时间段内,仍然继续使用某项产品或服务的用户占用户总数的百分比。 通常,留存率会以日,周,或月为单位进行统计和分析。 2.SQL留存率常见问题 1.计算新用户登录的日期的次日留存率以及3日留存率 …

假期惊喜,收到公司款项86167.14元

假期惊喜 近日,有网友爆料称,比亚迪在未提前通知员工的情况下,突然发放了利润奖金。 有人获得了七八万元,也有人拿到了十多万元。 一位比亚迪员工的帖子显示,在9月26日下午,他的银行卡突然收到一笔 86167.1…

知识图谱入门——4:Protégé 5.6.4安装和主要功能介绍、常用插件(2024年10月2日):知识图谱构建的利器

Protg 是斯坦福大学开发的一款开放源代码的本体编辑工具。它为构建、共享和管理本体(Ontologies)提供了一个强大的平台,广泛应用于语义网、知识管理、自然语言处理等领域,特别是知识图谱的开发和管理。Protg 支持 OWL(…

解决问题AttributeError: “safe_load“ has been removed, use

解决问题AttributeError: "safe_load" has been removed, use~ 1. 问题描述2. 解决方法 1. 问题描述 在复现cdvae代码时,运行 python scripts/compute_metrics.py --root_path MODEL_PATH --tasks recon gen opt评估模型时,出现以下问题。 …

【优选算法】(第十六篇)

目录 连续数组(medium) 题目解析 讲解算法原理 编写代码 矩阵区域和(medium) 题目解析 讲解算法原理 编写代码 连续数组(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&a…

Java--IO基本流

IO流 概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘…

汇总binder相关一些常见面试题-安卓系统常见面试题

背景: 国庆前有几个学员朋友在群里讨论了几个binder相关的面试题,讨论较为激烈,这里马哥统一整理一下列出来了,并且也补充了几个,大家有兴趣的可以尝试做一下,后续方便每个学员进行查缺补漏。后续会进行整…

JSP(Java Server Pages)基础使用三(表单传参)

表单传参 1.这次学习的是我们在网络上使用次数相对来说很多的jsp的使用方式,表单传参是运用了form表单的post方法来讲表单中的数据传递给action页面,action的作用是跳转就类似a标签,当然action不只可以是页面,还可以是后端类,用来…

如何解决 Photoshop 中的“暂存盘已满”错误

好久没有用Photoshop了,今天想自己修个图,就启动了一下PS,结果出现一个对话框“不能初始化Photoshop,因为暂存盘已经满”。我一直存在C盘焦虑,常年C盘显示都是红色的。上网一查,发现PS启动时暂存盘的空间是…

最新BurpSuite2024.9专业中英文开箱即用版下载

1、工具介绍 本版本更新介绍 此版本对 Burp Intruder 进行了重大改进,包括自定义 Bambda HTTP 匹配和替换规则以及对扫描 SOAP 端点的支持。我们还进行了其他改进和错误修复。 Burp Intruder 的精简布局我们对 Burp Intruder 进行了重大升级。现在,您可…