Nacos简述

介绍

Nacos主要在微服务生态中可以发现、配置和管理微服务,实现动态服务发现和注册、服务配置、DNS服务、服务元数据及流量管理。

​ 目前Nacos支持多种生态,比如SpringCloud、Dubbo、云原生Cloud Native等。

Nacos关键特性

1、服务发现和服务健康监测

1)Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用原生SDK、OpenAPI、或一个独立的Agent 注册 Service 后,服务消费者可以使用DNS或HTTP&API查找和发现服务。

2)Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层(如 HTTP、MySQL、用户自定义)的健康检查。对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

相关概念:

服务注册

Nacos Client 启动的时候会发送REST 请求(1.0默认为http,2.0为grpc)向Nacos Server注册服务并提供元数据信息,包含服务的别名、host、端口等信息。NacosServer接收到Client注册请求会讲实例信息存储到自身的注册表(底层为Map)中。

服务心跳

​ Nacos Client启动之后会启动一个定时任务每隔一段时间进行心跳通知Nacos Server(默认5s发送一次心跳),防止自身服务被剔除。

服务发现

​ **Nacos Client在进行第一次服务调用时,会先向Nacos Server发起REST请求拉取服务列表,并缓存到本地。**为防止缓存与实际服务数据不一致,同时Nacos Client会启动一个定时任务从Nacos Server拉取最新的注册表信息更新到本地缓存。

服务健康检查

Nacos Server会启动一个定时任务检测Nacos Client的健康状态,若15s内没有收到客户端的心跳事件,会将实例的health属性设置为false,如果实例超过30s没有收到心跳事件,会从Nacos Server注册表中剔除该实例。

2、动态配置服务

允许在所有环境中以几种和动态的方式管理所有服务的配置,Nacos消除了在更新配置时重新部署应用程序,这种动态配置服务可以以中心化、外部化和动态化的方式,管理所有环境的应用配置和服务配置。

Nacos 提供了一个简洁易用的UI帮助管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性。

特性:

  • Nacos Config 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。
  • 使用 Nacos Config,可以在 Nacos Server 配置界面集中管理 Spring Cloud 应用的外部属性配置。
  • 当应用程序通过部署管道(例如:Jenkins)从开发到测试再到生产时,可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

1)一致性模型(AP)

Nacos 配置管理一致性分为两部分,第一部分是Server间一致性协议(Nacos Server集群环境),一个是SDK(Nacos Config Client)与Server的一致性协议。配置作为分布式系统中非强一致性数据,在出现脑裂的时候高可用性高于一致性,因此配置中心采用的是AP一致性协议。

CAP理论,C代表一致性,A代表可用性 ,P代表分区容错性。

2)支持多种类型配置

1)支持profile粒度的配置。用于开发、测试、生产环境。

2)支持自定义namespace配置。不同环境的配置的区分隔离。

3)支持自定义 Group 的配置。

4)支持共享配置。

5)支持自定义扩展DataId配置。不同分组采用不同数据源

3、动态 DNS 服务

​ **Nacos服务支持权重路由,可以用于实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。Nacos 提供了一些简单的 DNS APIs 帮助管理服务的关联域名和可用的 IP:PORT 列表。**动态DNS服务能够实现以DNS 协议为基础的服务发现,以帮助消除耦合到厂商私有服务发现 API 上的风险。

4、服务及其元数据管理

​ **Nacos支持数据中心的所有服务及元数据管理。**包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

部署模式

1、单机模式

​ 用于测试和单机试用。默认Nacos使用嵌入式数据库实现数据的存储,0.7版本之后支持mysql数据源能力。

安装数据库流程:

  1. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql

  2. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码

    再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql nacos表如下。

2、集群模式

用于生产环境,确保高可用

3、多集群模式

用于多数据中心场景

Nacos架构设计

Nacos是一个分布式的,支持服务发现、配置管理和服务治理的平台。其架构设计主要包含以下三部分:

  1. 注册中心(Naming Service):用于服务的注册和发现。Nacos提供了REST和Java API接口,供开发者调用。
  2. 配置中心(Configuration Service):用于动态配置服务。开发者可以使用Nacos的配置中心将配置信息注入到应用程序中。
  3. 控制台(Console):用于管理和查看Nacos的服务和配置信息。

Nacos的架构图如下所示:

img

img

