Nacos:多环境下如何“管理”及“隔离”配置和服务

这篇具有很好参考价值的文章主要介绍了Nacos:多环境下如何“管理”及“隔离”配置和服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nacos:多环境下如何“管理”及“隔离”配置和服务

前言

现如今,在微服务体系中,一个系统往往被拆分为多个服务,每个服务都有自己的配置文件,然后每个系统往往还会准备开发环境、测试环境、正式环境

我们来说算一算,假设某系统有10个微服务,那么至少有10个配置文件吧,三个环境(dev\test\prod),那就有30个配置文件需要进行管理。

这么多的配置文件,要修改一个或者多个的时候,稍有不慎可能就会出现改错了、不生效…等等问题。

那么如果引入Nacos作为配置中心后,如何有效的进行配置文件的管理和不同环境间的隔离区分呢?

别担心,Namespace可以帮助我们进行多环境下的管理和隔离

有了上一篇文章的介绍,本文主要从以下几个方面介绍:

  • Namespace是什么
  • Namespace如何进行配置和服务的管理、隔离
  • 创建和获取NamespaceID
  • Namespace实施方案1
  • Namespace实施方案2

Namespace

Nacos引入了命名空间(Namespace)的概念来进行多环境配置和服务的管理及隔离

Namespace也是官方推荐的多环境支持方案。

如何进行配置和服务的管理、隔离

当我们的服务达到一定的数量,集中式的管理许多服务会十分不便,

那我们可以将这些具有相同特征或属性的服务进行分组管理,服务对应的配置也进行分组隔离

这里的分组就是Namespace的概念,将服务和配置纳入相同的Namespace进行管理

不同Namespace下的服务和配置之间就隔离开来

创建和获取NamespaceID

NamespaceId值是在配置文件配置时必须要填入的配置项,所以需要我们先创建Namespace和Id,步骤如下:

nacos 的控制台左边功能栏看到有一个命名空间的功能,点击就可以看到新建命名空间 的按钮

新建成功后,可以在命名空间列表中查看到你所创建的Namespace和他生成的ID值

这里只是讲解创建步骤,本文继续延用Nacos(五)中创建的DEV、TEST

Nacos:多环境下如何“管理”及“隔离”配置和服务

Namespace实施方案1

Nacos给出了两种Namespace的实践方案

  • 面向一个租户
  • 面向多个租户

方案1主要说明一下面向一个租户

从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。

例如,你可能有dev,test和prod三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。如下图所示:
Nacos:多环境下如何“管理”及“隔离”配置和服务

这里的单租户同样也适于小型项目,或者是项目不太多时的实施方案

通过定义不同的环境,不同环境的项目在不同的Namespace下进行管理,不同环境之间通过Namespace进行隔离

当多个项目同时使用该Nacos集群时,还可以通过Group进行Namespace内的细化分组

这里以Namespace:dev为例,在Namespace中通过不同Group进行同一环境中不同项目的再分类
Nacos:多环境下如何“管理”及“隔离”配置和服务

有了以上思路,我们通过代码来实践一下

Namespace下新建配置文件

启动Nacos-Server,进入Nacos控制台,切换到Namespace:dev界面,新建配置文件

  • DataId:nacos-namespace-one-dev.yml

  • Group:namespace-one

  • 配置格式:YAML

  • 配置内容:

    nacos: 
        config: 项目:nacos-namespace-one,Namespace:dev
    

继续新建配置文件

  • DataId:nacos-namespace-two-dev.yml

  • Group:namespace-two

  • 配置格式:YAML

  • 配置内容:

    nacos: 
        config: 项目:nacos-namespace-two,Namespace:dev
    

切换到Namespace:test环境,按照dev中的创建方式,分别创建nacos-namespace-one-test.ymlnacos-namespace-two-test.yml

注意检查DataId是否正确、group、配置内容与环境是否匹配

创建项目

在聚合工程Nacos下创建名为nacos-namespace-one的子项目,该工程的依赖文件和启动类的代码与前文完全一致。

