SpringCloud-Nacos服务分级存储模型

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-providercloud:nacos:discovery:#nacos地址server-addr: 127.0.0.1:8848config: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-providercloud:nacos:discovery:#nacos地址server-addr: 127.0.0.1:8848cluster-name: SHconfig: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.mzph.cn/news/678296.shtml

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

相关文章

CVE-2021-44915 漏洞复现

CVE-2021-44915 路由/admin/admin.php是后台&#xff0c;登录账号和密码默认是admin、tao&#xff0c;选择管理栏目菜单。 点击编辑&#xff0c;然后随便改点内容&#xff0c;提交时候抓包。 id是注入点。直接拿sqlmap跑就行了。

FPGA_工程_基于rom的vga显示

一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…

Redis核心技术与实战【学习笔记】 - 26.Redis数分布优化(应对数据倾斜问题)

简述 在切片集群中&#xff0c;数据会按照一定的规则分散到不同的实例上保存。比如&#xff0c;Redis Cluster 或 Codis 会先按照 CRC 算法的计算值对 Slot&#xff08;逻辑槽&#xff09;取模&#xff0c;同时 Slot 又有运维管理员分配到不同的实例上。这样&#xff0c;数据就…

【芯片设计- RTL 数字逻辑设计入门 番外篇 9 -- SOC 中PL端与PS端详细介绍】

文章目录 Programmable Logic and Processing SystemPL&#xff08;Programmable Logic&#xff09;特点PS和PL之间的协同设计和开发工具 Programmable Logic and Processing System 在系统级芯片&#xff08;SoC&#xff09;的上下文中&#xff0c;“PL” 通常指的是可编程逻…

test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试&#xff08;Fuzz Testing&#xff09; test fuzz-…

自动化AD域枚举和漏洞检测脚本

linWinPwn 是一个 bash 脚本&#xff0c;可自动执行许多 Active Directory 枚举和漏洞检查。该脚本基于很多现有工具实现其功能&#xff0c;其中包括&#xff1a;impacket、bloodhound、netexec、enum4linux-ng、ldapdomaindump、lsassy、smbmap、kerbrute、adidnsdump、certip…

YOLO系列详解(YOLOV1-YOLOV3)

YOLO算法 简介 本文主要介绍YOLO算法&#xff0c;包括YOLOv1、YOLOv2/YOLO9000和YOLOv3。YOLO算法作为one-stage目标检测算法最典型的代表&#xff0c;其基于深度神经网络进行对象的识别和定位&#xff0c;运行速度很快&#xff0c;可以用于实时系统。了解YOLO是对目标检测算…

【leetcode热题100】子集 II

给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2] 输出…

C++初阶:适合新手的手撕vector(模拟实现vector)

上次讲了常用的接口&#xff1a;C初阶&#xff1a;容器&#xff08;Containers&#xff09;vector常用接口详解 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数&#xff08;constructor)4.基本函数&#xff08;size(),capacity(),resize(),reserve())4.增…

算法学习——LeetCode力扣栈与队列篇1

算法学习——LeetCode力扣栈与队列篇1 232. 用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQu…

HiveSQL——sum(if()) 条件累加

注&#xff1a;参考文章&#xff1a; HiveSql面试题10--sum(if)统计问题_hive sum if-CSDN博客文章浏览阅读5.8k次&#xff0c;点赞6次&#xff0c;收藏19次。0 需求分析t_order表结构字段名含义oid订单编号uid用户idotime订单时间&#xff08;yyyy-MM-dd&#xff09;oamount订…

阿里云游戏服务器多少钱一年?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

【计算几何】确定两条连续线段向左转还是向右转

确定两条连续线段向左转还是向右转 目录 一、说明二、算法2.1 两点的叉积2.2 两个段的叉积 三、旋转方向判别3.1 左转3.2、右转3.3 共线判别 一、说明 如果是作图&#xff0c;或者是判别小车轨迹。为了直观地了解&#xff0c;从当前点到下一个点过程中&#xff0c;什么是左转、…

第77讲用户管理功能实现

用户管理功能实现 前端&#xff1a; views/user/index.vue <template><el-card><el-row :gutter"20" class"header"><el-col :span"7"><el-input placeholder"请输入用户昵称..." clearable v-model"…

JavaEE作业-实验二

目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 实现两个整数求和的WEB程序 2 实验要求 ①采用SpringMVC框架实现 ②数据传送到WEB界面采用JSON方式 3 思路 ①创建一个SpringMVC项目&#xff0c;配置好相关的依赖和配置文件。 ②创建一个Con…

Centos7之忘记Root用户密码的处理方式

Centos7之忘记Root用户密码的处理方式 文章目录 Centos7之忘记Root用户密码的处理方式1.场景描述2. 重置密码1. 重启系统进入编辑界面2. 按方向键下键↓&#xff0c;找到设置语言的地方3. 进入bash界面后&#xff0c;可以输入passwd命令重新设置root密码 1.场景描述 长时间未使…

导数的几何意义【高数笔记】

1. 高数中的导数几何意义&#xff0c;与中学中斜率的联系 2. 导函数与导数的区别和联系又是什么 3. 导数的几何意义的题型是什么 4. 这些题型又有哪些区别 5. 点在曲线外和点在曲线上&#xff0c;需要注意什么 6. 法线和切线有什么关系 7. 法线是什么

无性能损失!让SAM加速近50倍!EfficientViT-SAM来了!

今天给大家分享一个加速视觉分割大模型的工作&#xff1a;EfficientViT-SAM。这是一种新的加速SAM系列。保留了SAM的轻量级提示编码器和mask解码器&#xff0c;同时用EfficientViT替换了沉重的图像编码器。对于训练&#xff0c;首先从SAM-ViT-H图像编码器到EfficientViT的知识蒸…

Github 2024-02-11 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-11统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4非开发语言项目2C项目1C项目1Solidity项目1JavaScript项目1Rust项目1HTML项目1 免费服务列表 | f…

实战案例:将已有的 MySQL8.0 单机架构变成主从复制架构

操作步骤 修改 master 主节点 的配置&#xff08; server-id log-bin &#xff09;master 主节点 完全备份&#xff08; mysqldump &#xff09;master 主节点 创建复制用户并授权master 主节点 将完全备份文件拷贝至从节点修改 slave 从节点 的配置&#xff08; server-id rea…