来聊聊nacos

先关注下下方公众号呗:

在这里插入图片描述

第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);
}));

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

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

相关文章

【小程序静态页面】猜拳游戏大转盘积分游戏小程序前端模板源码

猜拳游戏大转盘积分游戏小程序前端模板源码&#xff0c; 一共五个静态页面&#xff0c;首页、任务列表、大转盘和猜拳等五个页面。 主要是通过做任务来获取积分&#xff0c;积分可以兑换商品&#xff0c;也可用来玩游戏&#xff1b;通过玩游戏既可能获取奖品或积分也可能会消…

Linux libreoffice安装 word转pdf 中文乱码(缺少字体解决)

libreoffice 的安装 yum install -y libreoffice版本验证 libreoffice --version参考文章 word转pdf 命令 转换命令 要将Word文档(.doc或.docx)转换为PDF格式&#xff0c;可以使用以下命令&#xff1a; libreoffice --headless --convert-to pdf your_word_document.docx指…

MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.

【问题描述】 MySQL 8.4版本&#xff0c;配置用户使用mysql_native_password认证插件验证用户身份&#xff0c;报错&#xff1a; 【解决方法】&#xff08;Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini&#xff0c;在[mysqld]段添加mysql_native_passwordON。 2、管理员…

vue3中获取Excel和csv文件中的内容

1.效果 2.安装 npm install xlsxyarn add xlsx 3.引入使用 <el-upload ref"uploadRef" :on-change"changeFile" :show-file-list"false" class"mr10" accept".csv, .xlsx, .xls"action"#" :auto-upload&quo…

center()方法——字符串居中填充

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 字符串对象的center()方法用于将字符串填充至指定长度&#xff0c;并将原字符串居中输出。center()方法的语法格式如下&#xff1a; str.…

php 通过vendor文件 生成还原最新的composer.json

起因&#xff1a;因为历史原因&#xff0c;在本项目中composer.json基本算废了&#xff0c;没法直接使用composer管理扩展&#xff0c;今天尝试修复一下composer.json。 历史文件&#xff0c;可以看出来已经很久没有维护了&#xff0c;我们主要是恢复require的信息 {"na…

Kubernetes 之GVR与GVK详解

本文尝试从GVR与GVK对比、常见的GVR和GVK操作、GVK设计精髓、CRD工作流程等方面对GVK和GVR进行详细分析。希望对您有用&#xff01; 一、Kubernetes 之GVR与GVK对比 在 Kubernetes 中&#xff0c;GVR 和 GVK 是两个重要的概念&#xff0c;用于唯一标识和操作不同的资源类型和…

香港服务器托管对外贸行业必要性和优势

在当今全球化的经济环境下&#xff0c;外贸企业面临着前所未有的机遇与挑战。其中&#xff0c;服务器托管的选择对于外贸企业的运营效率和市场拓展具有举足轻重的作用。香港服务器&#xff0c;凭借其独特的地理位置、优质的网络环境和卓越的服务性能&#xff0c;一直是外贸企业…

基于改进天鹰优化算法(IAO)优化BP神经网络数据分类预测(IAO-BP)

改进天鹰优化算法(IAO)见&#xff1a;【智能优化算法】改进的AO算法(IAO)-CSDN博客 BP神经网络的数据分类预测&#xff1a;基于BP神经网络的数据分类预测-CSDN博客 代码原理 基于改进天鹰优化算法&#xff08;IAO&#xff09;优化BP神经网络数据分类预测&#xff08;IAO-BP&…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等&#xff0c;取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行&#xff08;…

Linux命令 wc(word count)-l(lines)用于统计文件中的行数。

文章目录 1、wc -l2、实战3、wc --help 1、wc -l 在命令 wc -l 中&#xff0c;-l 的英文全称是 lines。这个选项用于指定 wc&#xff08;word count&#xff0c;单词计数&#xff09;命令来统计文件的行数。 例如&#xff0c;当你运行 wc -l load_user_100w_sort.sql 时&…

探索CSS布局:创建一个居中的内嵌方块示例

在网页设计中&#xff0c;布局是至关重要的部分。CSS提供了多种方式来实现元素的布局&#xff0c;包括居中对齐、外边距、内边距等。本文将通过一个简单的示例&#xff0c;介绍如何使用CSS来创建一个居中的内嵌方块&#xff0c;并探讨其背后的布局原理。 HTML 结构 首先&…

BLACKBOX.AI:解锁开发新纪元,加速编程学习的AI神器!

文章目录 &#x1f4af;BLACKBOX.AI 官网&#x1f341;1 BLACKBOX.AI 工具使用教程&#x1f341;2 BLACKBOX.AI工具使用界面介绍&#x1f341;3 Chat(聊天)功能&#x1f341;4 Explore (探索)功能&#x1f48e;4.1 Terminal(终端)功能&#x1f48e;4.2 Discover(发现)功能&…

SpringBoot——整合Shiro,实现安全认证和权限管理功能

目录 Shiro 项目总结 新建一个SpringBoot项目 pom.xml application.properties&#xff08;配置文件&#xff09; User&#xff08;实体类&#xff09; UserMapper&#xff08;数据访问层接口&#xff09; UserMapper.xml&#xff08;数据库映射文件&#xff09; User…

第1章 物联网模式简介---物联网概述

物联网模式简介 物联网&#xff08;IoT&#xff09;在最近几年获得了巨大的吸引力&#xff0c;该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业&#xff0c;包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

【2024大语言模型必知】做RAG时为什么要使用滑动窗口?句子窗口检索(Sentence Window Retrieval)是什么?

目录 1. 传统的向量检索方法&#xff0c;使用整个文档检索&#xff0c;为什么不行&#xff1f; 2.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;工作原理 3.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;的优点 1. 传统的向量检…

我在高职教STM32——时钟系统与延时控制(1)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

十步学习法,赋能程序员

大家好&#xff0c;我是码农先森。 引言 最近看了《软技能&#xff1a;代码之外的生存指南》这本书&#xff0c;对其中的 “十步学习法”。 有一些感触&#xff0c;所以将其中的内容记录并总结了下来&#xff0c;分享给大家。 程序员在学习成长的过程中&#xff0c;除了关注…

Andorid Studio SSL peer shut down incorrectly

当我们打开Android Studio创建项目的时候&#xff0c;发现Gradle构建项目&#xff0c;下载依赖的速度非常之慢&#xff0c;那么聪明的我们会设置Android Studio的Proxy代理&#xff0c;如下&#xff01; 然后幸运的你可能下载速度会变快&#xff0c;但是也可能会有其他异常&…

3.x86游戏实战-寄存器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;2.x86游戏实战-跨进程读取血量 寄存器说明&#xff1a; 寄存器是处理器的一部&…