来聊聊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:latestcontainer_name: nacos1environment:- 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=yourpasswordports:- "8848:8848"depends_on:- dbnacos2:image: nacos/nacos-server:latestcontainer_name: nacos2ports:- "8847:8848"depends_on:- dbdb:image: mysql:5.7container_name: nacos-dbenvironment:- MYSQL_ROOT_PASSWORD=yourpassword- MYSQL_DATABASE=nacosvolumes:- ./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.mzph.cn/bicheng/37161.shtml

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

相关文章

混凝土搅拌站中的智能化系统应用

随着科技的飞速发展&#xff0c;混凝土搅拌站已经进入了现代化、智能化的新时代。现代自动化、智能化技术的应用&#xff0c;使得混凝土搅拌站更加高效、准确、可靠&#xff0c;同时也提高了生产效率和质量。本文将带你深入探索混凝土搅拌站中运用到现代自动化、智能化的方方面…

Java代码基础算法练习-删除有序数组中的重复项-2024.05.07

任务描述&#xff1a; 有一批同学需要计算各自的出生年月是否闰年。请使用算法计算出他们的出生年份是否闰年。 解决思路&#xff1a; 如果要一次性输出结果&#xff0c;就是先输入数字n&#xff0c;确定首先循环几次&#xff0c;在每次循环中进行闰年判断操作&#xff0c;每次…

国外的Claude3.5 Sonnet Artifacts和国内的CodeFlying孰强孰弱?

在Claude 3.5 Sonnet发布后&#xff0c;最受大家关注的问题应该就是它在编写代码能力上的变化。 要知道在Claude3.0发布以来的这几个月就因为它的编写代码能力而一直受到人们的诟病。 那Anthropic这次终于是不负众望&#xff0c;在Claude 3.5 Sonnet中更新了一个叫做Artifact…

【STM32】SysTick系统滴答定时器

1.SysTick简介 CM4内核的处理和CM3一样&#xff0c;内部都包含了一个SysTick定时器&#xff0c;SysTick 是一个24 位的倒计数定时器&#xff0c;当计到0 时 &#xff0c;将 从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除&#xf…

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系&#xff0c;优维重磅推出了统一开放平台。这款由优维自主设计与研发&#xff0c;集数据开发、能力开放、能力集成、客制化为一体的统一开放平台&#xff0c;具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块&#xff0c;可为…

【RNN练习】LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前期准备工作 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn1. 导入数据 data pd.read_cs…

LLM大模型实战 —— DB-GPT阿里云部署指南

简介&#xff1a; DB-GPT 是一个实验性的开源应用&#xff0c;它基于FastChat&#xff0c;并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理&#xff0c; 目前已支持SQL生…

慌慌张张,匆匆忙忙,又是学习的一天

今天学进程 进程的状态 &#xff08;本科的考点我记得哈哈&#xff09; 什么是线程 线程的状态 线程和进程的区别 一个共享 一个私有 独立 多线程的优缺点 线程的分类 内核支持线程 用户级线程 组合方式线程 协程coroutine 进程 分配资源的最小单位 线程 是cpu调度的最小…

Spring AI之后,阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI

阿里推出Spring Cloud Alibaba AI&#xff0c;接入体验篇——Java也能方便用 AI 1.Spring AI2.Spring Cloud Alibaba AI3. 接入体验 1.Spring AI Spring AI 是 Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 Java 开发者像使用 Spring 开发普通…

NSSCTF-Web题目18(反序列化)

目录 [NISACTF 2022]babyserialize 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]ez_ez_unserialize 4、题目 5、知识点 6、思路 [NISACTF 2022]babyserialize 1、题目 2、知识点 反序列化、绕过过滤、命令执行 3、思路 <?php include "waf.php";…

基于Vue,mysql,JavaEE的简单投票与投票管理系统

项目介绍 ​ 本项目&#xff0c;基于Vue2.6,mysql,JavaEE 实现简单的投票与投票管理系统 项目地址 VotingSystem: 投票系统1.0 管理员和普通用户 (gitee.com) 有问题请评论私聊哦 项目分类 数据库 创建投票人&#xff0c;被投票人&#xff0c;投票关系&#xff08;追踪谁…

float8格式

产生背景 在人工智能神经元网络中&#xff0c;一个参数用1字节表示即可&#xff0c;或者说&#xff0c;这是个猜想&#xff1a;因为图像的颜色用8比特表示就够了&#xff0c;所以说&#xff0c;猜想神经元的区分度应该小于256。 数字的分配 8比特有256个码位&#xff0c;分为…

【操作与配置】WSL配置LINUX

WSL2&#xff08;Windows Subsystem for Linux 2&#xff09;是Microsoft开发的一项技术&#xff0c;允许用户在Windows操作系统上运行Linux发行版。WSL2是WSL&#xff08;Windows Subsystem for Linux&#xff09;的第二版&#xff0c;带来了许多改进和新特性。 官网&#xff…

EXCEL 复制后转置粘贴

nodepad 转置参考&#xff1a; https://editor.csdn.net/md/?articleId140014651 1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置&#xff0c;如下图&#xff1a; 2. Excel office365 本地版 2. Excel office365 在线版

涨知识!推荐6个非常好用的App!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/我从 50 个应用程序中选出了 6 个超级实用的应用程序。 每款应用程序都是最核心、最有益的知识提升工具&#xff01;每天打开它们&#xff0c;提神…

Shell 脚本编程保姆级教程(上)

一、运行第一个 Shell 脚本 1.1 Shell 脚本 Shell 脚本&#xff08;shell script&#xff09;&#xff0c;是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本&#xff0c;但读者朋友要知道&#xff0c;shell 和 shell script 是两个不同的概念。 由…

PS的图片切图

这个功能呢是在一个图片中取出你想用的图标或图片。 我们首先下载一个PS工具&#xff1a; 然后打开应用&#xff0c; 在左侧有个一切片工具&#xff0c;我们左键选中他&#xff0c; 然后就可以在你的图片里进行划区域选取你所要选取的图片了&#xff0c; 当你选取完之后点击文…

Servlet工作原理

Servlet 工作原理 编写Servlet 创建servlet 创建一个MyServlet继承HttpServlet&#xff0c;重写doGet和doPost方法&#xff0c;也就是看请求的方式是get还是post&#xff0c;然后用不同的处理方式来处理请求&#xff0c; 2. 配置Servlet //添加参数 <servlet><se…

使用巴比达内网穿透搭建本地Web项目访问环境【免费方案】

你是否曾经遇到过这样的问题&#xff1a;你的服务器或者个人电脑处于内网环境中&#xff0c;无法直接通过公网IP进行访问&#xff1f;今天我要向大家推荐一款神器——巴比达内网穿透工具&#xff0c;帮助你轻松搭建SpringBoot的web外网访问环境&#xff01; 巴比达内网穿透是一…

浅谈API生态建设:API安全策略的6项原则

API作为连接系统与应用的桥梁&#xff0c;在助力实现高效业务流程的同时&#xff0c;也不可避免出现资产管理困难、敏感数据泄漏风险骤增等安全问题。前段时间&#xff0c;安全公司Fastly公布了一项重磅调查报告&#xff0c;报告中显示95%的企业在过去1年中遭遇过API安全问题。…