Nacos - 配置管理
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数,启动参数等。配置主要有以下几个特点:在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须要跟着迁移(分割),这样配置就分散了,不仅如此,分散中还不包含着冗余。配置中心将配置从各应用中剥离出来,对配置进行统一管理,然后让应用主动去获取,应用自身不需要
笔记翻译出处:黑马Nacoshttps://www.bilibili.com/video/BV1VJ411X7xX?p=17&spm_id_from=333.880.my_history.page.click&vd_source=3c0d9a4d48df5bf76352d1653111b1d7
一、配置中心
1、简述
配置中心一般用于微服务中,当单一系统被拆分成分布式系统上的一个个服务节点之后,系统的配置文件也需要被拆分。配置中心就是将配置文件从系统中分离出来,对系统配置进行统一的管理,并且系统配置远程被修改后,应用还可以主动获取修改后的配置内容,应用自身不需要自己去管理系统配置。
简单来说,就是把Springboot的yml等配置文件放在远程管理,由Springboot主动获取。
2、特性
1)配置特点
配置特点 | 描述 | |
1 | 配置是独立于程序的只读变量 | 读取配置来改变自己的行为 |
2 | 配置伴随应用的整个生命周期 | 配置贯穿应用整个生命周期 |
3 | 配置可以有多种加载方式 | 可通过配置文件、环境变量、启动参数、数据库等方式加载 |
4 | 配置需要治理 | 区分开发、测试、生产;区分不同的集群 |
2)配置中心特性
配置中心特性 | |
1 | 配置项容易读取和修改 |
2 | 分布式环境下应用配置的可管理性,即提供远程管理配置的能力 |
3 | 致辞对配置的修改的检视以把控风险 |
4 | 可以查看配置修改的历史记录 |
5 | 不同部署环境下应用配置的隔离性 |
二、Nacos
1、Nacos简介
Nacos致力于帮助您发现、配置和管理微服务。它是阿里的一个开源产品,是针对微服务架构中的服务发现,配置管理,服务治理的综合型解决方案,能帮助更加敏捷和容易地构建、交付和管理微服务平台。
2、Nacos特性
Nacos特性 | 描述 | |
1 | 服务发现与服务健康检查 | 更容易注册,通过DNS或HTTP接口发现服务;实时对服务进行健康检查 |
2 | 动态配置管理 | 消除了在更新配置时重新部署应用程序,这使配置的更新更加高效和灵活 |
3 | 动态DNS服务 | 提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现 |
4 | 服务和元数据管理 | 可以从微服务平台视角,管理数据中心的所有服务及元数据 |
3、配置中心对比
对比项目 | Spring Cloud Config | Apollo | Nacos |
配送实时推送 | 支持(Spring Cloud Bus) | 支持(HTTP长轮询1S内) | 支持(HTTP长轮询1S内) |
版本管理 | 支持(Git) | 支持 | 支持 |
配置回滚 | 支持(Git) | 支持 | 支持 |
灰度发布 | 支持 | 支持 | 不支持 |
权限管理 | 支持(依赖Git) | 支持 | 不支持 |
多集群 | 支持 | 支持 | 支持 |
多环境 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 |
多语言 | 支持Java | 主流语言,Open API | 主流语言,Open API |
配置格式校验 | 不支持 | 支持 | 支持 |
单机读(QPS) | 7(限流所致) | 9000 | 15000 |
单机写(QPS) | 5(限流所致) | 1100 | 1800 |
3节点读(QPS) | 21(限流所致) | 27000 | 45000 |
3节点写(QPS) | 5(限流所致) | 3300 | 5600 |
三、Nacos快速入门
1、安装包
nacos-server-1.1.4https://www.aliyundrive.com/s/2cUubQYMSX9
2、启动服务器
3、界面访问
本地地址 | http://127.0.0.1:8848/nacos/index.html |
账号密码 | 账号:nacos 密码:nacos |
4、OPEN API 配置管理测试
1)用ApiPost或者Postman发布配置请求
127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld |
2)界面查看配置
5、Nacos连接外部Mysql存储
单机模式下,Nacos默认使用嵌入式数据库实现数据的存储,若想使用外部Mysql存储Nacos数据,需要进行以下步骤:
1)安装数据库
MySQL:5.6.5+,MySQL 8 以下
2)初始化数据库
初始化MySQL数据库名,将nacos-mysql.sql导入
3)修改配置文件application.properties
spring.datasource.platform=mysql |
四、Nacos配置入门
1、发布配置[界面操作]
2、Nacos客户端获取配置[入门]
1)新建Maven项目
2)pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dgs</groupId>
<artifactId>Nacos01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
</project>
五、Nacos配置管理模型
对于Nacos配置管理,通过Namespace、group、Data ID 能够定位到一个配置集
配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个意义的名称,就是配置集的ID,即Data ID。
配置项(配置内容)
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以key=value的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR)就是一个配置项。
配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串(如Buy或Trade)来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您再Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。配置分组的常见场景:可用于区分不同的项目或应用。
命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为他们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个Nacos管理各自的配置,可通过哟namespace隔离,不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。
六、Nacos配置管理应用于分布式系统
1、微服务架构
将应用分解为小的、相互连接的微服务,避免了开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。
一个微服务一般完成某个特定的功能,比如订单服务、用户服务等等。每一个微服务都是完整应用,都有自己的业务逻辑和服务
2、分布式应用配置管理
- 用户通过Nacos Server的控制台集中对多个服务的配置进行管理。
- 各服务统一从Nacos Server中获取各自的配置,并监听配置的变化。
3、Nacos整合Springboot
1)新增命名空间dev
2)在dev命名空间发布两个配置
① Nacos1.yaml②Nacos2.yaml
3)创建Maven父工程
4)Maven版本配置
5)Maven父工程添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dgs</groupId>
<artifactId>NacosTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 后面加入子工程,pom依赖中就会有这个
<modules>
<module>Nacos1</module>
<module>Nacos2</module>
</modules>-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
6)新建子工程Nacos1
7)子工程Nacos1添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>NacosTest</artifactId>
<groupId>com.dgs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Nacos1</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
8)Nacos1子工程,新增配置文件
9)Nacos1子工程,添加Springboot启动类
10)Nacos1子工程,添加Controller,获取远程Nacos配置文件内容
11)启动测试
12)新增子工程Nacos2,同Nacos1
13)新增子工程Nacos2的配置文件
14)新增子工程Nacos2启动类
15)Nacos2子工程,添加Controller,获取远程Nacos配置文件内容
16)启动测试
4、自定义扩展的 Data Id 配置
Spring Cloud Alibaba Nacos Config 可支持自定义的Data Id 的配置。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
spring: application: name: service2 cloud: nacos: config: server‐addr: 127.0.0.1:8848 # config external configuration # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新 ext‐config[0]: data‐id: ext‐config‐common01.properties # 2、Data Id 不在默认的组,不支持动态刷新 ext‐config[1]: data‐id: ext‐config‐common02.properties group: GLOBALE_GROUP # 3、Data Id 既不在默认的组,也支持动态刷新 ext‐config[2]: data‐id: ext‐config‐common03.properties group: REFRESH_GROUP refresh: true |
- 通过spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个Data Id的配置
- 通过spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义Daya Id 所在的租,默认DEFAULT_GROUP
- 通过spring.cloud.nacos.config.ext-config[n].refresh的配置方式来控制该Data Id 在配置变更时,是否支持应用中科动态刷新,感知到最新的配置值。默认是不支持
5、自定义共享 Data Id 配置
spring: cloud: nacos: config: shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties refreshable‐dataids: ext‐config‐common01.properties |
- 通过spring.cloud.nacos.config.shared-dataids 来支持多个共享Data Id的配置,多个之前用逗号隔开。
- 通过spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的Data Id 在配置变化时,应用中是否可动态刷新,感知到最新的配置值,多个Data ID 之间用逗号隔开。如果没明确配置,默认都不支持动态刷新
- 它把group固定为DEFAULT_GROUP
6、配置优先级
A、通过内部相关规则(应用名、扩展名) 自动生成相关的Data Id配置
B、多个扩展Data Id
C、多个共享Data Id
A>B>C
更多推荐
所有评论(0)