Nacos理论知识+应用案例+高级特性剖析

news2024/10/5 15:32:22

一、理论知识

Nacos功能

Nacos常用于注册中心、配置中心

Nacos关键特性

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

        nacos作为服务注册中心可用于服务发现,并支持传输层(TCP)和应用层(HTTP)的健康检查,并提供了agent上报和nacos server端主动探测两种模式,另外还有统一的Dash Board。

2、动态配置中心

        nacos可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置,消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷

3、动态DNS服务

        nacos支持内网的简单DNS解析服务,以及以DNS协议为基础的服务发现

4、服务及其元数据管理

        nacos能管理数据中心的所有服务及元数据,包括:服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务SLA以及 metrics统计数据

Nacos中的数据模型

数据由三元组确定:

        Namespace

        Group

        Service或者DataId

Namespace即命名空间,公共命名空间是public

Group即分组,默认分组是DEFAULT_GROUP

service即服务的名称(服务注册的时候)、Datald即配置文件ID(可以理解为配置文件名)

二、应用案例

作为注册中心

1、添加Maven坐标

<!--nacos-discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

2、配置bootstrap.yml

bootstrap.ymlbootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等。

application.ymlapplication.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

bootstrap.yml 先于 application.yml加载。

项目中如果使用Nacos,需要使用bootstrap.yml,因此我们需要将项目中的application.yml换成bootstrap.yml

因为创建bootstrap.yml文件并配置以下内容

spring:
  application:
    name: 服务名
  cloud:
    nacos:
      discovery:
        # nacos 服务注册地址
        server-addr: ip:8848
        namespace: 等等

3、开启@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient //开启nacos服务发现
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

作为配置中心

1、添加Maven坐标

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

2、在bootstrap.yml文件中进行配置

在配置之前,需要讲解nacos配置中心dataId的组成。

托管到nacos server侧的配置都有一个唯一的key: namespace/group/dataId,接下来就是在应用端配置自己应用要读取的配置dataId,nacos的SDK根据该dataId去nacos server获取配置一个配置文件内容,而dataId的组成是:

        ${prefix}-${spring.profiles.active}.${file-extension}

  • prefix默认为spring.app1lication.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的profile,详情可以参考Spring Boot文档。
    (注意:当spring.profiles.active为空时,对应的连接符–也将不存在,datald的拼接格式变成${prefix}.${file-extension})
  • fie-exetension为配置内容的数据格式,可以通过配置项 spring.c1oud.nacos.config.file-extension来配置。目前只支持 properties和yaml类型。
spring:
  application:
    name: 服务应用名
  cloud:
    nacos:
      discovery:
        # nacos 服务注册地址
        server-addr: ip:8848
        weight: 1
        # 指定命名空间的id
        namespace: 1ebba5f6-49da-40cc-950b-f75c8f7d07b3
      config:
        server-addr: ip:8848
        # 指定命名空间的id
        namespace: 1ebba5f6-49da-40cc-950b-f75c8f7d07b3
        # 如果将配置信息保存到nacos,指定配置文件扩展名
        file-extension: yaml
        # nacos config dataid name 默认加载 ${spring.application.name}.${file-extension},当然也可指定
        #name: 服务应用名.yaml

3、在nacos中添加配置

4、多环境切换

如:spring.application.name=demo

那么nacos新建demo.yaml、demo-test.yaml、demo-dev.yaml

则在boostrap.yml中的spring.profiles.active值是啥,那就对应去找哪个环境的配置文件

5、共享配置

一些公共配置,需要多个服务共用的,可以配置成共享配置

在bootstrap.yml中引入共享配置需要使用shared-configs属性,配置如下:

6、自动刷新配置 

nacos的配置,修改之后,项目会自动刷新读取到最新的配置,而无需重启项目。

原理如下:

spring-cloud-starter-alibaba-nacos-config 支持配置的动态更新,Environment能实时更新到最新的配置信息。

Spring的applicationContext中有一个environment可以对Spring容器中的配置做一些操作,当nacos的配置修改之后,其底层就是调用environment来操作修改配置的。

程序中如果写了@Value注解,可以采用@RefreshScope实现刷新,只需要在指定类上添加该注解即可,如下代码:

@RestController
@RequestMapping(value = "/demo")
@RefreshScope
public class DemoController {

    @Value("${app.version}")
    private String version;
    @Value("${app.name}")
    private String appname;

    @GetMapping("/appinfo")
    public String getAppInfo() {
        return appname + ";"+version;
    }
}

