购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 Nacos组成结构和设计模型

虽然注册中心基本都遵循了2.1节中介绍的基本模型,但每个注册中心都有自身的设计方法,这些设计方法决定了工具的功能特性。在本节中,我们将对Nacos的组成结构和设计模型进行展开描述,从而为引入Nacos的各项高级特性打好基础。

2.4.1 Nacos分级模型

我们知道在Nacos中存储的是各个服务的运行时实例,所以服务本身是Nacos最核心的概念。Nacos支持主流的服务生态,包括Kubernetes Service、Dubbo Service或者Spring Cloud RESTful Service。无论采用的是哪一种服务生态,在Nacos中的存储结构采用的都是统一的分级模型,如图2-13所示。

图2-13 Nacos分级模型

在图2-13中,我们可以看到明显的三级模型。

❑ 一级是服务(Service),如SpringOrder项目中的order-service。

❑ 二级是集群(Cluster),如图中的A、B、C三个集群。

❑ 三级是实例(Instance),例如:杭州机房的某台服务器上部署了order-service的某一个实例。

讲到这里,你可能会问Nacos为什么要采用服务→集群→实例三级模型,而不是直接使用更为通用的服务→实例二级模型呢?关键就在于它针对服务的组织和路由策略进行了高度抽象而专门提炼出来的集群概念。Nacos中的集群更多是机房的概念,例如北京、上海和杭州有三个机房,分别对应了图2-13中的A、B、C三个集群。一旦有了集群这个概念,开发人员就可以通过元数据实现对集群中服务实例的细化控制,从而集成定制化服务访问路由算法。图2-14展示了Nacos控制台中集群的管理入口。

图2-14 Nacos控制台中集群的管理入口

从图2-14中可以看到,我们可以通过更新集群的方式对集群元数据进行控制,这些元数据会进一步影响服务的访问路由和负载均衡策略。在本书第4章介绍负载均衡机制时会结合Nacos元数据实现负载的定制化路由机制。

在Nacos中,任何一个服务实例都必须从属于某一个集群,默认的集群是DEFAULT。如果你想创建“SPRING_ORDER_CLUTER”这个自定义集群,并把SpringOrder项目中的order-service服务划分到这个集群下,可以使用如代码清单2-6所示的配置项。

代码清单2-6 自定义集群配置代码

2.4.2 Nacos资源隔离

当我们理解了Nacos的分级模型之后,下一个要讨论的话题是它的资源隔离模型。当大量的微服务实例都存储在同一个Nacos服务器时,开发人员不可避免地会面临如下两个问题。

❑ 如何合理管理服务实例资源,在逻辑上实现对不同服务实例进行隔离?

❑ 如何有效控制权限,对服务消费者发起的请求范围进行合理的控制?

要想解决这两个问题,就需要资源隔离机制。在Nacos中,资源隔离有两个维度:一个是命名空间(Namespace),一个是分组(Group)。它们与服务的关系如图2-15所示。

请注意,和分级模型不同,Nacos资源隔离关注的层级是服务本身。一旦服务被合理地进行隔离,那么从属于服务的集群和实例自然就会被隔离。

图2-15 Nacos资源隔离维度

1.命名空间

命名空间用于实现租户粒度的资源隔离。不同的命名空间下,可以存在相同的分组信息。命名空间的常用场景之一是针对不同环境的资源隔离,例如开发环境、测试环境和生产环境的资源隔离。为此,我们可以针对不同环境创建不同的命名空间,图2-16展示的就是创建了dev、test和prod这三个命名空间的设置效果。

图2-16 Nacos命名空间的设置效果

在图2-16中,我们看到除了dev、test和prod这三个自定义命名空间之外,还存在一个public命名空间,这是Nacos默认的命名空间。但是请注意,命名空间是可以为空的,也就是说我们不一定要使用public这个默认的命名空间,这点和集群的概念不同。

同时,我们也注意到Nacos中命名空间都有一个唯一的Id,如图2-16中所展示的dev命名空间的唯一Id就是d73a49df-ceb9-425f-b7a5-87d33a110dfd,这是Nacos在创建命名空间时自动生成的,我们可以通过如代码清单2-7所示的配置方法来指定这个唯一Id。

代码清单2-7 自定义命名空间配置代码

2.分组

Nacos的分组是比命名空间更为细化的一个资源隔离概念,典型的应用场景是在同一个环境内针对不同业务场景通过分组对服务进行区分管理,例如在SpringOrder项目中可以创建订单分组、商品分组等,这样属于订单或商品子域的不同服务就可以划分到不同的分组中。

在Nacos中存在一个默认分组DEFAULT_GROUP,所有的服务默认都属于这个分组。开发人员可以通过如代码清单2-8所示的配置项来设置自定义的分组信息。

代码清单2-8 自定义分组配置代码

分组设置的效果如图2-17所示,可以看到我们在dev这个环境下创建了一个MY_GROUP分组,然后把provider-service服务划分到这个分组中。

在本节最后,我们把分级模型和资源隔离机制整合在一起就得到了Nacos的整体组成结构,如图2-18所示。

图2-17 Nacos分组设置效果

图2-18 Nacos整体组成结构

对应地,如果我们想要对图2-18中的所有概念进行配置,可以采用如代码清单2-9所示的配置方法。

代码清单2-9 综合使用Nacos注册中心配置示例代码

在日常开发过程中,Nacos的服务器地址和命名空间需要随着环境的变化而变化,而集群名称和分组名称则是相对固定的。因此,我们可以通过引入Maven的Profile机制对服务器地址、命名空间进行统一管理,在本章2.6节介绍SpringOrder案例实现过程时会介绍这种实现技巧。 eCiuqymLzbKqLJNl3TFKlPOPtp0F1q9ExQcBySNV6JArEUDTt36dt8SJkcF/ynoP

点击中间区域
呼出菜单
上一章
目录
下一章
×