来聊聊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.rhkb.cn/news/363408.html

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

相关文章

经验分享之会员 SaaS 系统

前言 2018年&#xff0c;这是不平凡的一年&#xff1b;互联网行业的中台战略、会员经济等模式如火如荼&#xff0c;同时也逐渐地走入我们公司每个人的视野。在南海集团的战略规划背景下&#xff0c;当时我所在的公司作为集团的研发中心&#xff0c;承担了对会员 SaaS 系统的建…

一个人 三个月 干了二十万

相信很多人是被这个标题吸引进来的&#xff0c;但我并不是标题党&#xff0c;我也很讨厌标题党&#xff0c;这篇文章也不在乎流量&#xff0c;更多的是想记录下。 出来创业三个多月了&#xff0c;给大家汇报一下这段时间的业绩吧。一个人&#xff0c;三个多月&#xff0c;干了…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

针对VMWare无法使用鼠标功能键问题

在使用 VMWare 虚拟机的Ubuntu系统时发现无法使用许多鼠标带有额外的功能键&#xff0c;比如常用的前进后退&#xff0c;但是双系统中的Ubuntu没有问题&#xff0c;后来一搜发现是&#xff0c;虚拟系统中不支持这些功能键。因此我们对这个问题进行了解决。 解决方案 1.找到自…

bable 【实用教程】

简介 bable 用于将 ES6 的语法编译为 ES5 只关心语法&#xff0c;不关心 API 是否正确。不处理模块化&#xff08;webpack 会处理&#xff09; 搭建开发环境 安装相关的包 npm i babel/cli babel/core babel/preset-env新建文件 .babelrc&#xff0c;内容为 { "presets…

已解决javax.transaction.InvalidTransactionException:事务无效的正确解决方法,亲测有效!!!

已解决javax.transaction.InvalidTransactionException&#xff1a;事务无效的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 1. 确保事务的正确启动和结束 Spring中的事务管理 2. 避免嵌套事务问题…

Linux显示服务器Wayland切换到X11

1、临时切换 &#xff1a; 注销当前用户账户&#xff0c;返回到登录屏幕。 在登录屏幕上&#xff0c;选择您要登录的用户账户。 在输入密码之前&#xff0c;在登录屏幕的右下角可能有一个齿轮图标&#xff0c;点击它以展开更多选项。 在选项中选择“Ubuntu on Xorg”或“Ubu…

【uml期末复习】统一建模语言大纲

前言&#xff1a; 关于uml的期末复习的常考知识点&#xff0c;可能对你们有帮助&#x1f609; 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 UML概述 第四章 用例图 第五章 类图 第六章 对象图 第七章 顺序图 第八章 协作图 第九章 状态…

【应用开发二】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…

基于java语言+springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码

基于java语言springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码 一、智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。 1、基于规则推理的方法通过人工建立症状、疾病和科室之间的对应规则实现…

【uniapp】uniapp开发微信小程序入门教程

HBuilderx中uniapp开发微信小程序入门教程 一、 环境搭建 1. HBuilderx下载安装 HBuilderx下载安装地址 2. 微信开发者工具下载安装 微信开发者工地址具下载安装 二、创建uniapp项目 选择&#xff1a;文件>新建>项目>uni-app 输入项目名称>选择默认模板>…

GPT-5

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术突破预测 &#x1f348;算法进步 &#x1f348;理解力提升 &#x1f348;行业推动力 &#x1f349;人机协作的未来 &#x1f348;辅助决策 &#x1f348;增强创造力 &#x1f348;复杂任务中的角色 &#x1f348;人…

Unity | Shader基础知识(番外:模型的制作流程)

目录 一、前言 二、模型的诞生 三、模型的表面 四、模型的贴图 五、上完材质的模型 六、材质的来源 七、作者的碎碎念 一、前言 up发现&#xff0c;初学程序&#xff0c;除非你是美术&#xff0c;模型出生&#xff0c;要不然对这些都是萌萌哒&#xff08;蒙蒙哒&#x…

鸿蒙北向开发 ubuntu20.04 gn + ninja环境傻瓜式搭建闭坑指南

ninja跟gn都是比较时髦的东西,由歪果仁维护,如果走下载源码并编译这种流程的话需要走github跟google官网下载,国内的用网环境相信各位傻瓜都知道,github跟google这几年基本是属于连不上的状态,好在你看的鸿蒙项目跟国内的一些软件大厂已经帮你爬过梯子了,ninja工具跟gn工具已经…

十步学习法,赋能程序员

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

MySQL高级-SQL优化-小结

文章目录 1、insert 优化2、主键优化3、order by 优化4、group by 优化5、limit 优化6、count 优化7、update 优化 1、insert 优化 insert&#xff1a;批量插入、手动控制事务、主键顺序插入 大批量插入&#xff1a;load data local infile 2、主键优化 主键长度尽量短、顺序插…

unity 导入的模型设置讲解

咱们先讲Model这一栏 Model Scene&#xff1a;场景级属性&#xff0c;例如是否导入灯光和照相机&#xff0c;以及使用什么比例因子。 Scale Factor&#xff1a;缩放因子&#xff08;也就是模型导入后大小如果小了或者大了在这里直接改是相当于该模型的大小的&#xff0c;而且在…

如何打造安全DNS以保障业务可用?一文解读

DNS自1987年被实施以来&#xff0c;已成为网络通信中最重要的核心基础设施&#xff0c;同时也是企业对外提供数字服务的关键。没有正常安全的DNS服务&#xff0c;企业经营也就无从谈起。在DNS攻击逐年上升且容易被忽略的现代应用时代&#xff0c;如何打造安全DNS&#xff1f;本…

LLaMA2模型训练加速秘籍:700亿参数效率提升195%!

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID &#xff5c; 计算机视觉研究院 学习群 &#xff5c; 扫码在主页获取加入方式 开源地址&#xff1a;https://github.com/hpcaitech/ColossalAI 计算机视觉研究院专栏 Column of Computer Vision Ins…

mov和mp4区别是什么?苹果的原创和时代的宠儿

在数字媒体领域&#xff0c;视频格式的选择往往决定了观看体验的质量和文件的兼容性。在众多视频格式中&#xff0c;MOV和MP4无疑是最具代表性的两种&#xff0c;它们分别承载着苹果和互联网世界的技术革新与历史变迁。本文将带您穿越时间的长廊&#xff0c;探索MOV与MP4的发展…