7、灰度发布

        灰度配置指的是指定部分客户端IP进行新配置的下发,其余客户端配置保持不变,用以验证新配置对客户端的影响,保证配置的平稳发布。灰度配置是生产环境中一个比较重要的功能,对于保证生产环境的稳定性非常重要。在1.1.0中,Nacos支持了以IP为粒度的灰度配置,具体使用步骤如下:

Nacos集群搭建 

1)直连模式

http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。

比如我现在有3个Nacos,每次操作数据的时候,都需要使用IP:端口的模式,这种模式效率极低,并且一旦节点故障无法识别,因此官方不推荐这种模式。

2)VIP模式

http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。

3)域名模式

http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,因此官方推荐该模式,该模式的结构图如下:

 实现步骤:

对于方式3:

先在linux上搭建好相关的nacos集群结点

接下来就要用nginx反向代理,负载均衡到集群的结点

 接下来配置nginx域名

三、高级特性

Nacos服务领域模型

服务:一组功能集的抽象namespace, group, serviceName标识一个服务

实例:服务在具体IP,端口上的提供者应用启动时的注册就是注册某个服务的实例

集群:服务之下,实例之上的中间层,便于统一管理实例集(默认是DEFAULT)

其中,Nacos的实例分为临时实例持久实例

临时实例:nacos server在该实例健康检查失败一定时间后会主动摘除它,且实例数据不持久化

持久实例:实例数据持久化,nacos server在该实例健康检查失败后并不摘除该实例,除非客户端主动销毁

  • nacos默认的实例类型是临时实例,可以更改
  • 临时实例的应用场景大多都是上层的服务,比如:SpringCloud服务,dubbo服务等
  • 持久实例的应用场景是一些基础的组件,例如:数据库,缓存等【想以服务的形式对外提供】
  • 临时实例和持久实例在健康检查上的方式不一样:
                 
    临时实例使用客户端上报模式【心跳】
                 持久化实例使用服务端反探测模式

Nacos健康检查机制 

 

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

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

相关文章

数据结构——List接口

文章目录 一、什么是List&#xff1f;二、常见接口介绍三、List的使用总结 一、什么是List&#xff1f; 在集合框架中&#xff0c;List是一个接口&#xff0c;通过其源码&#xff0c;我们可以清楚看到其继承了Collection。 Collection 也是一个接口&#xff0c;该接口中规范了后…

启动redis

1. 进入root的状态&#xff0c;sudo -i 2. 通过sudo find /etc/redis/ -name "redis.conf"找到redis.conf的路径 3. 切换到/etc/redis目录下&#xff0c;开启redis服务 4. ps aux | grep redis命令查看按当前redis进程&#xff0c;发现已经服务已经开启 5.关闭服务…

如何使用WPS软件里的AI工具?

在wps文档中随机位置&#xff0c;按两下键盘上的【CTRL】键&#xff0c;唤醒AI工具 然后&#xff0c;输入想要的问题后&#xff0c;按下【回车】&#xff0c;就会生成答案在文档中 如果答案是自己喜欢的&#xff0c; 则选择【保留】&#xff0c;即可保存在文档中 如果答案不是…

Arthas(阿尔萨斯)

Arthas Arthas可以为你做什么&#xff1f; 安装下载 //Linux环境下 wget https://alibaba.github.io/arthas/arthas-boot.jar //Windows环境下可以直接去官网下载压缩包 https://arthas.aliyun.com/doc/download.html//启动命令 java -jar arthas-boot.jar 启动阿尔萨斯&#…

使用Conda管理python环境的指南

1. 准备 .yml 文件 确保你有一个定义了 Conda 环境的 .yml 文件。这个文件通常包括环境的依赖和配置设置。文件内容可能如下所示&#xff1a; name: myenv channels:- defaults dependencies:- python3.8- numpy- pandas- scipy- pip- pip:- torch- torchvision- torchaudio2…

【我的 PWN 学习手札】tcache stash unlink

目录 前言 一、相关源码 二、过程图示 1. Unlink 过程 2. Tcache stash unlink 过程 三、测试与模板 1. 流程实操 2. 相关代码 前言 tcache stashing unlink atttack 主要利用的是 calloc 函数会绕过 tcache 从smallbin 里取出 chunk 的特性。并且 smallbin 分配后&…

IP 数据包分包组包

为什么要分包 由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包. 什么是MTU MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制. • 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充…

【ONE·Web || HTML】

总言 主要内容&#xff1a;HTML基本知识入门&#xff0c;主要介绍了常见的一些标签使用&#xff0c;以及简单案例演示。       文章目录 总言0、前置说明1、认识HTML1.1、是什么1.2、初识 HTML 标签、HTML 文件基本结构1.2.1、相关说明1.2.2、vscode如何快速生成代码 2、HT…