Nacos实现技术和原理

  1. Spring Cloud和Spring Boot:Nacos使用Spring Cloud作为服务治理的核心组件,使用Spring Boot作为开发框架。Spring Cloud提供了对Eureka、Consul等服务治理组件的支持。
  2. **Raft算法:Nacos使用了Raft算法作为分布式一致性算法。**Raft算法保证了分布式环境下数据的一致性,并且可以容忍节点故障。
  3. 数据库:Nacos使用MySQL作为存储服务注册和配置信息的数据库。
  4. RPC框架:Nacos使用了gRPC作为远程过程调用框架。
  5. Spring Cloud Gateway:Nacos使用Spring Cloud Gateway作为网关,处理所有的服务请求。

Nacos高性能实现原理

​ **Nacos通过使用Raft算法来实现服务列表的同步和高并发访问。**Raft算法是一种分布式一致性算法,能够保证在网络分区、服务器崩溃等异常情况下,系统仍能够保持强一致性。

​ **Nacos中的每个节点都是一个Raft节点,节点之间通过Raft协议进行通信和协调。**当有节点加入或离开集群时,Raft算法会自动进行选举,选出一个新的leader来负责更新服务列表,并将最新的服务列表同步给其他节点。同时,nacos使用了一些优化技术来提高同步效率和并发访问性能,包括:

  1. 快照技术:nacos会定期生成快照,将当前的服务列表状态保存下来,当节点重新加入集群时,可以快速恢复服务列表的状态,避免了重新同步的过程。
  2. 数据压缩:nacos使用了一些数据压缩算法来压缩服务列表数据,减少网络传输的数据量,提高同步效率。
  3. 前缀树:nacos中的服务列表使用了前缀树数据结构进行存储和管理,能够快速地进行服务的查找和匹配,提高了并发访问性能。

服务发现核心概念

服务(Service) 服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)

**服务注册中心 (Service Registry) 服务注册中心,它是服务,其实例及元数据的数据库。底层为Map(namespace, Map(group::serviceName, Service)),服务实例在启动时注册到服务注册表,并在关闭时注销。**服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

服务元数据 (Service Metadata) 服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。

服务提供方 (Service Provider) 是指提供可复用和可调用服务的应用方。

服务消费方 (Service Consumer) 是指会发起对某个服务调用的应用方。

**名字服务 (Naming Service) 提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,**例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

1、业务流程

1)服务注册:

​ 本地服务端会通过轮询向注册中心集群节点地址进行服务的注册。Nacos 客户端进行服务注册有两个部分组成,一个是将服务信息注册到服务端,另一个是像服务端发送心跳包,这两个操作都是通过 NamingProxy 和服务端进行数据交互的。

2)注册中心:

​ 即Nacos Server上采用了Map保存服务的实例信息,当服务信息配置了持久化策略之后,会被保存到nacos数据库中。

3)调用方:

​ 为了保证本地服务实例列表的动态感知,Nacos采用了 Pull/Push同时运作的方式。另外服务消费方是通过RestTemplate调用提供方的服务。 Nacos 客户端进行服务订阅时也有两部分组成,一个是不断从服务端查询可用服务实例的定时任务,另一个是不断从已变服务队列中取出服务并通知 EventListener 持有者的定时任务。

2、执行步骤

Nacos注册概括来说有6个步骤:

0、服务容器负责启动,加载,运行服务提供者。

1、服务提供者在启动时,向注册中心注册自己提供的服务。

2、服务消费者在启动时,向注册中心订阅自己所需的服务。

3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

3、Nacos 服务领域模型

Nacos支持服务在所有场景下的数据存储和管理,Nacos 的服务领域模型为 服务-集群-实例的三层模型。

1) 服务领域

  • 健康检查开关
  • 元数据
  • 路由机制
  • 保护阈值

2)集群领域

  • 健康检查模式
  • 元数据
  • 同步机制

3)实例领域

  • IP
  • 端口
  • 权重
  • 健康状态
  • 下线状态
  • 元数据
  • 响应时间

小结

1)心跳检测

1)服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。

2) nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。

2)服务领域模型

Nacos服务领域模型主要分为命名空间、集群、服务。

1)在服务级别,保存了健康检查开关、元数据、路由机制、保护阈值等设置,

2)集群保存了健康检查模式、元数据、同步机制等数据,

3)命名空间/实例保存了该实例的ip、端口、权重、健康检查状态、下线状态、元数据、响应时间。

3)其他

