nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...
前言
前景回顾:
现如今,在微服务体系中,一个系统往往被拆分为多个服务,每个服务都有自己的配置文件,然后每个系统往往还会准备开发环境、测试环境、正式环境
我们来说算一算,假设某系统有10个微服务,那么至少有10个配置文件吧,三个环境(devtestprod),那就有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
Namespace实施方案1
Nacos给出了两种Namespace的实践方案
面向一个租户
面向多个租户
方案1主要说明一下面向一个租户
从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。
例如,你可能有dev,test和prod三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。如下图所示:
这里的单租户同样也适于小型项目,或者是项目不太多时的实施方案
通过定义不同的环境,不同环境的项目在不同的Namespace下进行管理,不同环境之间通过Namespace进行隔离
当多个项目同时使用该Nacos集群时,还可以通过Group进行Namespace内的细化分组
这里以Namespace:dev为例,在Namespace中通过不同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.yml和nacos-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.name、namespace和group
启动工程
分别启动两个项目的两个环境(四个启动类),如下图
现在我们有2个项目:nacos-namespace-one和nacos-namespace-two
2个项目分别有两个不同的环境dev和test
此时观察Nacos-Server控制台如下:
尝试访问接口来获取配置信息,验证是否可以读取相应环境配置
访问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来隔离不同的环境(devtest),在具体的环境Namespace中通过Group来管理不同的项目
Namespace实施方案2
了解了单租户的方案1,再来看看Nacos推荐的面向多租户的方案2
从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。
例如超级管理员分配了三个租户,分别为张三、李四和王五。张三负责A项目,李四负责B项目,王五负责C项目
分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:
方案2通过Namespace来隔离多租户之间的服务和配置,但不仅于此,他有很好的扩展性
在该方案中,Group同样也有用武之地。
需求改变下,公司发展迅速业务调整,张三负责A项目、B项目、C项目,李四负责D项目、E项目、F项目,王五负责G项目、H项目、I项目,
而每个项目又分了dev、test、prod三个环境,继续沿用之前的Namespace隔离租户方案,显得有些管理不便,这时候可以在NameSpace中加入Group进行项目环境分组,如图:
但是当业务规模更大的时候(不考虑Nacos集群能否支持的因素),张三、李四、王五每人都负责10多个项目时,即项目数>环境数时,可以通过Group进行项目分组,如下图:
通过上面的理论分析,可以看出方案二有很好的扩展性
依旧如上,我们通过代码来实践一下方案2(Namespace隔离租户 + group环境分组)
场景描述
依旧使用上面的两个项目,假设现在有两个租户,张三、李四
张三负责项目:nacos-namespace-one, 李四负责项目:nacos-namespace-two,项目分别有dev和test环境
新建Namespace和配置文件
新建两个Namespace来隔离租户,分别为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.yml和nacos-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上不同的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控制台如下图:
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服务列表页如下图
这里本应该是我们自定义的分组namespace-one和namespace-two却没有生效
由此发现,配置之间是达到了相互分组隔离名但服务列表暂时并不支持。
但是不要担心,Nacos的社区极度活跃,社区的大佬们也发现了这一情况,并且在Nacos-client的源码中可以看到NameingService在加载配置文件时是有预留Group这一属性字段的。
所以既然Nacos提供了这一实践方案,正常使用只不过是时间问题。
总结
以上分析了Nacos对于Namespace提供的两种实践方案,同时进行了代码实验,均达到了预期的要求。
现对两种方案进行一个总结
单租户方案(方案1):适合小型项目,服务数量不多时,方案一完全够用
多租户方案(方案2):适合项目量多,有一定的团队规模,且服务数量较多时,可以相对条理清晰的管理和隔离配置及服务。
参考与感谢
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LarsCheng's Blog!
---
nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...相关推荐
- PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)
Docker环境下基于HubServing模式部署Restful API服务(CPU版本) 在日常项目应用中,相信大家一般都会希望能通过Docker技术,把PaddleOCR服务打包成一个镜像,以便在 ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- nacos怎么修改服务分组_nacos配置管理
Nacos是阿里开源的一个项目 用于进行微服务架构的配置管理以及服务发现, 和服务治理等解决方案 配置管理 什么是配置中心 配置发布更新 发布配置到配置中心,把各个服务拿到一个地方, 这样各个服务要从 ...
- 检查是否禁止asp.net服务扩展_在 Kubernetes 环境下部署 OpenWhisk 服务
本文使用 Zhihu On VSCode 创作并发布 1. 总体目标 终于开始准备毕业设计了.在和导师们的讨论之后,我们确定之后的研究方向将会专注于 Serverless Computing. 先长舒 ...
- 从Kubernetes安全地访问AWS服务,告诉你多云场景下如何管理云凭据!
作者| Alexey Ledenev 翻译 | 天道酬勤,责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 随着企业与各种云提供商合作,多云场景已经变得十分常见. 在谷歌Ku ...
- nacos怎么修改服务分组_nacos服务注册如何配置分组?
同问,度娘一番,没找到答案,最终看的代码,大概知道怎么回事了. 这个是下面引用源码的版本 org.springframework.cloud spring-cloud-starter-alibaba- ...
- mongodb添加创建修改时间_mongodb副本集生产环境下部署案例,推荐一个主两个从三台机器...
Linux中部署Mongodb副本集 提示: 以下操作步骤较多,请耐心阅读. 关于理论部分请参考上篇浅谈mongodb副本集. 1. 准备 192.168.102.110 master 192.168 ...
- ubuntu mysql 修改 端口_在Ubuntu/Linux环境下使用MySQL:开放/修改3306端口、开放访问权限...
操作系统:Ubuntu 17.04 64位 MySQL版本:MySQL 5.7 一.查看3306端口是否开放 netstat -an|grep 3306 如果看到下图这样的,说明端口并未打开: 二.修 ...
- EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务EasyNVS如何在内网环境下与外网和公网对接
背景说明 由于互联网的飞速发展,传统安防摄像头的视频监控直播与互联网直播相结合是大势所趋.传统安防的直播大多在一个局域网内,在播放的客户端上也是有所限制,一般都需要OCX Web插件进行直播.对于安防 ...
最新文章
- Linux下tomcat内存溢出分析及优化
- 如何解决SSL/TLS握手过程中失败的错误?
- 移动机器人建图与导航代码实现——3.Path Tracking
- xcode 不能读取键盘输入的汉字_C++:cin从控制台读取数据时的结束符
- Linux 安装 MySQL 5.7 并连接 Navicat 详细过程
- J2EE 企业级应用架构简述
- wordpress 基础文件
- 实用调试技巧 Debug Release F10 F11 初始化 越界访问 堆栈 模拟实现库函数
- k8s集群中 spark访问hbase中数据
- 【高电复习3】频谱的线性搬移、振幅调制、解调、混频
- 目前比较流行的网站开发框架
- Hibernate-部分知识点概述(持续更新)
- github分支操作
- JavaScrpit+Html实现日期时间启动、停止操作(应用场景:计时器、秒表)
- 攻防演练第四年的一些碎碎念
- pc端启用微信小程序
- python人机交互_人机交互程序 python实现人机对话
- Oracle中todate函数的使用
- Python pip自动管理脚本
- easyui01人门基础