Nacos--多环境的实现方案

news2024/11/25 3:00:19

原文网址:Nacos--多环境的实现方案_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍Nacos实现多环境的方案。

方案概述

多环境有很多方案,如下:

  1. 单租户方案(适用于项目很少的场景)
    1. 命名空间区分环境,GROUP 使用默认,DATA ID区分应用
  2. 单租户方案(适用于项目较少的场景)
    1. 命名空间区分环境,GROUP 区分项目,DATA ID区分应用
  3. 多租户方案(适用于项目很多的场景)
    1. 命名空间区分项目,GROUP使用默认,DATA ID区分应用及环境
  4. 多租户方案(适用于项目巨多的场景)
    1. 命名空间区分项目,GROUP 区分环境,DATA ID区分应用

方案1:单租户(单GROUP)

场景:适用于项目很少的场景。

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

方案2:单租户(多GROUP)

场景:适用于项目较少的场景。

以方案1为基础,多个项目同时使用该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.yml和nacos-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.name、namespace和group)。

测试

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

现在我们有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可以达到多环境多项目下的服务、配置管理的目标。

方案3:多租户(单GROUP)

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

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

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

方案4:多租户(多GROUP)

        以方案3为基础,公司发展迅速业务调整,张三负责A项目、B项目、C项目,李四负责D项目、E项目、F项目,王五负责G项目、H项目、I项目。每个项目又分了dev、test、prod三个环境,继续沿用之前的Namespace隔离租户方案,显得有些管理不便,这时候可以在NameSpace中加入Group进行项目环境分组,如图:

        当业务规模更大的时候(不考虑Nacos集群能否支持的因素),张三、李四、王五每人都负责10多个项目时,即项目数>环境数时,可以通过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

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

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

其他网址

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python简介

Python简介 目录1. 概述2. 安装3. 编译器4. 注释5. 缩进6. 编码规范7. 基本输入输出使用print()函数输出使用input()函数输入8. 练习1. 概述 Python的中文意思是蟒蛇,python是一种面向对象的解释型的计算机程序设计语言。支持面向过程,面向对象&#xff…

(十四)Vue之收集表单数据

文章目录v-model的三个修饰符收集文本框收集单选按钮收集复选框收集下拉列表收集文本域演示程序Vue学习目录 上一篇:(十三)Vue之监测数据改变的原理 v-model的三个修饰符 v-model的三个修饰符: lazy:失去焦点再收集…

MIT6.830-2022-lab2实验思路详细讲解

目录一、Exercise1.1、Exercise1: Filter and Join1.2、Exercise2: Aggregates1.3、Exercise 3:HeapFile Mutability1.4、Exercise 4:Insertion and deletion1.5、Exercise 5: Page eviction二、总结一、Exercise 1.1…

人工智能课后作业_python实现A*算法实现8数码问题(附源码)

3 A*算法实现8数码问题 3.1算法介绍3.2实验代码3.3实验结果3.4实验总结 3.1算法介绍 Astar算法是一种求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法。它的启发函数为f(n)g(n)h(n),其中,f(n) 是从初始状态经由状态n到目标状态的…

竞拍拍卖管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 网站前台:关于我们、联系我门、公告信息、拍卖物品,拍卖完成 管理员功影: 1、管理关…

信贷反欺诈体系介绍及其策略规则应用

在信贷业务的风控体系中,反欺诈始终是一个重要话题,与信用评估构成的贷前风控两大模块,对于贷前风险的防范控制发挥着决定性作用。反欺诈虽然在理解层面上感觉略显简单,但由于场景的复杂性与丰富度,使得反欺诈在研究开…

PD QC快充诱骗取电方案:输出9V12V15V20V

手机快充充电器或充电宝,在没有与手机通讯时,快充充电器相当于普通的充电器只输出5V电压,要想得到充电器的9V/12V等电压,可以使用快充取电电路。 或者也可以使用电子元件来搭建诱骗电路,但是和专用的取电芯片方案相比&…

Part 1:RPA的发展历程

Robot一词的来源 捷克科幻小说家卡雷尔恰佩克创作,于1921 年在布拉格首映的《罗素姆万能机器人》作品中首次出现“robot”(机器人)一词。这个词源于捷克语的“robota”,意思是“苦力”。恰佩克的机器人原本是为它们的人类主人服务…

