【Spring Cloud】微服务注册中心的工作原理

SueWakeup

                                                     个人主页:SueWakeup

                                                     系列专栏:学习技术栈

                                                     个性签名:人生乏味啊,我欲令之光怪陆离 

 

本文封面由 凯楠📷 友情提供!

 目录

前言 

1. 注册中心的主要作用

2. 常见的注册中心

3. Nacos 服务注册和发现的工作原理

4. Nacos 和 Consul 在服务注册和发现方面的不同

5. 分布式配置管理

6. Nacos 的核心功能

7. 实现配置中心的动态刷新

8. Nacos 作为配置中心的优势

9. Nacos 如何支持灰度发布

10. 使用 Nacos 实现动态路由

11. 使用 Nacos 实现服务的动态权重调整


前言 

Spring、Spring Boot 和 Spring Cloud 都是 Java 领域中广泛使用的框架,在理解 Spring Cloud 的原理之前,我们需要理清这三者之间的关系和区别。

Spring:一个开源的 “轻量级” Java 开发框架,提供丰富的功能和组件,并且包含多个模块(Spring Core、Spring MVC、Spring Data等),核心思想是 IOC(控制反转) 和 APO(面向切面编程)

Spring Boot:Spring 团队推出的用于简化 Spring 应用开发的框架,内置了许多常用的配置,只需少量的配置就能创建独立运行的、生产级别的 Spring 应用

Spring Cloud:基于 Spring Boot 的微服务架构开发工具,为构建分布式系统提供了一整套解决方案。其核心原理涉及到 微服务架构、服务注册与发现、负载均衡、网关等多个方面


1. 注册中心的主要作用

  • 服务发现
    • 服务注册/反注册:保存服务提供者和服务调用者的信息
    • 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,实时推送
    • 服务路由(可选):具有筛选整合服务提供者的能力
  • 服务配置
    • 配置订阅:服务提供者和服务调用者订阅微服务相关的配置
    • 配置下发:主动将配置推送给服务提供者和服务调用者
  • 服务健康检测
    • 检测服务提供者的健康情况

2. 常见的注册中心

  • Zookeeper

分布式服务框架,Apache Hadoop 的子项目

主要解决分布式应用中经常遇到的一些数据管理问题

如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等

  • Eureka

在 Java 语言上,基于 RESTful API 开发的服务注册与发现组件,Spring Cloud Netflix 的重要组件

  • Consul

由 HashiCorp 基于 Go 语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,采用 Raft 算法保证服务的一致性,且支持健康检查

  • Nacos

更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

注册中心 + 配置中心的组合,提供简单易用的特性集,解决微服务开发必会涉及到的 “服务注册与 发现、服务配置、服务管理” 等问题

Spring Cloud Alibaba 组件之一,负责服务注册与发现

组件名语言CAP一致性算法服务健康检查对外暴露接口
EurekaJavaAP可配支持HTTP
ConsulGoCPRaft支持HTTP/DNS
ZookeeperJavaCPPaxos支持客户端
NacosJavaAPRaft支持HTTP

3. Nacos 服务注册和发现的工作原理

  1. 服务注册:在服务实例启动时,向 Nacos 服务器发送一个注册请求。请求包含了服务的相关信息,如服务名、IP地址、端口号等
  2. 服务同步:Nacos 服务器接收到注册信息后,将这些信息存储在服务列表中,并同步到其他 Nacos 节点,保证服务信息的一致性
  3. 服务发现:当客户端需要调用服务时,向Nacos 服务器请求该服务的信息。Nacos 会返回服务列表,客户端可以根据这些信息找到相应的服务实例进行调用
  4. 心跳检测:服务实例会定期向 Nacos 发送心跳包,以证明自己还 “活着” 。如果 Nacos 在配置的时间内未收到某服务实例的心跳,会认为该实例不可用,从服务列表中移除
  5. 服务更新:当服务实例的状态发送变化,或有新的实例注册时,Nacos 会实时更新服务信息,并通知给其他服务消费者

这些功能共同保障了在微服务架构中服务的高效注册、发现和健康状态管理


4. Nacos 和 Consul 在服务注册和发现方面的不同

特性NacosConsul
一致性算法AP模式,侧重于可用性CP模式,侧重于一致性
数据存储支持将服务信息存储在内存和外部数据库中内部的 Raft 协议进行数据同步
健康检查健康检查相对简单更丰富的健康检查机制,如HTTP、TCP、Docker、Shell 脚本等
多数据中心支持用于单数据中心支持多数据中心,适合大规模的分布式系统
配置管理提供服务发现和动态配置服务专注于服务发现

