来聊聊nacos

news2024/12/25 9:01:54

先关注下下方公众号呗:

在这里插入图片描述

第1部分:引言

微服务的挑战

尽管微服务架构带来了许多好处,如敏捷性、可扩展性和容错性,但它也带来了一些挑战,特别是在服务发现、配置管理、服务间通信和运维管理方面。这些挑战需要有效的解决方案来确保微服务架构的可维护性和高效运作。

Nacos的引入

Nacos(Naming and Configuration Service)是由阿里巴巴集团开源的服务发现和配置管理平台,它提供了一种统一的方式来管理微服务架构中的服务和配置。Nacos旨在简化分布式系统的服务管理和服务发现过程,支持云原生环境,并与现代微服务架构无缝集成。

Nacos的核心价值
  • 服务发现与注册:Nacos允许服务实例在启动时自动注册到服务列表,并在停止时自动注销,同时提供服务消费者对服务提供者的发现功能。
  • 配置管理:Nacos提供了集中化的配置管理功能,支持配置的动态更新和推送,使得配置变更可以实时生效,无需重启服务。
  • 服务管理:Nacos支持服务的分组、命名空间管理,以及服务的权重调整和路由规则设置,帮助开发者更好地控制服务的流量和负载均衡。
  • 高可用性:Nacos支持集群模式,通过多个节点的部署来保证服务的高可用性,即使在部分节点故障的情况下也能继续提供服务。
  • 易于集成:Nacos与Spring Cloud、Dubbo等主流微服务框架具有良好的集成性,简化了开发者在现有架构中引入Nacos的复杂度。

第2部分:Nacos概览

什么是Nacos

Nacos是一个易于使用的平台,用于动态服务发现、配置管理和服务管理。它支持云原生环境,并与现有的微服务生态系统集成,如Spring Cloud和Dubbo。Nacos的设计目标是帮助开发者在微服务架构中更高效地进行服务的注册、发现和配置管理。

Nacos的主要功能
  1. 服务发现与注册:Nacos提供了一个服务注册表,服务实例可以在其中注册和注销,同时服务消费者可以查询服务列表,以发现可用的服务提供者。

  2. 配置管理:Nacos允许配置的集中管理,支持配置的版本控制、快速推送和实时更新。

  3. 服务管理:Nacos支持服务的分组、命名空间管理,以及服务的权重调整和路由规则设置。

  4. 集群管理:Nacos支持集群模式,可以跨多个节点运行,提供高可用性和负载均衡。

  5. API友好:Nacos提供了丰富的API,方便开发者进行自动化和集成。

  6. 插件化设计:Nacos支持插件扩展,可以根据需要添加新的功能。

Nacos与其他服务发现工具的对比

Nacos与Consul、Eureka、Zookeeper等其他服务发现工具相比,具有以下特点:

  • 易用性:Nacos提供了更为友好的用户界面和简化的配置流程。
  • 云原生支持:Nacos专为云原生环境设计,与Kubernetes等容器编排工具有良好的集成。
  • 动态配置:Nacos的配置管理功能支持动态推送,而不仅仅是静态配置存储。
  • 多语言客户端:Nacos提供了Java、Python、Go等多种语言的客户端支持。
服务发现与注册示例

假设我们有一个电子商务平台,它由多个微服务组成,如用户服务、产品服务、订单服务等。使用Nacos进行服务注册和发现的流程如下:

  1. 服务注册:每个微服务实例在启动时,通过Nacos客户端向Nacos服务器注册自己的服务信息,包括IP地址、端口号和元数据。

  2. 服务发现:当用户服务需要调用产品服务时,它可以通过Nacos服务器查询产品服务的实例列表,选择一个健康的实例进行调用。

  3. 健康检查:Nacos可以定期对服务实例进行健康检查,自动移除不健康的实例,确保服务列表的准确性。

配置管理示例

在一个多环境部署的场景中,Nacos的配置管理功能可以这样使用:

  1. 配置发布:开发团队在Nacos中定义了不同环境(开发、测试、生产)的配置信息。

  2. 配置订阅:各个服务实例在启动时订阅相应的配置信息,并在配置更新时接收通知。

  3. 动态更新:当配置信息发生变化时,Nacos可以实时推送更新到所有订阅了该配置的服务实例,无需重启服务。

