配置中心一般用于微服务中,当单一系统被拆分成分布式系统上的一个个服务节点之后,系统的配置文件也需要被拆分。配置中心就是将配置文件从系统中分离出来,对系统配置进行统一的管理,并且系统配置远程被修改后,应用还可以主动获取修改后的配置内容,应用自身不需要自己去管理系统配置。
简单来说,就是把Springboot的yml等配置文件放在远程管理,由Springboot主动获取。
配置特点 | 描述 | |
1 | 配置是独立于程序的只读变量 | 读取配置来改变自己的行为 |
2 | 配置伴随应用的整个生命周期 | 配置贯穿应用整个生命周期 |
3 | 配置可以有多种加载方式 | 可通过配置文件、环境变量、启动参数、数据库等方式加载 |
4 | 配置需要治理 | 区分开发、测试、生产;区分不同的集群 |
配置中心特性 | |
1 | 配置项容易读取和修改 |
2 | 分布式环境下应用配置的可管理性,即提供远程管理配置的能力 |
3 | 致辞对配置的修改的检视以把控风险 |
4 | 可以查看配置修改的历史记录 |
5 | 不同部署环境下应用配置的隔离性 |
Nacos致力于帮助您发现、配置和管理微服务。它是阿里的一个开源产品,是针对微服务架构中的服务发现,配置管理,服务治理的综合型解决方案,能帮助更加敏捷和容易地构建、交付和管理微服务平台。
Nacos特性 | 描述 | |
1 | 服务发现与服务健康检查 | 更容易注册,通过DNS或HTTP接口发现服务;实时对服务进行健康检查 |
2 | 动态配置管理 | 消除了在更新配置时重新部署应用程序,这使配置的更新更加高效和灵活 |
3 | 动态DNS服务 | 提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现 |
4 | 服务和元数据管理 | 可以从微服务平台视角,管理数据中心的所有服务及元数据 |
对比项目 | 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-server-1.1.4https://www.aliyundrive.com/s/2cUubQYMSX9
本地地址 | http://127.0.0.1:8848/nacos/index.html |
账号密码 | 账号:nacos 密码:nacos |
127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld |
单机模式下,Nacos默认使用嵌入式数据库实现数据的存储,若想使用外部Mysql存储Nacos数据,需要进行以下步骤:
MySQL:5.6.5+,MySQL 8 以下
初始化MySQL数据库名,将nacos-mysql.sql导入
spring.datasource.platform=mysql |
4.0.0
com.dgs
Nacos01
1.0-SNAPSHOT
8
8
com.alibaba.nacos
nacos-client
1.1.3
对于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)或配置集。
将应用分解为小的、相互连接的微服务,避免了开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。
一个微服务一般完成某个特定的功能,比如订单服务、用户服务等等。每一个微服务都是完整应用,都有自己的业务逻辑和服务
4.0.0
com.dgs
NacosTest
1.0-SNAPSHOT
pom
8
8
UTF‐8
UTF‐8
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR3
pom
import
org.springframework.boot
spring-boot-dependencies
2.1.3.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
NacosTest
com.dgs
1.0-SNAPSHOT
4.0.0
Nacos1
8
8
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-web
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: shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties refreshable‐dataids: ext‐config‐common01.properties |
A、通过内部相关规则(应用名、扩展名) 自动生成相关的Data Id配置
B、多个扩展Data Id
C、多个共享Data Id
A>B>C