之前对 Nacos注册中心入门 已经做了演示. 这篇文章对 Nacos 的服务分级存储模型做理论与实践.
服务分级存储模型概述
一个服务可以有多个实例,例如我们的 user-server
,可以有:
- 127.0.0.1:8081
- 127.0.0.1:8082
- 127.0.0.1:8083
假如这些实例分布于全国各地的不同机房,例如:
- 127.0.0.1:8081,在上海机房
- 127.0.0.1:8082,在杭州机房
- 127.0.0.1:8083,在杭州机房
Nacos 就将同一机房内的实例 划分为一个集群。
也就是说,user-server
是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:
杭州机房内的 order-server应该优先访问同机房的 user-server。
配置集群
给 user-server
配置集群.
将 user-server
服务打包成三份. 三份配置文件做如下改动:
配置1:
server:
port: 20242
spring:
cloud:
nacos:
# 注册中心地址
server-addr: ip:8848
discovery:
cluster-name: HZ # 集群名称
application:
name: user-server
配置2:
server:
port: 20243
spring:
cloud:
nacos:
# 注册中心地址
server-addr: ip:8848
discovery:
cluster-name: HZ # 集群名称
application:
name: user-server
配置3:
server:
port: 20244
spring:
cloud:
nacos:
# 注册中心地址
server-addr: ip:8848
discovery:
cluster-name: SH # 集群名称
application:
name: user-server
依次启动上面3个项目,启动成功后观察 http://ip:8848/nacos
看到有两个集群,三个实例…这两个集群分别是 HZ 和 SH .其中 HZ 下有连个实例,集群 SH 下有一个实例.
点击下图的详情:
会看到该服务的详情:
同集群优先的负载均衡
默认的ZoneAvoidanceRule
并不能实现根据同集群优先来实现负载均衡。
因此 Nacos 中提供了一个NacosRule
的实现,可以优先从同集群中挑选实例。
1)给 消费者服务 配置集群信息
修改 消费者服务 的 application.yml
文件,添加集群配置:
spring:
cloud:
nacos:
server-addr: ip:8848
discovery:
cluster-name: HZ # 集群名称
2)修改负载均衡规则
修改 消费者服务 的 application.yml
文件,修改负载均衡规则:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
权重配置
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
但默认情况下 NacosRule
是同集群内随机挑选,不会考虑机器的性能问题。
因此,Nacos
提供了权重配置来控制访问频率,权重越大则访问频率越高。
在 Nacos
控制台,找到 user-server 的实例列表,点击编辑,即可修改权重:
在弹出的编辑窗口,修改权重:
注意:如果权重修改为 0,则该实例永远不会被访问
命名空间
Nacos 中的命名空间(Namespace)是一种用于隔离配置和服务的概念。它允许您在一个 Nacos 实例中创建多个独立的逻辑实体,每个命名空间都有自己的配置和服务注册信息,相互之间互不干扰。
命名空间可以帮助我们在多租户或多环境的场景下进行资源的隔离和管理。例如,您可以使用命名空间将不同的应用程序或服务分开管理,避免它们之间的冲突。
在 Nacos 中,可以通过创建命名空间来实现资源的隔离。每个命名空间都有唯一的名称和标识符,您可以通过命名空间来访问和管理相应的配置和服务。
Nacos 的命名空间是一项高级功能,通常在大规模和复杂的部署环境中使用。在一般情况下,您可以直接使用默认的命名空间来管理您的配置和服务。如果您需要更多的灵活性和隔离性,可以考虑使用命名空间来优化资源管理和维护。
总结
在 Nacos 中,服务注册中心的服务分级存储模型是指将注册的服务信息按照不同的环境或命名空间进行分级存储,以实现服务的多环境隔离和管理。
Nacos 的服务分级存储模型主要包括以下几个概念和特点:
-
命名空间(Namespace):命名空间是 Nacos 中的一个重要概念,可以用来隔离不同环境或不同应用的服务数据。通过命名空间,用户可以在不同的环境中管理不同的服务信息,比如在开发、测试和生产环境中分别注册和管理服务。
-
集群(Cluster):Nacos 支持将服务信息分布在不同的集群中进行存储和管理,每个集群可以包含多个节点,提供高可用性和扩展性。
-
分组(Group):在每个集群中,服务可以根据实际需求分成不同的分组进行管理,以达到更细粒度的服务隔离和控制。
-
服务存储结构:Nacos 将各级别的服务信息按照命名空间、集群和分组的层次结构进行存储,通过这种分级存储结构,可以实现服务信息的多级管理和隔离。
通过 Nacos 的服务分级存储模型,用户可以更加灵活地管理和控制不同环境下的服务注册信息,实现服务的隔离和管理,从而提升系统的稳定性和可维护性。这种分级存储模型为企业级应用架构提供了更好的管理和控制手段,支持多租户、多环境的服务注册与管理,是 Nacos 注册中心的重要特性之一。