1、Nacos中的负责均衡底层是如何实现的?
通过内置的Ribbon实现的,nacos(部分版本)默认的负载均衡策略是轮询,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务

2、Ribbon 内置的负载策略都有哪些?
8种,可以通过查看IRule接口的实现类进行分析

3、@LoadBalanced的作用是什么?
用于告诉Spring框架,在使用RestTempalte进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略。

4、我们可以自己定义负载均衡策略吗?
可以,基于IRule接口进行策略定义,也可以参考NacosRule进行实现

5、如何定位到服务实例?

​ 通过命名空间(Namespace)+ 分组(Group)+服务名(Name)可以定位到一个唯一的服务实例。

6、保护阈值设置多少?

​ 0.75。为了防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成雪崩效应。应将健康保护阈值定义为⼀个 0 到 1 之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失了⼀部分流量,但是保证了集群中剩余健康实例能正常工作。

7、临时实例 VS 持久化实例

​ 临时实例在非健康状态下会被自动剔除,而持久化实例不会被自动剔除。

临时实例的健康状况是 Nacos 客户端以固定频率(5s一次)上报给 Nacos 服务器端的,而持久化实例是 Nacos 服务器端主动探测的。

8、Nacos实例数据存储在哪里?

​ 默认是把数据保存在本地磁盘文件读取,启动之后会把实例数据加载的缓存数据中用于页面展示。若是采用数据库持久化,则在启动之后同步到数据库中。定期检查心跳,并更新对应的数据。

总结

​ Nacos除了服务的注册发现之外,还支持动态配置服务。并且支持负载均衡以及流量权重,另外提供sdk方式服务注册和发现和DNS服务。并且支持集群,也有心跳检测机制,服务健康检测机制,以及异常上报,有直观的UI方便管理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器:docker consul的注册与发现及consul-template守护进程

文章目录 一.docker consul的注册与发现介绍1.什么是服务注册与发现2.什么是consul3.consul提供的一些关键特性4.数据流向 二.consul部署1.consul服务器(192.168.198.12)(1)建立 Consul 服务(2)查看集群信息…

探究HTTP API接口测试:工具、方法与自动化

本文将深入探讨HTTP API接口测试的重要性,并介绍了相关工具、方法以及自动化测试的实施,同时比较了HTTP和API接口测试的区别。从不同角度解析这一关键测试领域,帮助读者更好地理解和应用于实际项目中。 在如今数字化的世界中,软件…

并查集及其简单应用

文章目录 一.并查集二.并查集的实现三.并查集的基本应用 一.并查集 并查集的逻辑结构:由多颗不相连通的多叉树构成的森林(一个这样的多叉树就是森林的一个连通分量) 并查集的元素(树节点)用0~9的整数表示,并查集可以表示如下: 并查集的物理存储结构:并查集一般采用顺序结构实…

【OpenVINOSharp】在英特尔® 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型

在英特尔 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型 一、英特尔开发套件 AIxBoard 介绍1. 产品定位2. 产品参数3. AI推理单元 二、配置 .NET 环境1. 添加 Microsoft 包存储库2. 安装 SDK3. 测试安装4. 测试控制台项目 三、安装 OpenVINO Runtime1. 下载 OpenVINO…

【计算机网络】13、ARP 包:广播自己的 mac 地址和 ip