5. 分布式配置管理

  1. 配置中心设置:在 Nacos 中设置全局配置信息,可以包括数据库连接、远程服务地址等
  2. 服务端集成:在微服务应用中集成 Nacos Config 客户端,通过配置文件指定 Nacos 服务器地址和需要订阅的配置信息
  3. 动态更新:当 Nacos 中的配置信息发生变化时,Nacos Config 客户端会自动获取最新配置,并可以动态地更新到应用中,无需重启服务
  4. 配置共享和隔离:支持不同环境和服务的配置隔离,同时也支持公共配置的共享

这种方式大大简化了微服务架构中的配置管理,使得配置的更新和维护更加灵活和高效


6. Nacos 的核心功能

功能描述
服务发现与注册

Nacos 支持服务的动态注册与发现,这使得微服务之间能够灵活通讯,极

大地增强了服务管理和扩展能力

配置管理Nacos 提供动态的配置服务,允许应用在运行时动态调整配置而无需重启,支持配置的版本管理和回滚,以适应持续集成和持续部署(CI / CD)的需要
服务健康监测Nacos 实现了服务健康检查,可以及时发现并处理服务实例的异常,保障系统的高可用性
负载均衡Nacos 支持多种负载均衡策略,能够根据服务实例的运行情况自动调整请求分配,提升服务处理能力和效率
服务分组和命名空间支持通过分组和命名空间对服务进行逻辑隔离,便于在不同环境中管理和运行服务,例如开发、测试和生产环境

7. 实现配置中心的动态刷新

  1. 引入依赖:在项目中引入 Spring Cloud Alibaba Nacos Config 的依赖
  2. 配置文件编写:在 application.properties 或 application.yml 中配置 Nacos Config 相关参数,指定配置中心地址及命名空间
  3. 使用 @Value 或 @ConfigurationProperties 注解:将配置文件中的属性映射到 Java 类的字段上
  4. @RefreshScope 注解:在需要动态刷新配置的类上使用 @RefreshScope 注解
  5. 配置更新监听:配置更新时, Nacos Config 客户端会自动监听到变化,并触发配置的重新加载

8. Nacos 作为配置中心的优势

优势描述
动态配置管理支持配置的动态变更和实时更新,无需重启服务即可生效
多环境支持可以方便地管理和隔离不同环境(开发、测试、生产)的配置
集中式管理提供统一的配置管理界面,方便配置的集中管理和查看
支持多种配置格式支持多种数据格式,如 properties、yaml、json等满足不同场景需求
版本管理和回滚支持配置版本管理,出现问题可以快速回滚到之前的版本
微服务架构适配性特别适合在微服务架构中,与 Spring Cloud 无缝集成

9. Nacos 如何支持灰度发布

方式描述
流量分配通过 Nacos 配置不同的流量规则,将用户流量分配到不同的服务实例
版本管理通过版本标签管理不同的服务实例,实现灰度发布
配置管理利用 Nacos 的动态配置管理功能,动态调整服务配置
元数据控制使用服务元数据定义不同的服务分组,实现灰度策略
条件路由根据请求的参数或头信息,路由到不同版本的服务实例

10. 使用 Nacos 实现动态路由

  1. 集成Gateway:在项目中集成 Spring Cloud Gateway 作为 API网关
  2. Nacos 作为配置中心:利用 Nacos 作为动态路由的配置中心,存储路由规则
  3. 动态更新路由:配置 Spring Cloud Gateway 从 Nacos 动态加载路由规则,当 Nacos 中的路由配置发生变化时,Gateway 能够自动更新路由规则
  4. 路由规则定义:在 Nacos 中定义路由规则,如路径匹配、重定向、熔断等
  5. 验证和测试:对动态路由进行测试,确保路由规则的正确性和动态更新功能的有效性

11. 使用 Nacos 实现服务的动态权重调整

  • 服务注册时指定权重:在服务注册到 Nacos 时,可以在服务的元数据中指定权重信息
  • 动态更新权重:通过修改 Nacos 中服务元数据的权重值,实现权重的动态调整
  • 负载均衡策略:在服务消费者端,配置负载均衡策略以支持基于权重的路由决策
  • 权重变更生效:Nacos 客户端听到权重变更后,自动更新本地缓存的服务信息,实现权重调整的即时生效
  • 服务调用适应:服务消费者在进行服务调用时,会根据最新的权重信息选择服务实例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

护眼大路灯哪个更适合学生?大路灯购选分享,经验总结!

在当前开节奏的生活领域中,作为测评师我观察到,大路灯作为一种新型照明的补光工具,逐渐被越来越多的人融入家庭生活中。这种设备无疑为用眼人群带来了显著的好处。但许多用户反馈中也频繁提及平时是眼睛疲劳感越来越严重等副情况,…

Java 学习和实践笔记(42):内部类(inner class)

内部类的两个要点: 1)内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直 接访问。 2)内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类 不能访问内部类的内部属性。| 注意&…

