Spirng Cloud Alibaba Nacos注册中心的使用 (环境隔离、服务分级存储模型、权重配置、临时实例与持久实例)

一、环境隔离

在Nacos中,数据模型的相关概念包括namespace、group、services和dataId。

数据模型

1. Namespace(命名空间):

  • Namespace是Nacos的最高级别的隔离单位,用于隔离不同的应用或环境。
  • 每个Namespace都是相互隔离的,拥有独立的配置和服务注册表。
  • 通过Namespace可以实现不同环境的配置和服务管理,如开发环境、测试环境和生产环境可以使用不同的Namespace。

2. Group(分组):

  • Group是在同一个Namespace下对服务或配置进行逻辑上的分组。
  • 通过Group可以对服务或配置进行分类和管理,方便进行版本控制、灰度发布等操作。
  • 一个Group可以包含多个服务或配置。

3. Services(服务):

  • Services表示一组提供相同服务的实例集合。
  • 在Nacos中,服务注册中心用于将服务实例注册到服务列表中,并提供服务发现和负载均衡等功能。
  • 每个服务都有一个唯一的服务名(Service Name),可以根据服务名来查找和管理服务实例。

4. DataId(数据ID):

  • DataId是指在Nacos中唯一标识一个配置的字符串。
  • 对于配置管理来说,DataId对应于配置文件的文件名或者配置项的唯一标识符。
  • 对于服务注册和发现来说,DataId对应于服务的唯一标识符。通过DataId可以唯一定位到一个配置或服务。

这些概念在Nacos中的组织结构和管理方式,可以帮助用户更好地进行配置管理和服务注册与发现。

5. 实战演示:

5.1 默认情况(public):

在Nacos中,默认情况下,所有的服务(services)、配置(data)和分组(group)都在同一个Namespace中,该Namespace的名称为public。这意味着默认情况下,所有的服务和配置都在同一个命名空间下进行管理和隔离。

default

5.2 Namespace的创建:

找到命名空间菜单:

new
新建命名空间:
在这里插入图片描述

命名空间不填默认会自动生成,填写完,点击确定按钮。

deev

扫描二维码关注公众号,回复: 17056414 查看本文章

可以看到,页面里已经创建好了一个新的namespace。

5.3 微服务接入namespace:

这里可以先看下这篇文章:Spring Cloud Alibaba 整合 Nacos 实战

5.3.1 消费者 consumer 默认处于public命名空间:
public
5.3.2 provider修改yml配置:

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: c431c2a3-91bc-40ed-a99c-6fe856ac1e7d

5.3.3 启动provider 对应namespace如下:
provider
5.3.4 consumer向provider发起调用:

控制台报错如下:

在这里插入图片描述
因为namespace不同,会导致consumer找不到provider

二、服务分级存储模型

在分布式系统中,实例之间的关系可以分为以下几个级别:

1. 服务级别:

每个实例都属于同一个服务,即 consumer 服务。

2. 集群级别:

多个实例可以组成一个集群。

例如consumer-1、consumer-2和consumer-3 可以组成一个consumer-service集群。

127.0.0.1:8101  # 北京机房
127.0.0.1:8102  # 上海机房
127.0.0.1:8103  # 上海机房

3. 区域级别:

如果实例分布在不同的区域或数据中心,可以将它们划分为不同的区域级别。

例如,consumer-1和 consumer-2 部署在北京机房,而consumer-3 部署在上海。

服务分级模型如下:
分级模型
在微服务相互访问时,最好优先访问同一集群的实例,因为本地访问速度更快。仅当本集群不可用时,才考虑访问其他集群的实例。

例如:北京机房的consumer服务应该优先调用北京同机房的provider服务,在调不通的情况下才应该去访问上海机房的provider服务。
同机房
接下来,给consumer配置不通集群

在Nacos中,可以通过配置 cluster-name 属性 来指定集群的名称。可以将同一机房内的实例都配置相同的集群名称,这样它们就会被认为是同一个集群的成员。

修改yml如下:

spring:
  application:
    name: consumer  #微服务名称
  #配置nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        cluster-name: SH   

此时启动,三个consumer对应实例,打开nacos控制台的服务列表:

detail

点击详情,可以看到consumer有两台在上海集群,一台在北京:

上海

三、权重配置

Nacos中的服务权重功能可以帮助解决一些问题,包括服务升级和服务选择。

1. 服务升级:

当系统需要进行服务升级或者版本迭代时,可以通过设置服务的权重来实现平滑的升级过程。例如,如果要升级一个服务的新版本,可以先将新版本的实例的权重设置为较低的值,然后逐步提高权重,同时降低旧版本实例的权重,实现新旧版本的平滑过渡。

2. 服务选择:

通过设置不同实例的权重,可以实现对不同实例的选择和分配。例如,可以将某些性能更好或者资源更充足的实例设置较高的权重,从而使得请求更有可能被路由到这些实例上。这样可以实现负载均衡和资源优化,提高系统的性能和可用性。

通过Nacos的权重功能,可以灵活地控制和调整服务的权重,以满足不同场景和需求。这为服务的管理和运维提供了更多的控制和灵活性。

在nacos控制台,找到 consumer 服务的实例列表,点击编辑,即可修改权重:

weight
这里我们将provider 权重修改为0:

在这里插入图片描述

通过consumer 调用 provider 则该实例永远不会被访问,报错如下:

providera

权重为 0 表示该实例的服务不可用或不参与负载均衡,因此请求不会被路由到该实例上。

四、临时实例与持久实例

1. 临时实例:

默认nacos就是临时实例,临时实例是指在服务注册后,当实例下线或者断开连接时,Nacos会立即将其从服务列表中删除。

这意味着临时实例在下线后不会被其他服务调用。

在这里插入图片描述

2. 持久化实例:

与之相对的是持久化实例,持久化实例在下线后仍然会保留在服务列表中,其他服务仍然可以调用它。

在Nacos中,可以通过配置来指定实例是临时实例还是持久化实例。

修改yml文件中ephemeral属性为false :

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false

consumer-prov

观察consumer的临时实例 已经变为了 false

consumer1
观察provider的临时实例 已经变为了 false

provider1

猜你喜欢

转载自blog.csdn.net/qq_39939541/article/details/131745494