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

Namespace


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

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

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

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

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

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

创建和获取NamespaceID


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

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

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

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

img

Namespace实施方案1


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

  • 面向一个租户

  • 面向多个租户

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

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

例如,你可能有dev,test和prod三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。如下图所示:

方案1

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

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

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

这里以Namespace:dev为例,在Namespace中通过不同Group进行同一环境中不同项目的再分类

方案1内部Group分组

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

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的子项目,该工程的依赖文件和启动类的代码与Nacos(四)完全一致。

以下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

启动工程


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

两个环境都启动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项目

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

多租户namespace

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

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

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

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

Group环境分组

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

Group项目分组

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

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

场景描述


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

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

新建Namespace和配置文件


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

zhangsan\lisi

在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:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
espace-one

profiles:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-TX4D317V-1715853125464)]

[外链图片转存中…(img-c6AOg0ru-1715853125465)]

[外链图片转存中…(img-lRWDDNaG-1715853125465)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值