1.什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节后,配置文件也必须跟着迁移(分割) ,这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自身去管理配置
配置中心的服务流程如下
2.Nacos
2.1 对比
目前市面上用的比较多的配置中心有: Spring Cloud Config、Apollo、 Nacos和Disconf等。
由于Disconf不再维护,下面主要对比一下Spring Cloud Config、Apollo和Nacos.
从配置中心角度来看,性能方面Nacos的读写性能最高, Apollo次之, Spring Cloud Config依赖Git场景不适
开放的大规模自动化运维API。功能方面Apollo最为完善, nacos具有Apollo大部分配置管理功能,而Spring
Cloud Config不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操
作相比Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。
2.2 概念
Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
官方介绍是这样的:
Nacos致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单 易用的特性集,帮助您实现动态服务
发现、服务配置管理、服务及流量管理。
Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构
的服务基础设施。
2.3 特性
2.3 Nacos特性
Nacos主要提供以下四大功能:
- 服务发现与服务健康检查
Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务, Nacos还提供服务的实时健康检查,以防
止向不健康的主机或服务实例发送请求。 - 动态配置管理
动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除 了在更新配置时重新
部署应用程序,这使配置的更改更加高效和灵活。 - 动态DNS服务
Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos.上的服务以域
名的方式暴露端点,让三方应用方便的查阅及发现。 - 服务和元数据管理
Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周
期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。
3. 安装
3.1 官网下载压缩包,解压
3.2 修改配置文件
- startup.cmd
set MODE="standalone"
- 修改环境和系统变量,都要有JAVA_HOME
3.3 运行
http://localhost:8848/nacos
账号密码nacos
4.Nacos配置管理模型
对于Nacos配置管理,通过Namespace、group、DataID能够定位到一个配置集。
- 配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配
置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的
ID即Data ID。 - 配置项
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数 与其值域,通常以key=value
的形式存在。例如我们常配置系统的日志输出级别( logLevel=INFO |WARN|ERROR)就是一个 配置项。 - 配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串(如Buy或Trade )来表示,不同的配置分组下可
以有相同的配置集( DatalD)。当您在Nacos.上创建一个配置时 ,如果未填写配置分组的名称,则配置分组的名
称默认采用DEFAULT_ GROUP。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配
置集可以定义一个group为: STUDENT _GROUP。 - 命名空间(Namespace)
命名空间( namespace )可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,
因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通
过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。 - 最佳实践
Nacos抽象定义了Namespace、Group、 Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成
什么,这里推荐给大家-种用法,如下图:
Namespace :代表不同环境,如开发、测试、生产环境。
Group :代表某项目,如XX医疗项目、XX电商项目
Datald :每个项目下往往有若干个工程,每个配置集(Datald)是一个工程的主配置文件 - namespace隔离设计
namespace的设计是nacos基于此做多环境|以及多租户(多个用户共同使用nacos )数据(配置和服务)隔离的。
从一个租户(用户)的角度来看,如果有多套不同的环境, 那么这个时候可以根据指定的环境来创建不同的
namespce ,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套
nacos集群可以分别建以下三个不同的namespace。如下图所示:
5.配置测试
- pom.xml
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.3</version>
</dependency>
public static void main(String[] args) throws Exception {
String serverAddr = "127.0.0.1";
String dataId = "nacos_demo.yaml";
String group = "DEFAULT_GROUP";
//不指定为 public空间
String namespace = "";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("namespace", namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
}
6.集成SpringCloud
- pom.xml
<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>
- bootstrap.yml
server:
port: 56010
spring:
application:
name: service1
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#dataId 名称是application的name加file-extension
file-extension: yaml
group: TEST_GROUP
#Data id 自定义拓展
ext-config[0]:
data-id: ext-config-common01.properties
group: Gropp
refresh: true #支持配置动态刷新
ext-config[1]:
data-id: ext-config-common02.properties
group: Gropp
#自定义共享Data id 配置
shared-dataids: ext-config-common02.properties,ext-config-common01.properties
#是否动态刷新
refreshable-dataids: ext-config-common01.properties
# namespace:
7.配置的优先级
Spring Cloud Alibaba Nacos Config目前提供了三种配置能力从Nacos拉取相关的配置。
- A:通过| spring. cloud . nacos . config. shared-dataids |支持多个共享Dlata Id的配置
- B:通过| spring . cloud. nacos . config . ext -config[n]. data- id的方式支持多个扩展Data Id的配置,多个
Data ld同时配置时,他的优先级关系是spring. cloud.nacos . config. ext-config[n]. data-id其中n的值越大,优先级越高。 - C:通过内部相关规则(应用名、扩展名)自动生成相关的Data ld配置
当三种方式共同使用时,他们的一个优先级关系是:C> B >A