机器启动时,会向外广播自己的 mac 地址和 ip 地址,这个即称为 arp 协议。范围是未经过路由器的部分,如下图的蓝色部分,范围内的设备都会在本地记录 mac 和 ip 的绑定信息,若有重复则覆盖更新(例如先收到 ma…

[Docker] Portainer + nginx + AList 打造Docker操作三板斧

Portainer : Docker容器图形化管理系统 nginx: 反向代理利器 AList: 文件管理系统 目的: 依托Portainer 的图形管理界面,可视化的配置docker容器. AList再关联Docker各容器内部的配置文件,可视化配置,再配合Portainer重启,日志查看,命令行操作等.对于中小企业对容器化操作简…

MsrayPlus多功能搜索引擎采集软件

MsrayPlus多功能搜索引擎采集软件 摘要: 本文介绍了一款多功能搜索引擎软件-MsrayPlus,该软件能够根据关键词从搜索引擎中检索相关数据,并提供搜索引擎任务、爬虫引擎任务和联系信息采集三大功能。我们将分析该软件在不同领域的应用&#xf…

chapter 3 Free electrons in solid - 3.1 自由电子模型

3.1 自由电子模型 Free electron model 研究晶体中的电子: 自由电子理论:不考虑离子实能带理论:考虑离子实(周期性势场)的作用 3.1.1 德鲁德模型 Drude Model - Classical Free Electron Model (1)德鲁德模型 德鲁…

远程控制:用了向日葵控控A2后,我买了BliKVM v4

远程控制电脑的场景很多,比如把办公室电脑的文件发到家里电脑上,但是办公室电脑旁边没人。比如当生产力用的电脑一般都比较重,不可能随时带在身边,偶尔远程操作一下也是很有必要的。比如你的设备在工况恶劣的环境中,你…

探索高效的HTTP异步接口测试方法:从轮询等待到自动化方案

本文将深入探讨HTTP异步接口测试的多个方面,包括轮询等待、性能测试以及自动化方案。通过详细的解释和实际案例,帮助您了解如何有效地测试异步接口,确保系统的稳定性和性能。 在现代软件开发中,HTTP异步接口扮演着至关重要的角色&…

STM32--MPU6050与I2C外设

文章目录 前言MPU6050参数电路MPU6050框图 IIC外设框图 IIC的基本结构软件IIC实现MPU6050硬件IIC实现MPU6050 前言 在51单片机专栏中,用过I2C通信来进行实现AT24C02的数据存储; 里面介绍的是利用程序的编程来实现I2C的时序,进而实现AT24C02与…

学习设计模式之适配器模式,但是宝可梦

前言 作者在准备秋招中,学习设计模式,做点小笔记,用宝可梦为场景举例,有错误欢迎指出。 适配器模式 意图:将一个类的接口转换成客户希望的另一个接口 主要解决:把现有对象放到新环境里,而新…

【vue3+ts项目】配置eslint校验代码工具,eslint+prettier+stylelint

1、运行好后自动打开浏览器 package.json中 vite后面加上 --open 2、安装eslint npm i eslint -D3、运行 eslint --init 之后,回答一些问题, 自动创建 .eslintrc 配置文件。 npx eslint --init回答问题如下: 使用eslint仅检查语法&…

非平衡数据处理过程中可以尝试的三个额外措施

非平衡数据处理过程中可以尝试的三个额外措施 非平衡数据集是医学数据集中常见的一种数据形式,指的是二分类结局变量中一种类别的数量远于另一类别的数量的情形,比如以远处转移或者死亡作为结局变量,远处转移或者死亡类别的数量往往远小于对照…

Qt应用开发(基础篇)——文本编辑窗口 QTextEdit

一、前言 QTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,用来显示富文本和纯文本的窗口部件。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655滚屏区域基类 QAbstractScrollAreahttps://blog.csdn…

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用?TCP和UDP的区别?UDP 和 TCP 对应的应用场景是什么?详细介绍一下 TCP 的三次握手机制?为什么需要三次握手,而不是两次?为什么要三次握手,而不是四次&#xff1f…

【C++】使用Windows操作系统的API在控制台输出绿色的文本

2023年8月21日&#xff0c;周一下午 #include <Windows.h> #include <iostream>int main() {HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE);// 设置文本颜色为绿色SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN); std::cout<<"This text i…

小程序中的页面配置和网络数据请求

页面配置文件和常用的配置项 1.在msg.json中配置window中的颜色和背景色 "navigationBarBackgroundColor": "#efefef","navigationBarTextStyle": "black" 2.可以看到home中的没有发生变化但是msg的发生变化了&#xff0c;这个和前面的…

Android Hook技术学习——常见的hook技术方案

一、前言 最近一段时间在研究Android加壳和脱壳技术&#xff0c;其中涉及到了一些hook技术&#xff0c;于是将自己学习的一些hook技术进行了一下梳理&#xff0c;以便后面回顾和大家学习。 本文第二节主要讲述编译原理&#xff0c;了解编译原理可以帮助进一步理解hook技术 本文…

220V转5V芯片三脚芯片-AH8652

220V转5V芯片三脚芯片是一种非常常见的电源管理芯片&#xff0c;它通常被用于将高压交流输入转为稳定的直流5V输出。芯片型号AH8652是一款支持交流40V-265V输入范围的芯片&#xff0c;采用了SOT23-3三脚封装。该芯片内部集成了650V高压MOS管&#xff0c;能够稳定地将输入电压转…
最新文章