Nacos环境隔离(3)
Nacos管理台有一个单独的菜单“命名空间”,里面默认存在一个名为“public”的默认命名空间,我们在使用Nacos时不管是作为注册中心还是配置中心,都是作用在该命名空间之下的,那么这个命名空间到底起着什么作用呢?其实Nacos基于Namespace帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
我们明白了namespace是为了起到了环境隔离作用而出现的,其实不光是namespace,group和Data Id也可以起到环境隔离的作用。Data Id的值为:${spring.cloud.nacos.config.prefix}- ${spring.profile.active}. ${spring.cloud.nacos.config.file-extension},而spring.profiles.active是可以区分不同环境的。所以如何合理使用namespace、group和Data Id去区分不同的环境,是我们在使用Nacos时必须要仔细考虑的一个问题。
经典案例
Nacos是阿里巴巴工程师编写的,是运用在大规模平台项目当中的,所以站在他们的角度思考问题会让我们更加理解他们这样设计环境隔离的目的。假设我们现在要做一个大平台项目,大平台项目会为各个企业提供服务支持,同时不同的企业还存在不同的子项目,并且每个子项目都需要有多个配置环境,如下图:
面对这种需求时合理使用Nacos的环境隔离策略更够让我们节省不少的时间成本。
- 对于不同企业这一层我们可以使用namespace进行区分。
- 对于企业下面不同子项目我们可以使用group进行区分。
- 对于每个子项目不同的环境我们可以使用Data Id进行区分。
根据上面的环境隔离策略,假如我们需要添加一个B企业下面的B子项目的nacos-provider模块的测试环境配置,那么可以这样配置:
- 第一步:添加命名空间B企业。
- 第二步:配置列表添加配置文件,group代表项目,Data Id代表模块以及不同的运行环境。
- 第三步:修改nacos-provider模块指定namespace、group和active。
- 第四步:使用启动参数指定环境。这样虽然实现了环境隔离,但是是硬编码的方式,因为我们在bootstrap.yml写死了环境参数,实际开发中应该使用启动参数来指定。
-Dspring.cloud.nacos.config.namespace=bb9f6e91-3555-4120-903f-6a4366284e62
-Dspring.cloud.nacos.config.group=project_B
-Dspring.profiles.active=TEST