Nacos的配置管理模型
对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。
命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。
配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。
配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即DataID。
配置项
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
一个最佳实践
Nacos抽象定义了Namespace、Group、Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法。
-
Namespace:代表不同环境,如开发、测试、生产环境;
-
Group:代表某项目,如XX医疗项目、XX电商项目;
-
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件。
下面演示一个使用 spring boot 来获取配置的列子。
step1:添加Nacos的配置
nacos:
config:
access-key: 127.0.0.1:8848
namespace: 6f97a206-ce19-44c2-85be-c601170d306e -- 不配置的话默认是public
上面是在配置中心上已经创建的namespace,代码中使用的是tpag这个空间。
step2:添加@NacosPropertySource注解
@Configuration
@NacosPropertySource(groupId = "xxl-job", dataId = "config-file", autoRefreshed = true)
public class NacosConfig {
}
上面的dataId必须填写,groupId不填写的默认。
step3:使用配置
@RestController("/nacos")
public class NacosConfigCenter {
@NacosValue(value = "${name:自由之路}", autoRefreshed = true)
private String name;
@GetMapping("/getName")
public String getName() {
return name;
}
}
命名空间管理
namespace 的设计是 nacos 基于此做多环境以及多租户(多个用户共同使用nacos)数据(配置和服务)隔离的。
多环境的角度
从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。例如,你可能有日常,预发和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。如下图所示:
从多租户的角度
从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:
可以通过Nacos控制台上面的“命名空间”菜单来进行命名空间的管理。
配置管理
通过控制台的“配置管理”菜单可以很方便的进行配置管理。
这里面主要说下“监听查询”这个功能。
这个功能可以查询到有哪些节点正在监听配置文件,并且通过MD5值来判断,节点监听到的文件是不是最新的。