相关推荐recommended
SpringCloud-Nacos服务分级存储模型
作者:mmseoamin日期:2024-02-18

Nacos 服务分级存储模型是 Nacos 存储服务注册信息和配置信息的核心模型之一。它通过将服务和配置信息按照不同级别进行存储,实现了信息的灵活管理和快速检索,为微服务架构下的服务发现和配置管理提供了高效、可靠的支持。本文将对 Nacos 服务分级存储模型进行深入解析。


一、服务分级模型

1、服务分级模型介绍

服务分级模型是一种将服务层次化组织的架构设计,通常用于大型分布式系统或微服务架构中。这种模型的目标是通过将服务划分为不同的层级,实现更灵  活、可维护和可扩展的系统架构。

服务分级模型包括以下几个层级:

特性特性描述
全局级别在这个层级,通常存储全局配置和共享信息。全局级别的服务对整个系统可见,负责处理全局性的任务和配置,例如全局配置管理、认证、授权等。
集群级别集群级别的服务组织在物理或逻辑上相邻的节点上,负责处理集群内的任务和协调。这一层级的服务通常处理一组相关联的节点,提供集群级别的服务如负载均衡、故障转移、数据同步等。
服务级别在服务级别,服务被组织成逻辑单元,每个服务负责实现特定的业务功能。服务级别的服务通常是整个系统的核心,提供具体的业务逻辑,例如用户管理、订单处理等。
实例级别实例级别是最底层的层级,代表着服务的具体实例。在微服务架构中,服务可能会有多个实例运行在不同的节点上,实现负载均衡和高可用性。

通过将服务划分为这些层级,服务分级模型使得系统的不同部分能够独立演化、扩展和维护。这种分级结构使得系统更具弹性,能够更好地适应不同的需求和变化。

下面是服务分级模型的图解: 

SpringCloud-Nacos服务分级存储模型,第1张