【开源】SpringBoot框架开发个人保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 保险档案模块2.3 保险订单模块2.4 保险理赔模块 三、系统展示四、核心代码4.1 查询保险产品4.2 新增保险预定4.3 订单支付4.4 新增理赔单4.5 查询保险理赔 五、免责说明 一、摘要 1.1 项目介绍 基于J…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库, 功能模块: 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

【解决】Unity Profiler | Sempaphore.WaitForSignal

开发平台:Unity 2022 版本以上 开发语言:CSharp 6.0 编程平台:Visual Studio 2022 关键词:Sempaphore.WaitForSignal   问题背景 开发过程中出现 Waiting to excute code… 长时间阻碍运行。使用 逐对象排查法 确认影响无法运行…

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群,经过调研,选择使用Kuboard-Spray工具搭建K8S集群,降低学习成本,提高安装效率。 为了简化安装使用集群的过程,搭建了私有…

excel处理_多个excel文件合并

data文件夹内,有多个xls文件。每个xls文件格式一致, 表头占两行,表位汇总数据占一行。 表头两行,拼接前第二行设置为表头,且删除第二行。 在python读入的dataframe中,游轮成本表是表头,第一行是…

解密Mysql数据库引擎:探究其背后的神秘力量(二)

本系列文章简介: 在本系列文章中,我们将从MySQL的基础知识入手,逐步深入到数据库引擎的内部机制。我们将详细介绍MySQL中常用的几种数据库引擎,包括InnoDB、MyISAM等,分析它们的优缺点以及适用场景。同时,我…

[AutoSar]BSW_Com015 PDUR 模块配置

目录 关键词平台说明一、Abbreviations二、PduRBswModules三、PduRGeneration四、PduRDestPdus4.1 全局PDU ID和本地PDU ID 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语言C&#xff0…

亮数据Bright Data,跨境电商一站式解决方案

目录 一、跨境电商的瓶颈1、技术门槛2、语言问题3、网络稳定性4、验证码处理和自动识别5、数据安全6、法律法规 二、机不可失三、动态住宅代理1、网络代理2、动态住宅代理3、动态住宅代理的主要优点 四、动态住宅代理的使用场景五、如何使用亮数据动态代理1、开始使用2、添加新…

【C++】为什么vector的地址与首元素地址不同?

文章目录 一、问题发现:二、结果分析三、问题解析 一、问题发现: &vector和&vector[0]得到的两个地址居然不相同,对数组array取变量名地址和取首元素地址的结果是相同的。这是为啥呢? 使用下面代码进行验证:…

harbor迁移

采用从原仓库拉取镜像的方式 根据情况填,空的话,默认就是从原harbor的abc仓库拉到现harbor的abc仓库

termux安装

termux安装Python和postgres 安装python 安装pg数据库

LabVIEW高效光伏数据监控与管理系统

LabVIEW高效光伏数据监控与管理系统 随着新能源技术的发展,光伏发电系统作为一种清洁、高效的能源获取方式受到了广泛的关注。但是,由于光伏发电的特性受到多种环境因素的影响,其运行效率和安全性成为了关键问题。因此,开发一个高…

电脑硬盘误删怎么恢复,误删硬盘的文件能不能再恢复

误删硬盘的文件能不能再恢复?很多朋友都很关心这个问题,不用担心,误删硬盘文件是可以恢复的!使用电脑不可避免会遇到一些糊涂的时刻,比如误删了重要的文件。当我们发现自己不小心将硬盘上的文件删除时,心里…

ElasticSearch - 基本操作

前言 本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

Python爬虫入门:HTTP与URL基础解析及简单示例实践

在数字化时代,数据已成为一种宝贵的资源。Python作为一种强大的编程语言,在数据采集和处理方面表现出色。爬虫技术,即网络爬虫,是Python中用于数据采集的重要工具。本文作为Python爬虫基础教程的第一篇,将深入讲解URL和…

酷开系统满足你的需求,加入酷开会员开启娱乐之旅

酷开科技深知家庭娱乐在我们生活中的重要性,因此,酷开科技不断努力为我们带来更好的内容和服务,在这里,我们能够享受到家庭娱乐的乐趣和便利,感受到酷开科技带来的温暖。电影迷、游戏迷还是音乐爱好者,酷开…

多项式朴素贝叶斯分类器

在这篇文章中,我们介绍多项式朴素贝叶斯分类器是如何工作的,然后使用scikit-learn作为实际工作的示例来介绍如何使用。 与假设高斯分布的高斯朴素贝叶斯分类器相反,多项式朴素贝叶斯分类器依赖于多项分布。通过学习/估计每个类的多项概率来“…

2024 年 6 款最佳 SD 卡恢复软件

“有没有最好的 SD 卡恢复软件可以推荐给我来恢复 SD 卡上丢失的数据?程序太多了。我很难选择合适的存储卡数据恢复软件。” 有一天,我的朋友让我向他推荐最好的SD卡数据恢复软件,因为他在网上搜索,发现有很多选择,而…