以下NamespaceId均来自创建Namespace时生成的Id,在控制台命名空间页面中可以查看

创建dev环境配置文件bootstrap-dev.yml

server:
  port: 9911
spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
        group: namespace-one
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
        namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
        group: namespace-one

创建test环境配置文件bootstrap-dev.yml

server:
  port: 9912

spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: test
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
        group: namespace-one
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
        namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
        group: namespace-one

重复以上操作,再创建一个名为nacos-namespace-two的子项目

nacos-namespace-two项目的dev和test启动端口分别设置为9921和9922,group为:namespace-two

记得修改spring.application.namenamespacegroup

启动工程

分别启动两个项目的两个环境(四个启动类),如下图
Nacos:多环境下如何“管理”及“隔离”配置和服务
两个环境都启动dev和test

现在我们有2个项目:nacos-namespace-onenacos-namespace-two

2个项目分别有两个不同的环境devtest

此时观察Nacos-Server控制台如下:

Nacos:多环境下如何“管理”及“隔离”配置和服务

尝试访问接口来获取配置信息,验证是否可以读取相应环境配置

访问127.0.0.1:9911/getValue,返回:项目:nacos-namespace-one,Namespace:dev
访问127.0.0.1:9912/getValue,返回:项目:nacos-namespace-one,Namespace:test
访问127.0.0.1:9921/getValue,返回:项目:nacos-namespace-two,Namespace:dev
访问127.0.0.1:9922/getValue,返回:项目:nacos-namespace-two,Namespace:test

通过以上实验,方案1可以达到多环境多项目下的服务、配置管理的目标

方案1通过Namespace来隔离不同的环境(dev\test),在具体的环境Namespace中通过Group来管理不同的项目

Namespace实施方案2

了解了单租户的方案1,再来看看Nacos推荐的面向多租户的方案2

从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。

例如超级管理员分配了三个租户,分别为张三、李四和王五。张三负责A项目,李四负责B项目,王五负责C项目

分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:

Nacos:多环境下如何“管理”及“隔离”配置和服务

方案2通过Namespace来隔离多租户之间的服务和配置,但不仅于此,他有很好的扩展性

在该方案中,Group同样也有用武之地。

需求改变下 ,公司发展迅速业务调整,张三负责A项目、B项目、C项目,李四负责D项目、E项目、F项目,王五负责G项目、H项目、I项目,

而每个项目又分了dev、test、prod三个环境,继续沿用之前的Namespace隔离租户方案,显得有些管理不便,这时候可以在NameSpace中加入Group进行项目环境分组,如图:

Nacos:多环境下如何“管理”及“隔离”配置和服务

但是当业务规模更大的时候(不考虑Nacos集群能否支持的因素),张三、李四、王五每人都负责10多个项目时,即项目数>环境数时,可以通过Group进行项目分组,如下图:

Nacos:多环境下如何“管理”及“隔离”配置和服务

通过上面的理论分析,可以看出方案二有很好的扩展性

依旧如上,我们通过代码来实践一下方案2(Namespace隔离租户 + group环境分组)

场景描述

依旧使用上面的两个项目,假设现在有两个租户,张三、李四

张三负责项目:nacos-namespace-one, 李四负责项目:nacos-namespace-two,项目分别有dev和test环境

新建Namespace和配置文件

新建两个Namespace来隔离租户,分别为zhangsanlisi

Nacos:多环境下如何“管理”及“隔离”配置和服务

在Namespace:zhangsan 下创建配置文件

  • DataId:nacos-namespace-one-dev.yml

  • Group:namespace-one-dev

  • 配置格式:YAML

  • 配置内容:

    nacos: 
        config: 项目:nacos-namespace-one,Namespace:张三,环境:dev
    

继续创建test环境配置文件

  • DataId:nacos-namespace-one-test.yml

  • Group:namespace-one-test

  • 配置格式:YAML

  • 配置内容:

    nacos: 
        config: 项目:nacos-namespace-one,Namespace:张三,环境:test
    

