Nacos 服务分级存储模型是 Nacos 存储服务注册信息和配置信息的核心模型之一。它通过将服务和配置信息按照不同级别进行存储,实现了信息的灵活管理和快速检索,为微服务架构下的服务发现和配置管理提供了高效、可靠的支持。本文将对 Nacos 服务分级存储模型进行深入解析。
一、服务分级模型
1、服务分级模型介绍
服务分级模型是一种将服务层次化组织的架构设计,通常用于大型分布式系统或微服务架构中。这种模型的目标是通过将服务划分为不同的层级,实现更灵 活、可维护和可扩展的系统架构。
服务分级模型包括以下几个层级:
特性 | 特性描述 |
全局级别 | 在这个层级,通常存储全局配置和共享信息。全局级别的服务对整个系统可见,负责处理全局性的任务和配置,例如全局配置管理、认证、授权等。 |
集群级别 | 集群级别的服务组织在物理或逻辑上相邻的节点上,负责处理集群内的任务和协调。这一层级的服务通常处理一组相关联的节点,提供集群级别的服务如负载均衡、故障转移、数据同步等。 |
服务级别 | 在服务级别,服务被组织成逻辑单元,每个服务负责实现特定的业务功能。服务级别的服务通常是整个系统的核心,提供具体的业务逻辑,例如用户管理、订单处理等。 |
实例级别 | 实例级别是最底层的层级,代表着服务的具体实例。在微服务架构中,服务可能会有多个实例运行在不同的节点上,实现负载均衡和高可用性。 |
通过将服务划分为这些层级,服务分级模型使得系统的不同部分能够独立演化、扩展和维护。这种分级结构使得系统更具弹性,能够更好地适应不同的需求和变化。
下面是服务分级模型的图解:
图中我们可以形象的看到, 服务分级模型包括以下几个层级:
- 一级是全局级别(图中省略)
- 二级是服务
- 三级是集群
- 四级是实例(具体到某台部署了某服务的服务器)
2、服务分级模型作用
那么,为什么需要这么设计服务分级呢?
我们拿区域容灾集群举个例子:
如果我们所有的实例都放在一个机房,那么一旦机房这边出现了不可抗力的破坏,我们的服务也就没有办法继续提供了,会导致系统里该服务涉及的功能不可用,为了避免这种问题,我们需要把实例分散布局,就如同一句谚语 "不能把鸡蛋放在一个篮子里"。
区域容灾集群示意图:
在图中我们可以看到,服务下面设置了三个集群,分别位于杭州、上海、南京。
这样如果杭州集群内的实例A故障了,可以继续调用实例B。
即使杭州的集群的实例全都出现故障,上海和南京的实例也可以替补上来,系统可用性大大增加,这个过程也叫服务的跨集群调用。
3、服务跨集群调用
如果一个实例不可用了,我们会优先去调用同集群下的另一个实例。但如果一个集群的实例都不可调用了,我们则会跨集群进行调用。
跨集群服务调用示意图:
可以看到杭州集群下面的实例A和实例B都无法正常使用,于是系统跨集群调用到了上海集群的实例C,使得系统可用性大大增加,极大程度避免了服务宕机的风险。
4、 服务分级模型特性
服务分级模型主要具有以下特性:
特性 | 特性描述 |
层级结构 | 服务和配置信息按照层级结构进行存储,包括全局级别 、集群级别、服务级别和实例级别等,每个层级存储的信息具有不同的作用范围和生命周期。 |
继承关系 | Nacos的服务分级存储模型支持继承关系,即更高层级的信息可以被子层级继承和覆盖,实现了信息的统一管理和分级继承。 |
动态更新 | Nacos支持动态更新服务和配置信息,当信息发生变化时,可以及时更新到对应的层级,保证了信息的实时性和准确性。 |
灵活检索 | 通过灵活的查询接口,可以根据不同层级和条件快速检索到所需的服务和配置信息,满足了微服务架构下信息管理的需求。 |
这些特性共同构成了服务分级模型的优势,使得其在微服务架构下得到广泛应用和推广。
二、Nacos实现服务分级模型
1、安装配置Nacos
首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases · alibaba/nacos · GitHub
选择合适的版本并下载,解压缩得到 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 环境变量。
简单配一下:
再次尝试启动 Nacos,这次成功了!
2、项目引入Nacos
首先,创建一个带有生产者和消费者的SpringCloud微服务项目:
这里就不重头带大家新建了,可以直接看我这篇文章:SpringCloud-创建多模块项目
接着对我们 SpringCloud 项目下 每个子项目 引入 Nacos,下面拿 springcloud-provider 这个子项目进行举例,其他子项目改造方法相同:
① pom.xml增加依赖
pom.xml 里增加 Nacos 自动发现的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>
② 启动类添加自动发现注解
启动类增加自动服务发现的注解 @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);
}
}
③ 修改 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: '*'
这样 Nacos 服务就可以自动发现这个子项目的服务了。
访问我们的 Nacos 服务地址:http://localhost:8848/nacos,可以看到控制台的查看已注册服务。
通过以上步骤,我们成功将 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 :
Nacos 里可以看到我们启动的这个实例。
点击详情,可以看到实例所在的集群在 SH:
我们在开启一个不同集群的实例。
复制一个配置:
命名为 xxxx-NJ,表示南京地区集群。
修改 application.yml 配置,集群名为 NJ,端口号为另一端口:
启动该项目,启动成功。
回到 Nacos 网站 ,可以看到明细里多了一个集群实例:
成功实现基于 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的核心设计之一,为微服务架构下的服务发现和配置管理提供了强大支持。通过层级结构、继承关系和动态更新等特性,实现了服务和配置信息的高效管理和快速检索,为微服务架构下的应用开发和运维提供了可靠、灵活的解决方案。