Nacos服务发现数据模型

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos服务发现数据模型相关的知识,希望对你有一定的参考价值。

文章目录

Nacos服务发现数据模型

1. Namespace 隔离设计

命名空间**(Namespace)**用于进行租户粒度的隔离,Namespace 的常用场景之一是不同环境的隔离,例如开发测试

环境和生产环境的资源(如配置、服务)隔离等。

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

namespce,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套

nacos 集群可以分别建以下三个不同的 namespace。如下图所示:

从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注

册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三

个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名

空间。如下图所示:

2. 命名空间管理

前面已经介绍过,命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环

境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。

如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。

建立好所有namespace后,在配置管理服务管理模块下所有页面,都会包含用于切换namespace(环境)的tab按钮,如下图:

注意: namesace 为 public 是 nacos 的一个保留空间,如果您需要创建自己的 namespace,不要和 public 重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个 namespace。

注意:在编写程序获取配置集时,指定的namespace参数一定要填写命名空间ID,而不是名称

例如:

3. 数据模型

Nacos在经过阿里内部多年生产经验后提炼出的数据模型,则是一种服务-集群-实例的三层模型,这样基本可以满足服务在所有场景下的数据存储和管理。

nacos服务发现的数据模型如下:

  • 服务:对外提供的软件功能,通过网络访问预定义的接口。

  • 服务名 :服务提供的标识,通过该标识可以唯一确定要访问的服务。

  • 实例:提供一个或多个服务的具有可访问网络地址(IP:Port)的进程,启动一个服务,就产生了一个服务实例。

  • 元信息 :Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

  • 集群服务实例的集合,服务实例组成一个默认集群, 集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。

通过数据模型可知: 应用通过Namespace、Service、Cluster(DEFAULT)的配置,描述了该服务向哪个环境(如开发环境)的哪个集群

注册实例。

如下图所示层级进行配置:

具体的应用实例如图下所示:

假如公司的一些实例分布于全国各地的不同机房,例如:

xxx.xxx.xxx.xxx:8081,在上海机房
xxx.xxx.xxx.xxx:8082,在上海机房
xxx.xxx.xxx.xxx:8083,在杭州机房

Nacos就将同一机房内的实例 划分为一个集群。也就是说,userService是服务名称,一个服务可以由多个服务集群组成,如杭州集群、上海集群,而每个集群下又可以有多个服务实例,形成分级模型,如图:

微服务互相访问时,应该尽可能访问 同一集群 下的服务实例,因为处于同一集群下的本地访问速度更快。当本集群内不可用时,才会访问其它集群。例如:

杭州机房内的orderService应该优先访问同机房的userService,若杭州机房内的的userService服务都不可用了,才会调用上海机房内的userService。

具体的代码应用实例如图下所示:

指定namespace的id:f5eec3c1-4f05-40cd-964a-c8d44f342ab4(注意根据自己环境设置namespace的id)

指定集群名称:DEFAULT表示默认集群,可不填写

spring:
  application:
    name: transaction‐service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4

注意: 集群作为实例的隔离,相同集群的实例才能相互感知。

注意: namespace、cluster-name若不填写都将采取默认值,namespace的默认是public命名空间, cluster-name的默认值为DEFAULT集群。

以上是关于Nacos服务发现数据模型的主要内容,如果未能解决你的问题,请参考以下文章

3. nacos服务发现

小白也能懂的 Nacos 服务模型介绍

小白也能懂的 Nacos 服务模型介绍

【Nacos专题】Nacos Config

服务发现-Nacos

Nacos 概念介绍 配置模型