Python使用Selenium Webdriver爬取网页所有内容

Python使用Selenium Webdriver爬取网页所有内容一、为什么我抓不到网页的全部html内容二、Selenium的基本使用三、使用Selenium抓取全部HTML一、为什么我抓不到网页的全部html内容 有时候,我们在用urllib或者requests库抓取页面时,得到的html源代码和浏…

4年测试在岗,薪资却被春招来的年轻人超过了,其实你一直在假装努力~

最近和一位同行朋友聊天,一开始大家也没有谈工作,毕竟是出来聚聚,放松一下,吃饭的时候,喝了点小酒,酒过三巡,这个朋友开始诉苦水,大概意思嘞,我给大家概况一下&#xff0…

STM32F4的关键要点分析

1. 从以上截图信息可以看出: 1.当外设数据宽度和内存数据宽度不相等时,要传输的数据项数目的数据宽度由外设数据宽度确定; 2.在直接模式下(不使用FIFO),不能进行数据的封装/解封,且源数据宽度和…

Docker-Docker安装nginx

目录 一,容器之间的相互通信 ping 1.1 两个容器在同一网段 1.2 两个容器在不同网段 二,安装Nginx 2.1 nginx是什么 安装步骤 2.4 部署前端项目 上传项目 步骤 一,容器之间的相互通信 ping 1.1 两个容器在同一网段 1.2 两个容器在不同网段…

旋转机械 | 基于ANSYS WB平台的滑动轴承分析工具(一)

导读:本文主要针对Tribo-X inside ANSYS的功能及各方向应用实例进行介绍,限于篇幅关系会分五篇进行介绍,第一篇主要结合软件的需求、理论、功能及应用方向进行介绍,第二篇至第五篇将结合具体应用方向的示例进行介绍。本篇为第一篇…

软件测试工程师的简历项目经验该怎么写?

想要找一份高薪的软件测试工作,简历项目必不可少(即使是应届生,你也要写上实习项目)。所以很多自学的朋友找工作时会碰到一个令人颇感绝望的拦路虎:个人并没有实际的项目工作经验怎么办? 怎么办&#xff1…

【PS】画笔工具

目录 画直线 拾取颜色 改变画笔大小 改变画笔硬度 不透明度 流量 画笔预设 自定义图片做笔刷 工具预设 画笔面板 画直线 Shift键可画出直线只用点两个点就画出直线:先点一个点,按住shift,再在别处点一点,这时候直线就形…

Python 中如何使用pybind11调用C++

Python 中如何使用pybind11调用C1. pybind11简介与环境安装2. 求和函数3. STL和python内建数据类型的对应关系3.1 **返回vector**3.2 **返回struct**4. pybind11与numpy图像数据接口和速度对比:以图像rgb转化为gray的例子Reference: 混合编程:如何用pyb…

银联卡8583协议小额免密免签交易总结

之前做过金融支付这块儿。到过北京石景山区银行卡检测中心过检PBOC的level2认证,去过上海银联总部和湖南银联对接银联卡和扫码支付。对金融支付和卡交易这块儿熟悉。现在这块儿知识用不上了总结下留作备忘,同时分享给有需要的人。 关于免密免…

【云原生 | Kubernetes 实战】12、K8s 四层代理 Service 入门到企业实战应用(下)

目录 一、创建 Service:type 类型是 NodePort 1.1 创建一个 pod 资源 1.2 创建 service,代理 pod 在集群外访问 service: 数据转发流程: 二、创建 Service:type 类型是 ExternalName 2.1 创建 pod 2.2 创建…

相关数据库

h2 需要用以下 初始化一下 第一次启动需要加入下面代码 h2 创建表 可以直接用jdbc 然后进行测试 不需要链接mysql redis 想要启动redis 现在 该目录下 输入俩个cmd 一个cmd 输入redis-cli 到启动太 输入 shutdown 然后再另一个cmd 输入 redis-server.exe redis.windows.con…

如何利用电商模式,灵活结合当地产品生态全力助农,实现乡村振兴

随着互联网时代的发展,人们的消费观念和消费习惯逐渐被改变,绿色环保观念深入人心,人们加大了对农产品的高要求和高需求,同时,近年来国家对农业的重视和政策支持,促进了农产品电商的蓬勃发展,已…