参照以上操作,在Namespace:lisi命名空间中创建配置文件nacos-namespace-two-dev.ymlnacos-namespace-two-test.yml

注意核对DataId、Group、和配置内容

修改项目的配置文件bootstrap.yml

修改项目nacos-namespace-one的dev配置文件bootstrap-dev.yml

server:
  port: 9911
spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
#        方案2:NamespaceID\Group
        namespace: e0d75068-a12c-4314-9296-3f396139d5b3
        group: namespace-one-dev
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
#        方案2:NamespaceID\Group
        namespace: e0d75068-a12c-4314-9296-3f396139d5b3
        group: namespace-one-dev

修改test配置文件bootstrap-test.yml

server:
  port: 9912
spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: test
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
#        方案2:NamespaceID\Group
        namespace: e0d75068-a12c-4314-9296-3f396139d5b3
        group: namespace-one-test
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
#        方案2:NamespaceID\Group
        namespace: e0d75068-a12c-4314-9296-3f396139d5b3
        group: namespace-one-test

重复以上操作相应的修改项目nacos-namespace-two的dev和test配置文件

主要修改namespace和group属性,与命名空间lisi的ID和其下配置文件的Group对应

启动项目

分别启动两个项目的两个环境(四个启动类),启动成功如下图

Nacos:多环境下如何“管理”及“隔离”配置和服务

