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服务发现数据模型的主要内容,如果未能解决你的问题,请参考以下文章