图中我们可以形象的看到, 服务分级模型包括以下几个层级:

  • 一级是全局级别(图中省略)
  • 二级是服务
  • 三级是集群
  • 四级是实例(具体到某台部署了某服务的服务器)

    2、服务分级模型作用

    那么,为什么需要这么设计服务分级呢?

    我们拿区域容灾集群举个例子:

    如果我们所有的实例都放在一个机房,那么一旦机房这边出现了不可抗力的破坏,我们的服务也就没有办法继续提供了,会导致系统里该服务涉及的功能不可用,为了避免这种问题,我们需要把实例分散布局,就如同一句谚语 "不能把鸡蛋放在一个篮子里"。

    区域容灾集群示意图:

    SpringCloud-Nacos服务分级存储模型,第2张

    在图中我们可以看到,服务下面设置了三个集群,分别位于杭州、上海、南京。

    这样如果杭州集群内的实例A故障了,可以继续调用实例B。

    即使杭州的集群的实例全都出现故障,上海和南京的实例也可以替补上来,系统可用性大大增加,这个过程也叫服务的跨集群调用。


    3、服务跨集群调用

    如果一个实例不可用了,我们会优先去调用同集群下的另一个实例。但如果一个集群的实例都不可调用了,我们则会跨集群进行调用。

    跨集群服务调用示意图:

    SpringCloud-Nacos服务分级存储模型,第3张

    可以看到杭州集群下面的实例A和实例B都无法正常使用,于是系统跨集群调用到了上海集群的实例C,使得系统可用性大大增加,极大程度避免了服务宕机的风险。 


    4、 服务分级模型特性

    服务分级模型主要具有以下特性:

    特性特性描述
    层级结构服务和配置信息按照层级结构进行存储,包括全局级别 、集群级别、服务级别和实例级别等,每个层级存储的信息具有不同的作用范围和生命周期。
    继承关系Nacos的服务分级存储模型支持继承关系,即更高层级的信息可以被子层级继承和覆盖,实现了信息的统一管理和分级继承。
    动态更新Nacos支持动态更新服务和配置信息,当信息发生变化时,可以及时更新到对应的层级,保证了信息的实时性和准确性。
    灵活检索通过灵活的查询接口,可以根据不同层级和条件快速检索到所需的服务和配置信息,满足了微服务架构下信息管理的需求。

    这些特性共同构成了服务分级模型的优势,使得其在微服务架构下得到广泛应用和推广。


    二、Nacos实现服务分级模型

    1、安装配置Nacos

    首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases · alibaba/nacos · GitHub

    SpringCloud-Nacos服务分级存储模型,第4张

    选择合适的版本并下载,解压缩得到 Nacos 的安装包。 

    在解压后的 Nacos 目录中,找到 bin 文件夹。

    用写字板编辑 startup.cmd,将 set MODE= "cluster" 修改为:

    set MODE=“standalone”

    这将在启动 Nacos Server 时,默认使用 standalone 模式运行。

    修改完成后,切换 cmd 到 bin 目录下启动 Nacos Server:

    C:\Users\Damon.Liu>d:
    D:\>cd D:\Tools\Nacos\bin
    D:\Tools\Nacos\bin>startup.cmd -m standalone

    这里提醒我需要配一个 java8以上 的 JAVA_HOME 环境变量。

    SpringCloud-Nacos服务分级存储模型,第5张

    简单配一下:

    SpringCloud-Nacos服务分级存储模型,第6张

    再次尝试启动 Nacos,这次成功了!

    SpringCloud-Nacos服务分级存储模型,第7张


    2、项目引入Nacos

    首先,创建一个带有生产者和消费者的SpringCloud微服务项目:

    这里就不重头带大家新建了,可以直接看我这篇文章:SpringCloud-创建多模块项目

    接着对我们 SpringCloud 项目下 每个子项目 引入 Nacos,下面拿 springcloud-provider 这个子项目进行举例,其他子项目改造方法相同:

    ① pom.xml增加依赖

    pom.xml 里增加 Nacos 自动发现的依赖:

     
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
        2021.0.5.0
    

    SpringCloud-Nacos服务分级存储模型,第8张


    ② 启动类添加自动发现注解

    启动类增加自动服务发现的注解 @EnableDiscoveryClient:

    package com.example.springcloudprovider;
     
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
     
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosProviderApplication {
     
        public static void main(String[] args) {
            SpringApplication.run(NacosProviderApplication.class, args);
        }
     
    }

    SpringCloud-Nacos服务分级存储模型,第9张


    ③ 修改 application.yml 配置

    修改 application.yml,配置内容修改为:

    server:
      #程序端口号
      port: 8081
    spring:
      application:
        #应用名称
        name: springcloud-provider
      cloud:
        nacos:
          discovery:
            #nacos地址
            server-addr: 127.0.0.1:8848
          config:
            import-check:
              enabled: false
    management:
      endpoints:
        web:
          exposure:
            #公开所有端点
            include: '*'

    SpringCloud-Nacos服务分级存储模型,第10张

    这样 Nacos 服务就可以自动发现这个子项目的服务了。

    访问我们的 Nacos 服务地址:http://localhost:8848/nacos,可以看到控制台的查看已注册服务。

    SpringCloud-Nacos服务分级存储模型,第11张

    通过以上步骤,我们成功将 springcloud-provider 服务注册到了 Nacos 服务中心。


    3、配置Nacos集群属性并启动

     修改每个服务提供者的 application.yml 配置,nacos 相关配置增加:

    spring:
      cloud:
        nacos:
          discovery:
            cluster-name: NJ

    springcloud-provider 修改后的 application.yml 配置:

    server:
      port: 8081
    spring:
      application:
        #应用名称
        name: springcloud-provider
      cloud:
        nacos:
          discovery:
            #nacos地址
            server-addr: 127.0.0.1:8848
            cluster-name: SH
          config:
            import-check:
              enabled: false
    management:
      endpoints:
        web:
          exposure:
            #公开所有端点
            include: '*'

     启动 springcloud-provider :

    SpringCloud-Nacos服务分级存储模型,第12张

    Nacos 里可以看到我们启动的这个实例。

    SpringCloud-Nacos服务分级存储模型,第13张

    点击详情,可以看到实例所在的集群在 SH:

    SpringCloud-Nacos服务分级存储模型,第14张

    我们在开启一个不同集群的实例。

    复制一个配置:

    SpringCloud-Nacos服务分级存储模型,第15张

    命名为 xxxx-NJ,表示南京地区集群。 

     SpringCloud-Nacos服务分级存储模型,第16张

     修改 application.yml 配置,集群名为 NJ,端口号为另一端口:

    SpringCloud-Nacos服务分级存储模型,第17张

    启动该项目,启动成功。

     SpringCloud-Nacos服务分级存储模型,第18张

    回到 Nacos 网站 ,可以看到明细里多了一个集群实例:

    SpringCloud-Nacos服务分级存储模型,第19张

     成功实现基于 Nacos 的服务分级模型。


    三、Nacos的丰富功能

    Nacos(Namespace Aware Clustered Object Storage)作为一个强大的服务发现、配置管理和服务管理平台,提供了许多丰富的功能。

    功能详述
    服务注册Nacos 作为服务注册中心,支持服务的注册与发现。通过 Nacos,微服务应用可以方便地注册自身服务,同时通过 Nacos 进行服务的发现,以实现微服务之间的通信。
    服务发现服务消费者通过 Nacos 注册中心发现并调用其他服务。
    配置管理Nacos作为配置中心,支持动态配置管理,实时更新应用的配置信息。通过 Nacos 的配置中心,应用可以动态读取配置信息,实现配置的集中管理。Nacos支持配置的动态监听,当配置发生变化时,应用可以立即感知并更新。
    命名空间

    和分组

    acos支持多命名空间和分组,帮助用户更好地管理和隔离不同环境下的服务和配置。

    健康检查    Nacos提供了健康检查机制,可实时监测服务的运行状态,确保服务的可用性。

    集群和

    多数据中心 

    Nacos支持横向扩展,可以构建成多节点的集群,支持多数据中心的部署,提供高可用和容错能力。
    配置共享

    和保护

    Nacos允许配置共享,支持配置的版本管理和回滚。同时,Nacos提供配置的保护机制,防止配置被误操作删除。
    插件扩展Nacos提供了丰富的插件机制,可以通过插件扩展实现更多自定义功能,如自定义路由、自定义负载均衡策略等。

    Nacos 的功能丰富多样,涵盖了服务注册与发现、配置管理、健康检查等多个方面。通过学习 Nacos 的这些核心功能,可以更好地利用 Nacos 构建和管理微服务架构,提升应用的可用性和灵活性。希望这一部分的详解能够帮助你更深入地理解和使用 Nacos。


    四、结语

    Nacos服务分级存储模型作为Nacos的核心设计之一,为微服务架构下的服务发现和配置管理提供了强大支持。通过层级结构、继承关系和动态更新等特性,实现了服务和配置信息的高效管理和快速检索,为微服务架构下的应用开发和运维提供了可靠、灵活的解决方案。