[两个环境都启动dev和test

此时两个项目分别启动两个环境后,注册到Nacos上不同的Namespace下,并读取相应环境的配置,具体如下:

nacos-namespace-one

  • dev: 注册到Namespace:zhangsan,读取Namespace:zhangsan下Group:namespace-one-dev的配置
  • test: 注册到Namespace:zhangsan,读取Namespace:zhangsan下Group:namespace-one-test的配置

nacos-namespace-two

  • dev: 注册到Namespace:lisi,读取Namespace:lisi下Group:namespace-two-dev的配置
  • test: 注册到Namespace:lisi,读取Namespace:lisi下Group:namespace-two-test的配置

此时Nacos控制台如下图:

Nacos:多环境下如何“管理”及“隔离”配置和服务

ok我们来测试下各个环境的服务能否访问到对应的配置

访问127.0.0.1:9911/getValue,返回:项目:nacos-namespace-one,Namespace:张三,环境:dev
访问127.0.0.1:9912/getValue,返回:项目:nacos-namespace-one,Namespace:张三,环境:test
访问127.0.0.1:9921/getValue,返回:项目:nacos-namespace-two,Namespace:李四,环境:dev
访问127.0.0.1:9922/getValue,返回:项目:nacos-namespace-two,Namespace:李四,环境:test

通过访问服务的接口,各个服务都可以准确的读取到各自环境下的配置文件

方案二可以看到同样支持服务和配置的隔离分组,同时支持业务的扩展,有较好的扩展性

问题描述

但是相信大家已经发现了一个问题,当使用的Group来进行分组后,配置文件相互之间可以实现不同环境与不同项目之间的分组隔离

但是服务注册后,虽然可以通过Namespace隔离,但指定的Group分组却并没有生效,依然是DEFAULT_GROUP

比如方案1 所有项目启动后Nacos服务列表页如下图
Nacos:多环境下如何“管理”及“隔离”配置和服务

这里本应该是我们自定义的分组namespace-onenamespace-two却没有生效

由此发现,配置之间是达到了相互分组隔离名但服务列表暂时并不支持

但是不要担心,Nacos的社区极度活跃,社区的大佬们也发现了这一情况,并且在Nacos-client的源码中可以看到NameingService在加载配置文件时是有预留Group这一属性字段的。

所以既然Nacos提供了这一实践方案,正常使用只不过是时间问题。

总结

以上分析了Nacos对于Namespace提供的两种实践方案,同时进行了代码实验,均达到了预期的要求。

现对两种方案进行一个总结文章来源地址https://www.toymoban.com/news/detail-407578.html

  • 单租户方案(方案1):适合小型项目,服务数量不多时,方案一完全够用
  • 多租户方案(方案2):适合项目量多,有一定的团队规模,且服务数量较多时,可以相对条理清晰的管理和隔离配置及服务。

到了这里,关于Nacos:多环境下如何“管理”及“隔离”配置和服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ​无需测试环境!如何利用测试脚手架隔离微服务,实现功能自动化

    想在不建立完整测试环境的情况下测试微服务? 想在将变更推送到主线分支之前完成测试? 这是我们在进行项目交付时经常遇到的难题。最近,当我们开始一个新的项目,为客户构建一个新的聚合平台时,我们希望将尽可能多的测试和自动化转移到流程的合并前执行。 我们

    2024年02月10日
    浏览(72)
  • Nacos和Eureka比较、统一配置管理、Nacos热更新、多环境配置共享、Nacos集群搭建步骤

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在类上加上@RefreshScope 视频地址https://www.bilibili.com/video/BV1LQ4y127n4?p=29spm_id_from=pageDrivervd_source=0a29c2be3bdd946212330ee312ca98b5 比较难,我没怎么记。以后工作需要再来学 16G内存真的跑不动 有需要的可以去看看黑

    2024年01月21日
    浏览(82)
  • 【Java】微服务——Nacos配置管理(统一配置管理&热更新&配置共享&Nacos集群搭建)

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月03日
    浏览(54)
  • 【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 在微服务搭建中,每个微服务中的业务都需要去完成数据库查询,并且服务之间还会完成相互调用,而要完成相互调用,需要将每个服务都注

    2024年01月16日
    浏览(63)
  • 微服务——Nacos配置管理

    目录 Nacos配置管理——实现配置管理 配置管理实践  Nacos配置管理——微服务配置拉取  Nacos配置管理——配置热更新 方式一: ​编辑 方式二(推荐方式):  Nacos配置管理——多环境配置共享  优先级问题   Nacos配置管理——nacos集群搭建  总结​编辑 在一个微服务架构的系统

    2024年02月15日
    浏览(47)
  • 微服务-nacos配置管理

    统一配置管理 :一次配置更改并支持热更新。将核心配置存储到配置管理服务,当微服务启动时会自动读取配置管理服务中的配置信息并结合本地配置启动。当配置改动时,配置管理服务会自动通知微服务,微服务读取新配置并自动热更新,无需重新启动。 配置中心的思路

    2024年02月14日
    浏览(42)
  • 微服务-Nacos(配置管理)

    在Nacos中添加配置信息: 在弹出表单中填写配置信息:  配置获取的步骤如下:  1.引入Nacos的配置管理客户端依赖(A、B服务):  2.在B服务中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml  将配置交给Nacos管理的步骤 : 在Nacos中添加配

    2024年02月12日
    浏览(37)
  • Spring Cloud - Nacos 配置统一管理、热部署、多环境配置共享

    目录 一、Nacos 配置统一管理 1.1、启动 Nacos 服务 1.2、Nacos 新建配置 1.3、引入依赖 1.4、Nacos 地址读取   1.5、演示效果 二、Nacos 配置热部署 三、多环境配置共享 在当前文件下打开终端,输入如下指令启动 nacos 服务 访问 nacos 主页,点击配置管理查看配置列表,然后新建配置

    2024年02月10日
    浏览(52)
  • 【微服务】4、NACOS 配置管理

    🎼 服务注册到 Nacos 时,可以选择注册为临时实例或非临时实例 🎼 临时实例宕机时,会从 Nacos 的服务列表中剔除;非临时实例宕机不会从服务列表中剔除 🎼 注册到 Nacos 中的服务默认是非临时实例(除非设置 ephemeral 属性为 false) 同: 📔 都支持服务注册和服务拉取 📔 都

    2024年02月14日
    浏览(39)
  • 【微服务】Nacos:发现、配置和管理微服务

    Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石项目(完成微服务拆分和业务中台建设),成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 随着云计算兴起, 2018 2018 2018 年 Nacos(阿里内部 Configserver/Diamond/ Vipserver 内核)开源,作为阿里十年

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包