服务管理示例

在进行服务的A/B测试或蓝绿部署时,Nacos的服务管理功能可以这样应用:

  1. 流量分割:通过Nacos设置服务的权重,将一部分流量导向新版本的服务,另一部分流量保持在旧版本。

  2. 命名空间管理:使用Nacos的命名空间功能,为不同的部署环境或项目设置隔离的配置空间。

  3. 服务路由:根据业务规则,通过Nacos设置路由规则,如地域感知路由或自定义权重路由。

第3部分:Nacos的核心特性

服务发现与注册

定义与重要性
服务发现是微服务架构中的一个关键组成部分,它允许服务实例在启动时自动注册到服务列表,并在停止时自动注销。这样,服务消费者可以动态地发现服务提供者,而无需硬编码服务地址。

Nacos服务发现特性

  • 自动注册与发现:服务实例在启动时自动向Nacos注册,提供者和消费者通过服务名进行通信。
  • 健康检查:Nacos支持心跳检测和主动健康检查,确保服务列表中只有健康的服务实例。
  • 权重分配:可以为服务实例设置不同的权重,以支持负载均衡和故障转移。

示例
假设有一个在线书店的微服务架构,包含用户服务、图书服务和订单服务。每个服务实例在启动时向Nacos注册,并在服务关闭时自动注销。用户服务需要调用图书服务来获取图书信息,它通过查询Nacos获取健康的图书服务实例。

配置管理

定义与重要性
配置管理是微服务架构中的另一个关键组成部分,它允许集中管理所有服务的配置信息,支持配置的动态更新和推送。

Nacos配置管理特性

  • 集中式配置存储:所有服务的配置信息都存储在Nacos中,易于管理和修改。
  • 动态配置更新:配置更新可以实时推送到所有订阅了该配置的服务实例,无需重启服务。
  • 版本控制与审计:支持配置的版本控制,可以追踪配置的变更历史。

示例
在一个多环境部署的场景中,如开发、测试和生产环境,Nacos可以为每个环境维护不同的配置集。当开发人员在开发环境中更改了数据库连接字符串,他们可以在Nacos中更新配置,所有订阅了该配置的服务实例将自动接收到新的配置信息。

服务管理

定义与重要性
服务管理包括对服务的分组、命名空间管理、权重调整和路由规则设置,帮助开发者更好地控制服务的流量和负载均衡。

Nacos服务管理特性

  • 分组管理:可以根据业务逻辑将服务实例分组,便于管理和访问控制。
  • 命名空间:支持不同环境或项目的命名空间隔离,避免配置冲突。
  • 服务路由:可以设置路由规则,如权重路由、标签路由等,以支持复杂的流量管理策略。

示例
在一个电子商务平台中,服务管理可以用于实现蓝绿部署。通过Nacos设置路由规则,可以将一部分用户流量引导至新部署的服务版本,同时保持另一部分用户流量在旧版本上,以评估新版本的性能和稳定性。

命名空间和分组管理

定义与重要性
命名空间和分组管理提供了一种机制,用于在不同的环境或项目中隔离配置和服务实例,避免命名冲突。

Nacos命名空间和分组管理特性

  • 命名空间:可以创建不同的命名空间来区分不同的环境或项目。
  • 分组:可以在同一个命名空间内创建不同的分组,以逻辑上分组服务实例。

示例
在一个大型企业中,可能同时运行着多个项目,每个项目都有自己的服务和配置。使用Nacos的命名空间和分组管理,可以为每个项目创建一个独立的命名空间,并在命名空间内部根据服务类型创建不同的分组,如前端服务、后端服务等。

第4部分:安装与配置Nacos

Nacos的安装步骤

环境准备
在开始安装之前,确保你的系统满足Nacos的运行环境要求。Nacos支持多种操作系统,包括Linux、macOS和Windows。对于生产环境,推荐使用Linux系统。

下载Nacos
访问Nacos的官方GitHub仓库下载最新版本的Nacos。你可以选择下载二进制包或者使用Docker镜像。

