当前位置: 首页 > 知识库问答 >
问题:

微服务 - Nacos 环境隔离中分Namespance、group、service的意义是什么?

翟俊哲
2023-09-10

在初学微服务,因为暂时是学生,接触不到企业微服务的相关经验,希望大佬们可以从企业实际开发过程去聊聊

共有2个答案

申屠泳
2023-09-10

管理的颗粒度不同,从粗到细。

这玩意儿是随着需求自然而然产生的,你不用费劲去记它的概念,而是要试着从需求角度去理解它们。

你可以先抛开 Nacos 提供的这些模型和概念,现在就假设你自己有一些程序需要管理它们的配置文件,你会怎么去做?我们来试着总结一下可能的需求。

  1. 你有两个程序,我们称之为程序 A 和 B。其中每个程序都可能是分布式部署的,会有多个实例,比如 A1、A2……A9 和 B1、B2……B9。你会希望能有一个地方去统一管理 A 和 B 的配置文件,改了一处 A1-A9 就都跟着变,不用一个一个分别去改。而且最重要的是,改了 A 的配置文件、不会影响 B 的配置,也就是所谓的隔离。
  2. 你现在有了更多的程序,A、B、C、D……乃至 N。此时你发现它们虽然是独立的程序,但是其中某几个程序是互相有业务关联的,比如 A 是订单程序、B 是库存程序,它们会共享同一个 MQ 或者其他中间件。那么此时你会希望在上一条的基础之上,有一个地方可以共享其中一部分参数,这样就可以统一修改这些中间件配置了,但是还不影响你的 A、B 两个程序其他配置项的隔离。
  3. 项目正式上线了,可产品还得继续迭代,但迭代过程中不能直接拿着真实环境搞啊,万一出 BUG 影响用户了怎么办?于是你们分别搭建出了开发、测试、预生产、生产等等几个环境。随着工作越来越复杂,你开始变得手忙脚乱起来,改配置经常改错地方,本来要去改开发环境的、结果不小心点进预生产环境里了。于是你在想,有没有一个什么办法可以区分出这几个环境,打开开发环境的,下面展示出来的所有配置项就都是开发环境的,其他环境的一个都不要显示出来,不显示出来你就不会不小心点错了。甚至说生产环境的配置项,你连看都不想看到,都交给运维吧,这样改错了也不会是你的责任。

在 Nacos 里,应对上述三点需求的,就分别是 Service、Group、Namespace 了。

以上仅从配置项的角度出发,但实际 Nacos 不光是配置中心,还包括服务发现等能力,这里就不再展开了。道理是一样的,你可以自己试着从实际管理的需求出发去总结。

曾航
2023-09-10

首先申明一下基本没接触过基于nacos微服务的开发,本身也不是属于开发岗,所以在运维的角度上解答这个问题。

在基于nacos的微服务项目里,程序启动时,就能从nacos拿到程序的配置信息。应用网关通过服务发现,可以找到已经注册的实例信息,通过这个信息可以把请求发送给对应的实例。

但是通常情况下,程序开发过程,都会有多个环境(常见的互联网行业中的公司是这样的),通常会有测试环境/开发环境/生产环境等等。

在上面这些环境中,会对应不同的代码分支,这些分支的代码应该在合并之后是一样的,这样就有个问题,如果代码一样,配置的命名空间一样,那么程序去nacos读取配置时,就会拿到一样的配置了,这样就可能都会去连接同一个数据库。不同的环境的程序,也会都注册到一起,就混乱了。

这个时候,命名空间namespace就派上用场了。比如说现在有3个命名空间, test \ dev \ release。

在启动的时候,配置一个环境变量env=dev。然后启动微服务的时候,程序去读取环境变量env,然后把这个env的值dev作为程序连接nacos时使用命名空间,这样,程序就能去dev命名空间下读取配置文件/注册服务了。

等到dev的代码合并到test环境上了,在test环境上,传递一个env=test的环境变量。这里程序还是一样的程序,但是程序读取到的env=test,程序就只会去test命名空间下读取配置/注册服务。

修改不同环境的配置/注册不同的服务,也不会影响到使用其他命名空间的环境,就是相当于一个逻辑的隔离措施。


group 是把配置文件分组,我是这样理解的。


service 就是服务名字。比如说一个项目有ABC三个服务,注册的时候,要告诉nacos,现在这个程序是什么服务。后面你需要去调用这个ABC三个服务中的任意一个服务的时候,才能知道哪个是哪个。

 类似资料:
  • 背景 当前有两个服务,分别是user-service和order-service,nacos服务列表中无法发现两个服务 排查 Nacos v2.2.3 依赖已引入,配置文件已配置addr 运行时未出现连接nacos的日志: 希望大佬们可以帮忙看看是什么问题 问题程序链接 https://oss-20001.oss-cn-qingdao.aliyuncs.com/cloud-demo.zip

  • 主要内容:微服务架构,微服务架构 vs 单体架构,微服务的特点,微服务框架微服务(MicroServices)最初是由 Martin Fowler 于 2014 年发表的论文 《 MicroServices》 中提出的名词,它一经提出就成为了技术圈的热门话题。 微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。 1) 所谓“服务”,其实指的是项目中的功能模块,它可以帮助用户解决某一个或一组问题,在开发过程中表现为 IDE(集

  • 17.1 什么是 daemon 与服务 (service) 我们在第十六章就曾经谈过“服务”这东西! 当时的说明是“常驻在记体体中的程序,且可以提供一些系统或网络功能,那就是服务”。而服务一般的英文说法是“ service ”。 但如果你常常上网去查看一些数据的话,尤其是 Unix-Like 的相关操作系统,应该常常看到“请启动某某 daemon 来提供某某功能”,唔!那么 daemon 与 se

  • 本文向大家介绍请解释下什么是cookie隔离?为什么要隔离?如何隔离?相关面试题,主要包含被问及请解释下什么是cookie隔离?为什么要隔离?如何隔离?时的应答技巧和注意事项,需要的朋友参考一下 什么是 Cookie 隔离? 或者说:请求资源的时候不要让它带 cookie 怎么做 cookie 隔离技术和传统的多域名拆分请求,提高浏览器并发请求数有点类似,均是采用多域名来处理请求 传统做法是将 c

  • 本文向大家介绍微服务架构中的DRY是什么?相关面试题,主要包含被问及微服务架构中的DRY是什么?时的应答技巧和注意事项,需要的朋友参考一下 DRY 代表不要重复自己。它基本上促进了重用代码的概念。这导致开发并共享库,但是反过来导致紧耦合。

  • 我尽可能地保持我的服务接口,通常它们是@functionalinterface。我试图遵循界面分离原则。 如果我的服务实现实现多个接口,如果它们共享其中的大部分依赖关系,这是一个好的实践吗?或者我应该为每个接口创建一个单独的实现? 在我的例子中;TaskService实现这两个接口是一个好的做法吗?或者我应该为每个接口有一个单独的类?