SpringCloud Nacos服务分级存储模型详解
作者:Damon小智
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的核心设计之一,为微服务架构下的服务发现和配置管理提供了强大支持。通过层级结构、继承关系和动态更新等特性,实现了服务和配置信息的高效管理和快速检索,为微服务架构下的应用开发和运维提供了可靠、灵活的解决方案。
到此这篇关于SpringCloud Nacos服务分级存储模型详解的文章就介绍到这了,更多相关SpringCloud Nacos分级存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!