运行Nacos

  • 单机模式:对于开发和测试环境,可以直接运行Nacos的单机模式。解压下载的压缩包,进入bin目录,执行startup.sh(Linux/macOS)或startup.cmd(Windows)启动Nacos。
  • 集群模式:对于生产环境,建议使用集群模式以提高可用性。配置多个Nacos实例,并通过配置文件指定集群节点信息。

验证安装
通过访问http://<your-ip>:8848/nacos来验证Nacos是否成功启动。你应该能看到Nacos的控制台界面。

配置Nacos的基本设置

配置文件
Nacos的配置文件通常位于conf目录下,包括application.properties等。根据需要修改配置文件中的参数,如端口号、日志路径等。

数据库配置
如果使用嵌入式数据库(如Derby),则无需额外配置。如果选择外部数据库(如MySQL),则需要在application.properties中配置数据库连接信息。

示例
假设你正在为一个开发团队设置Nacos。首先,下载并解压Nacos到/opt/nacos目录。然后,编辑application.properties文件,设置数据库连接到团队共享的MySQL实例:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.100:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=yourpassword
集群模式下的Nacos配置

集群架构
Nacos集群由多个Nacos实例组成,它们通过gossip协议进行通信。集群模式可以提高服务的可用性和容错能力。

配置集群
在每个Nacos实例的application.properties文件中,设置集群模式的参数,如集群节点列表。

示例
假设你正在为一个电子商务平台配置Nacos集群。你需要在三个服务器上部署Nacos,并设置集群模式。在每个服务器的application.properties文件中,添加以下配置:

nacos.cluster.mode=cluster
nacos.discovery.server-addr=192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848

这里,192.168.1.101192.168.1.102192.168.1.103是三个服务器的IP地址。

使用Docker部署Nacos

Docker Compose
使用Docker Compose可以方便地部署Nacos集群。创建一个docker-compose.yml文件,并定义Nacos服务。

示例
以下是一个简单的Docker Compose配置,用于启动一个Nacos集群:

version: '3'
services:
  nacos1:
    image: nacos/nacos-server:latest
    container_name: nacos1
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=cluster
      - SPRING_DATASOURCE_PLATFORM=mysql
      - SPRING_DATASOURCE_URL=jdbc:mysql://192.168.1.100:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=yourpassword
    ports:
      - "8848:8848"
    depends_on:
      - db

  nacos2:
    image: nacos/nacos-server:latest
    container_name: nacos2
    ports:
      - "8847:8848"
    depends_on:
      - db

  db:
    image: mysql:5.7
    container_name: nacos-db
    environment:
      - MYSQL_ROOT_PASSWORD=yourpassword
      - MYSQL_DATABASE=nacos
    volumes:
      - ./mysql:/var/lib/mysql

在这个示例中,我们使用Docker Compose部署了两个Nacos实例和一个MySQL数据库。

第5部分:服务发现与注册实践

服务发现的基本概念

服务发现是微服务架构中实现服务间通信的关键机制。它允许服务实例在启动时自动注册自己的信息到服务注册中心,并允许其他服务通过服务名来发现并调用这些服务。

Nacos服务发现的核心组件
  • 服务提供者:将服务信息注册到Nacos的微服务实例。
  • 服务消费者:从Nacos查询服务信息,调用服务的微服务实例。
  • 服务注册中心:存储服务信息的中心数据库,由Nacos维护。
使用Nacos进行服务注册

注册流程

  1. 服务提供者在启动时,通过Nacos客户端向Nacos服务器发送注册请求,包括服务名、IP地址、端口号等信息。
  2. Nacos服务器接收注册请求,并存储服务信息。
  3. 服务提供者可以选择性地发送心跳以表明自己的存活状态。

示例
假设有一个名为order-service的订单服务,它运行在192.168.1.100的机器上,端口为8080。服务启动时,通过以下Java代码向Nacos注册:

Properties properties = new Properties();
properties.setProperty("serverAddr", "192.168.1.101:8848"); // Nacos服务器地址
NamingService naming = new NamingService(properties);
naming.registerInstance("order-service", "192.168.1.100", 8080);
使用Nacos进行服务发现

