SpringCloud-Nacos服务分级存储模型

news2024/11/26 4:28:58

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1444417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7搭建Hadoop集群

准备工作 1、准备三台虚拟机&#xff0c;参考&#xff1a;CentOS7集群环境搭建&#xff08;3台&#xff09;-CSDN博客 2、配置虚拟机之间免密登录&#xff0c;参考&#xff1a;CentOS7集群配置免密登录-CSDN博客 3、虚拟机分别安装jdk&#xff0c;参考&#xff1a;CentOS7集…

springboot179基于javaweb的流浪宠物管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

HiveSQL——用户行为路径分析

注&#xff1a;参考文档&#xff1a; SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log&#xff0c; 大概字段有&…

CVE-2012-1823 漏洞复现

CVE-2012-1823 PHP SAPI 与运行模式 首先&#xff0c;介绍一下PHP的运行模式。 下载PHP源码&#xff0c;可以看到其中有个目录叫sapi。sapi在PHP中的作用&#xff0c;类似于一个消息的“传递者”&#xff0c;比如在《Fastcgi协议分析 && PHP-FPM未授权访问漏洞 &…

【前后端的那些事】2万字详解WebRTC + 入门demo代码解析

文章目录 构建WebRTC需要的协议1. ICE2. STUN3. NAT4. TURN5.SDP WebRTC通讯过程1. 大致流程2. 详细流程3. 核心api3.1 RTCPeerConnection3.2 媒体协商3.3 重要事件 代码编写1. 什么是websocket2. 消息实体类Message3. 业务流程图4. 搭建前后端环境5. join -- handleJoin -- jo…

2月11日作业

1、请使用递归实现n! 代码&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h>int fun(int n) {if(n1)return 1;else{return n*fun(n-1);} }int main(int argc, const char *argv[]) {int n;printf("please enter n:");scanf…

keil调试出现cannot evaluate新思路

我在用最新的keil时也出现了这个问题&#xff0c;网上说的办法几乎没啥用&#xff0c;包括魔术棒的设置和将变量定义为全局变量&#xff0c;都没用。 这里我使用的是keil5.13&#xff0c;编译器是6.21&#xff0c;硬件是STM32F407VET6 可以看到&#xff0c;即使是定义为全局变量…

GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题

Eclipse Jetty 资源管理错误漏洞(CVE-2021-28165) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658) Jetty 信息泄露漏洞(CVE-2017-9735) Eclipse Jetty 安全漏洞(CVE-2022-20…

二分搜索法的探究与心得

引言 在计算机科学中&#xff0c;二分搜索&#xff08;Binary Search&#xff09;算法是一种在有序数组中查找特定元素的基本搜索技术。其优点在于高效的搜索速度&#xff0c;时间复杂度为 ( O(log n) )&#xff0c;这一点与时间复杂度为O(n) 的线性搜索法相比&#xff0c;效率…

cad基础学习

基础操作与设置 切换工作空间 调整鼠标 界面右击&#xff0c;选项 选项中找到显示&#xff0c;十字光标调到最大 当然也可以输入命令op,回车。它会自动打开这个界面 画一个直线 上面选直接&#xff0c;单击俩个点&#xff0c;画出一个直线。然后空格收尾&#xff0c;这就画出…

Python API的使用简述

文章目录 Web APIGit 和 GitHub使用 API 调用请求数据安装 requests处理响应 API处理响应字典监视API的速率限制使用 Pygal 可视化仓库改进Pygal图表添加自定义工具提示 本篇文章&#xff1a;我们叙述如何编写一个独立的程序&#xff0c;并对其获取的数据进行可视化。这个程序将…

文件上传总结:用原生解决前端文件上传操作(单个,多个,大文件切片)

目录 第一章 前言 第二章 理解文件上传的对象 2.1 如何利用原生实现 2.2 认识理解文件上传的四个对象 2.2.1 file对象 2.2.2 blob对象 2.2.3 formData对象 2.2.4 fileReader对象 2.2.4.1 了解fileReader对象基本属性 2.2.4.2 了解 fileReader对象基本方法 2.2.4.3…

[office] Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 #知识分享#微信#经验分享

Excel2019函数MAXIFS怎么使用&#xff1f;Excel2019函数MAXIFS使用教程 Excel2019函数MAXIFS怎么使用&#xff1f;这篇文章主要介绍了Excel2019函数MAXIFS使用教程,需要的朋友可以参考下 在今年&#xff0c;Excel除了新版本Excel2019&#xff0c;其中有一个新功能MAXIFS函数&am…

知识价值2-什么是IDE?新手用哪个IDE比较好?

IDE是集成开发环境&#xff08;Integrated Development Environment&#xff09;的缩写&#xff0c;是一种软件应用程序&#xff0c;旨在提供集成的工具集&#xff0c;以方便开发人员进行软件开发。IDE通常包括代码编辑器、编译器、调试器和其他工具&#xff0c;以支持软件开发…

使用耳机壳UV树脂制作一个耳机壳需要多长时间?

使用耳机壳UV树脂制作一个耳机壳所需的时间取决于多个因素&#xff0c;包括工艺流程、加工方式、设备和技术水平等。一般来说&#xff0c;制作一个耳机壳需要数小时到数天不等。 以下是影响制作时间的几个主要因素&#xff1a; 获取耳模时间&#xff1a;获取耳模的时间取决于…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(一)项目概述

黑马程序员最新Java项目实战《苍穹外卖》&#xff0c;最适合新手的SpringBootSSM的企业级Java项目实战。 项目简介 《苍穹外卖》项目的定位是一款为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的软件产品。该项目是一个在线外卖订购系统&#xff0c;顾客可以通过网站或者…

RabbitMQ的延迟队列实现[死信队列](笔记一)

关于死信队列的使用场景不再强调&#xff0c;只针对服务端配置 注意&#xff1a; 本文只针对实现死信队列的rabbitMQ基本配置步骤进行阐述和实现 目录 1、docker-compose 安装rabbitMq2、查看对应的版本及插件下载3、安装插件和检测 1、docker-compose 安装rabbitMq a、使用d…

错误的集合(力扣刷题)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 由于作者比较菜&#xff0c;还没学malloc这个函数&#xff0c;因此这个题目只写一些与原题大致的思路。 题目链接&#xff1a;645. 错误的集合 - 力扣…

任务管理软件的实用价值及优选推荐:提升工作效率的利器

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用&#xff0c;在这种环境中多人在处理需要跟踪和监视的任务。无论是初创公司、中小型企业还是大型组织&#xff0c;都可以从任务管理…