SpringCloud&Nacos注册中心服务分级存储模型

文章目录

  • 服务分级存储模型概述
  • 配置集群
    • 同集群优先的负载均衡
    • 权重配置
    • 总结


      之前对 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 中,服务注册中心的服务分级存储模型是指将注册的服务信息按照不同的环境或命名空间进行分级存储,以实现服务的多环境隔离和管理。

          Nacos 的服务分级存储模型主要包括以下几个概念和特点:

          • 命名空间(Namespace):命名空间是 Nacos 中的一个重要概念,可以用来隔离不同环境或不同应用的服务数据。通过命名空间,用户可以在不同的环境中管理不同的服务信息,比如在开发、测试和生产环境中分别注册和管理服务。

          • 集群(Cluster):Nacos 支持将服务信息分布在不同的集群中进行存储和管理,每个集群可以包含多个节点,提供高可用性和扩展性。

          • 分组(Group):在每个集群中,服务可以根据实际需求分成不同的分组进行管理,以达到更细粒度的服务隔离和控制。

          • 服务存储结构:Nacos 将各级别的服务信息按照命名空间、集群和分组的层次结构进行存储,通过这种分级存储结构,可以实现服务信息的多级管理和隔离。

            通过 Nacos 的服务分级存储模型,用户可以更加灵活地管理和控制不同环境下的服务注册信息,实现服务的隔离和管理,从而提升系统的稳定性和可维护性。这种分级存储模型为企业级应用架构提供了更好的管理和控制手段,支持多租户、多环境的服务注册与管理,是 Nacos 注册中心的重要特性之一。