发现流程

  1. 服务消费者通过Nacos客户端查询服务名对应的服务列表。
  2. Nacos服务器返回服务列表,包括所有可用的服务实例信息。
  3. 服务消费者根据返回的信息调用服务。

示例
继续使用上述的order-service,假设现在有一个user-service需要调用订单服务。它通过以下Java代码发现并调用服务:

Properties properties = new Properties();
properties.setProperty("serverAddr", "192.168.1.101:8848");
NamingService naming = new NamingService(properties);
List<Instance> instances = naming.selectInstances("order-service", true);
if (!instances.isEmpty()) {
    Instance instance = instances.get(0); // 选择第一个实例
    // 通过instance.getIp()和instance.getPort()获取服务实例信息
}
服务的健康检查

心跳检测
Nacos支持心跳检测机制,服务实例定期发送心跳到Nacos,表明自己的存活状态。

主动健康检查
Nacos服务器可以主动向服务实例发送请求,以检查其健康状态。

示例
order-service中,可以配置心跳检测的间隔和超时时间:

nacos.heartbeat.timeout=15
nacos.heartbeat.interval=5

这表示如果服务在15秒内没有发送心跳,Nacos将认为服务不健康,并从服务列表中移除。

服务实例的权重管理

权重分配
Nacos允许为服务实例分配不同的权重,以支持负载均衡和故障转移。

示例
假设order-service有多个实例,其中一个实例运行在更强大的服务器上,可以分配更高的权重:

naming.registerInstance("order-service", "192.168.1.100", 8080, "DEFAULT", 2);

这里,权重设置为2,表示该实例在负载均衡时会被优先选择。

服务的自动注销

自动注销机制
当服务实例停止或出现异常时,Nacos可以自动将其从服务列表中注销。

示例
order-service中,可以在服务停止时自动注销:

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    naming.deregisterInstance("order-service", "192.168.1.100", 8080);
}));

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

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

相关文章

编译调试swift5.7源码

环境&#xff1a; 电脑&#xff1a;apple m1 pro系统&#xff1a;macOS13Xcode: 14.2Cmake: 3.25.1Ninja: 1.11.1sccache: 0.3.3swift代码地址 新建一个文件夹&#xff08;用于存放clone下来的swift源码&#xff09;&#xff0c;然后进入该文件夹。本例中是在终端执行了mkdir…

centos 安装deb格式安装包

背景 研发给了我一个deb包&#xff0c;需要我在centos 这种服务器操作系统上安装... deb包安装一般是使用dpkg -i xxxx.deb 命令&#xff0c;dpkg是Debian类型的系统,但是 通常centos是没有dpkg命令的... 直接就报&#xff1a;bash dpkg 未找到命令... 本来找研发给我编译rp…

Nature子刊 | 基于遥感和U-Net绘制6亿棵树木,并发现过去十年印度农田树木严重减少

题目:Severe decline in large farmland trees in India over the past decade 期刊:Nature Sustainability 论文:https://www.nature.com/articles/s41893-024-01356-0 结果数据: https://rs-cph.projects.earthengine.app/view/tree https://zenodo.org/records/10978…

布尔运算00

题目链接 布尔运算 题目描述 注意点 运算符的数量不超过 19 个布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成算出有几种可使该表达式得出 result 值的括号方法 解答思路 可以使用动态规划根据左右两侧区间不同结果相应组合数量计算得出当前…

Java---Maven详解

一段新的启程&#xff0c; 披荆斩棘而前&#xff0c; 心中的梦想&#xff0c; 照亮每个黑暗的瞬间。 无论风雨多大&#xff0c; 我们都将坚强&#xff0c; 因为希望的火焰&#xff0c; 在胸中永不熄灭。 成功不是终点&#xff0c; 而是每一步的脚印&#xff0c; 用汗水浇灌&…

2024年6月27日,欧盟REACH法规新增第31批1项SVHC高关注物质