实时数仓分层架构超全解决方案

传统意义上的数据仓库主要处理T1数据&#xff0c;即今天产生的数据分析结果明天才能看到&#xff0c;T1的概念来源于股票交易&#xff0c;是一种股票交易制度&#xff0c;即当日买进的股票要到下一个交易日才能卖出。 随着互联网以及很多行业线上业务的快速发展&#xff0c;让…

【精】Java编程中的Lambda表达式与Stream API

一、引言 随着Java 8的发布&#xff0c;引入了许多令人兴奋的新特性&#xff0c;其中最引人注目的就是Lambda表达式和Stream API。这些新功能不仅让Java这门语言更加现代化&#xff0c;而且也极大地提高了开发效率&#xff0c;使代码更加简洁、易读。本文将深入探讨Lambda表达…

Rust 做桌面应用这么轻松?Pake 彻底改变你的开发方式

Rust 做桌面应用这么轻松&#xff1f;Pake 彻底改变你的开发方式 网页应用装不下了&#xff1f;别担心&#xff0c;Pake 用 Rust 帮你打包网页&#xff0c;快速搞定桌面应用。比起动不动就 100M 的 Electron 应用&#xff0c;它轻如鸿毛&#xff0c;功能却一点都不少&#xff0…

案例-任务清单

文章目录 效果展示初始化面演示画面 代码区 效果展示 初始化面 演示画面 任务清单 代码区 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

Linux下的IO模型

阻塞与非阻塞IO&#xff08;Input/Output&#xff09; 阻塞与非阻塞IO&#xff08;Input/Output&#xff09;是计算机操作系统中两种不同的文件或网络通信方式。它们的主要区别在于程序在等待IO操作完成时的行为。 阻塞IO&#xff08;Blocking IO&#xff09; 在阻塞IO模式下…

付费计量系统通用功能(13)

11.17 Class 17: Security function Capability of maintaining the integrity of data elements, functions and processes. 数据单元、功能和过程的可靠性 Maintains the integrity of the system.系统的可靠 Some examples of security function at…

Meta推出Movie Gen 旗下迄今最先进的视频生成AI模型

Meta 今天发布了 MovieGen 系列媒体基础AI模型&#xff0c;该模型可根据文本提示生成带声音的逼真视频。 MovieGen 系列包括两个主要模型&#xff1a; MovieGen Video 和 MovieGen Audio。 MovieGen Video 是一个具有 300 亿个参数的变换器模型&#xff0c;可根据单个文本提示生…

一“填”到底:深入理解Flood Fill算法

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 floodfill算法是什么&#xff1f; 二 相关OJ题练习 2.1 图像渲染 2.2 岛屿数量 2.3 岛屿的最大面积 2.4 被围绕的区域 2.5 太平洋大西洋水流问题 2.6 扫雷游戏 2.7 衣橱整…

数据科学:Data+AI驾驭数据的智慧之旅

数据科学&#xff1a;DataAI驾驭数据的智慧之旅 前言一、数据存储计算二、数据治理三、结构化数据分析四、语音分析五、视觉分析六、文本分析七、知识图谱 前言 今天想和大家深入聊聊数据科学这个充满魅力又极具挑战的领域。在当今数字化时代&#xff0c;数据如同潮水般涌来&a…

掌握这一招,轻松用Vue和ECharts打造炫酷雷达图——详细教程指南

大家好&#xff0c;今天我要分享的是如何使用ECharts来绘制雷达图。雷达图是一种常用的数据可视化工具&#xff0c;特别适合展示多个量化指标的比较&#xff0c;也可以进行多维度用户行为分析。接下来&#xff0c;我将一步步教大家如何通过ECharts来实现这一效果。效果图如下&a…

mysql事务 -- 事务的隔离性(测试实验+介绍,脏读,不可重复读,可重复度读,幻读),如何实现(RR和RC的本质区别)

目录 事务的隔离性 引入 测试 读未提交 脏读 读提交 不可重复读 属于问题吗? 例子 可重复读 幻读 串行化 原理 总结 事务的隔离性 隔离性的理解 -- mysql事务 -- 如何理解事务,四个属性,查看是否支持事务,事务操作(提交方式,事务的开始和回滚,提交),事务的隔离…

(Django)初步使用

前言 Django 是一个功能强大、架构良好、安全可靠的 Python Web 框架&#xff0c;适用于各种规模的项目开发。它的高效开发、数据库支持、安全性、良好的架构设计以及活跃的社区和丰富的文档&#xff0c;使得它成为众多开发者的首选框架。 目录 安装 应用场景 良好的架构设计…