ECHA公布第31批1项SVHC&#xff0c;物质已增至241项 2024年6月27日&#xff0c;ECHA公布第31批1项SVHC&#xff0c;总数达241项。新增物质未包括磷酸三苯酯&#xff0c;仍在评议中。REACH法规要求SVHC含量超0.1%需告知下游&#xff0c;出口超1吨须通报ECHA。SCIP通报要求SVHC含…

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String&#xff08;字符串&#xff09;类型 3.break continue return的区别 break&#xff0c;结束整个循环 continue&#xff0c;结束本次循环 return&#xff0c;结束整…

AI产品经理需要懂的算法和模型

本篇希望以精准推荐模型为案例通过全面的撰写将AI产品经理需要懂的算法和模型进行了系统的入门讲解。 一个产品经理经常疑惑的概念&#xff1a; 算法和模型的关系&#xff0c;产品经理懂得解决问题时将问题抽象为模型&#xff0c;对模型求解用算法&#xff0c;没有谁大谁小&a…

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展&#xff0c;激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率&#xff0c;还为相关行业带来了革命性的变革。在这篇博客中&#xff0c;我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…

从菌群代谢到健康影响——认识肠道丙酸和丁酸

谷禾健康 短链脂肪酸这一词经常出现在谷禾的文章和报告中&#xff0c;那你真的了解短链脂肪酸吗&#xff1f;短链脂肪酸(SCFA)主要是肠道微生物群在结肠内通过发酵碳水化合物(包括膳食和内源性碳水化合物&#xff0c;主要是抗性淀粉和膳食纤维)和一些微生物可利用的蛋白质而产生…

RabbitMQ 消息传递

消息何去何从 mandatory和immediate是channel.basicPublish方法中的两个参数&#xff0c;他们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。RabbitMQ提供的备份交换器可以将未能被交换器路由的消息&#xff08;没有绑定队列或者没有匹配的绑定&#xff09;存…

树莓派Pico

树莓派Pico是树莓派基金会推出的一款基于RP2040微控制器的微型计算机板&#xff0c;它是专为需要高性能微控制器的应用场景设计的&#xff0c;特别适合于需要实时控制、低功耗和小型化解决方案的项目。以下是树莓派Pico的详细介绍&#xff1a; ### 核心特点&#xff1a; - **基…

NAND闪存原厂铠侠加速推上市,预计10月完成IPO

NAND闪存原厂铠侠Kioxia拟趁着半导体市场回暖及企业财务状况显著提升的契机&#xff0c;加速推进其上市进程。 据报道&#xff0c;公司计划最快于8月底提交IPO申请&#xff0c;目标是在2024年10月末于东京证券交易所完成首次公开募股。此番上市动作不仅反映出市场复苏迹象&…

使用el-amap-info-window遇到的问题

使用的这个库https://github.com/yangyanggu/vue-amap 想要滚动amapInfoWindow里的内容&#xff0c;但不触发地图缩放 默认滚动amapInfoWindow里的内容&#xff0c;会触发地图缩放。看了C站一个大佬的文章解决了。 amapInfoWindow会自动滚动到顶部 我的amapInfoWindow里面用了…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于&#xff1a; PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 &#xff08;超全超详细&#xff09; 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm&#xff1f; 不同于c&#xff0c;c&#xff0…

Windows server 2016.2019 .NET Framework 3.5安装包、安装步骤

windows server2019 操作系统 安装 sqlserver2008时提示缺少 .NET Frameword 3.5&#xff0c; 在功能里选择 .NET Frameword 3.5安装报错&#xff0c; 下载安装包&#xff0c;下载地址 https://download.csdn.net/download/qq445829096/89450429这里指定备份源路径 安装包解…

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 &#xff08;1&#xff09;封装 &#xff08;2&#xff09;继承 &#xff08;3&#xff09;多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

韩顺平0基础学java——第32天

p638-652 Properties类 list&#xff1a;这个设备可以是一个流对象。 修改&#xff1a;如果该文件里没有Key&#xff0c;那即是创建&#xff0c;如果是有那就是修改。 继续坦克大战 防止敌人坦克重叠 满脑子都是今汐&#xff0c;亚达哟&#x1f62d;&#x1f62d;&#x1f6…

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2&#xff0c;将其和自己的2.5G交换机连接&#xff0c;使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿&#xff0c;几乎是几秒钟卡一下&#xff0c;使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…