Spring Cloud服务发现与注册的原理与实现
Spring Cloud服务发现与注册的原理与实现
- 一、简介
- 1 服务发现的定义
- 2 服务发现的意义
- 二、Spring Cloud服务注册与发现的实现
- 1 Spring Cloud服务注册
- 1.1 服务注册的基本框架
- 1.2 服务注册的实现方式
- 2 Spring Cloud服务发现
- 2.1 服务发现的基本框架
- 2.2 服务发现的实现方式
- 三、Spring Cloud服务注册与发现的原理
- 3.1 Eureka的原理
- 3.1.1 Eureka的基本概念
- 3.1.2 Eureka的工作原理
- 注册中心
- 服务实例
- 3.2 Zookeeper的原理
- 3.2.1 Zookeeper的基本概念
- 数据模型
- 会话
- 3.2.2 Zookeeper的工作原理
- 3.3 Consul的原理
- 3.3.1 Consul的基本概念
- 服务发现
- 健康检查
- 3.3.2 Consul的工作原理
- 四、Spring Cloud服务注册与发现的应用场景
- 4.1 微服务架构中的应用场景
- 4.2 服务治理与负载均衡的应用场景
- 4.3 分布式集群中的应用场景
一、简介
1 服务发现的定义
服务发现是指在一个分布式系统中,服务提供者将自己注册到系统中心,并且服务消费者可以从系统中心查询所有可用的服务的过程。
2 服务发现的意义
通过服务发现,服务消费者可以方便地获取可用的服务实例,而无需了解服务实例的具体位置和部署情况。同时,服务提供者也可以方便地将自己的服务注册到系统中心,让使用方更容易地找到服务。
二、Spring Cloud服务注册与发现的实现
1 Spring Cloud服务注册
1.1 服务注册的基本框架
服务注册的基本框架包括三部分:服务提供者、服务注册中心和服务消费者。其中,服务提供者将自己注册到服务注册中心,服务消费者从服务注册中心获取可用的服务列表。
1.2 服务注册的实现方式
Spring Cloud提供了几种服务注册的实现方式,包括:
- Eureka:Netflix公司开源的、最为流行的一种服务注册中心;
- Consul:由Hashicorp公司开发的一种服务发现组件,支持多数据中心;
- ZooKeeper:由Apache项目开发的一种分布式协调框架。
这里以Eureka为例,介绍Spring Cloud服务注册的实现方式。
首先需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
接着,在启动类中加上@EnableEurekaServer注解,表明该服务作为Eureka Server运行:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
在配置文件application.yml中指定服务端口、Eureka相关配置:
server:port: 8761eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: false
至此,Eureka Server配置完成。
2 Spring Cloud服务发现
2.1 服务发现的基本框架
服务发现的基本框架也包括三部分:服务提供者、服务注册中心和服务消费者。其中,服务提供者将自己注册到服务注册中心,服务消费者从服务注册中心获取可用的服务列表。
2.2 服务发现的实现方式
同样以Eureka为例,介绍Spring Cloud服务发现的实现方式。
服务提供者需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在启动类中加上@EnableDiscoveryClient注解,表明该服务需要作为Eureka Client运行,并向Eureka Server注册:
@SpringBootApplication
@EnableDiscoveryClient
public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);}
}
同时,在配置文件application.yml中指定应用名称、Eureka相关配置:
spring:application:name: demp-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/
至此,服务提供者的配置完成。
服务消费者需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在需要调用服务的地方使用@LoadBalanced注解,让RestTemplate具有负载均衡的能力:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}
同时,在配置文件application.yml中指定应用名称、Eureka相关配置:
spring:application:name: demp-service-consumereureka:client:service-url:defaultZone: http://localhost:8761/eureka/
至此,服务消费者的配置完成。
通过以上配置,Spring Cloud可以实现服务注册和发现的功能。
三、Spring Cloud服务注册与发现的原理
3.1 Eureka的原理
3.1.1 Eureka的基本概念
注册中心:
Eureka server是Spring Cloud的核心组件之一,它提供了服务注册和发现的功能。即服务提供者将自己的服务注册到Eureka Server,服务消费者从Eureka Server中查找所需的服务并进行调用。
服务实例:
服务实例是指暴露出来的某个服务,可以是普通的Java服务、也可以是Web Service服务等。
3.1.2 Eureka的工作原理
注册中心
注册中心是一个基于REST的服务,主要实现服务注册、服务续约、服务下线以及查询功能。Eureka Server接收服务实例的注册请求,并将服务实例信息存储在内存中(HashMap)。当Eureka Server收到服务实例的续约请求时,会更新服务实例在内存中的信息,避免服务实例过期失效。也可以通过URL获取注册中心中所有可用的服务。
服务实例
服务实例启动后会向Eureka Server发送注册请求,告知Eureka Server自己的地址(ip:port)、服务名、健康状态以及一些元数据。同时服务实例会以心跳的方式向Eureka Server发送服务续约请求,在规定时间内没有接收到续约请求,则视为服务实例失效。
3.2 Zookeeper的原理
3.2.1 Zookeeper的基本概念
Zookeeper是一个分布式协调服务,主要应用于高可用场景下的协调任务。Zookeeper提供了数据地址、配置管理、同步等功能。
数据模型
Zookeeper所有的数据都保存在一个树形结构中,每个节点称为一个Znode。每个Znode都有名称和数据两个部分组成。数据通常是空字符串,但是也可以存储数据。
会话
不同的客户端需要连接到Zookeeper集群进行交互,这些客户端与Zookeeper服务器建立会话。Zookeeper会话与传统应用服务器会话的概念类似,但具有独特的特征,如一些会话变量和超时机制。
3.2.2 Zookeeper的工作原理
Zookeeper集群中的各个节点通过Zab协议来实现数据一致性。集群中的一个Zookeeper节点被选举为leader,所有其它follower节点负责数据复制。当leader节点失效时,follower中的某一个节点会被选举为新的leader。
3.3 Consul的原理
3.3.1 Consul的基本概念
Consul是一个分布式的高可用服务发现和配置管理系统。它提供了服务发现、健康检查、KV存储、安全服务等功能。
服务发现
Consul基于HTTP提供服务发现。服务消费者可以使用HTTP协议从Consul服务端获取服务提供者的地址和端口号。
健康检查
Consul通过健康检查确定哪些服务实例对外提供服务。Consul同时支持TCP、HTTP和Docker容器的健康检查方式。
3.3.2 Consul的工作原理
Consul集群实际上就是多个有状态的服务器管理和协调数据。这些节点中的一个被选为leader,所有其它follower节点负责数据复制。
四、Spring Cloud服务注册与发现的应用场景
4.1 微服务架构中的应用场景
在微服务架构中,服务之间可能会随时发生变化,例如某个服务重启、一台机器下线等,因此服务访问地址的获取需要具备高度灵活性和实时性。服务注册中心的出现就是为了解决这个问题,它可以自动进行服务注册和服务发现,大大提高了系统的可扩展性和可维护性。
4.2 服务治理与负载均衡的应用场景
服务金丝雀发布、分阶段上线、AB测试等操作,都离不开服务治理,而服务治理又需要服务注册中心来协同实现。在这些高级应用场景中,服务注册中心还可以和负载均衡器等组件配合,提供更加全面的服务治理和负载均衡功能。
4.3 分布式集群中的应用场景
在分布式系统中,节点数量大、拓扑图复杂,因此需要一个中心化的配置管理中心。服务注册中心可以实现系统配置的自动管理和更新,同时由于各个服务的名称是由它们自己注册到注册中心上的,因此它能够帮助开发人员快速获得系统内部服务之间的依赖关系。
相关文章:
Spring Cloud服务发现与注册的原理与实现
Spring Cloud服务发现与注册的原理与实现 一、简介1 服务发现的定义2 服务发现的意义 二、Spring Cloud服务注册与发现的实现1 Spring Cloud服务注册1.1 服务注册的基本框架1.2 服务注册的实现方式 2 Spring Cloud服务发现2.1 服务发现的基本框架2.2 服务发现的实现方式 三、Sp…...
FFmpeg入门之简单介绍
FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…...
新版DBeaver调整编辑窗口字体大小
网上有DBeave字体设置了,但看了下,目前最新版的已经更改了首选项分组,层级发生了变化,这里记录一下2022.08.21版的设置。 默认字体是10,比较小,改为11或更大会好看些。...
《vue3实战》运用push()方法实现电影评价系统的添加功能
目录 前言 电影评价系统的添加功能是什么? 电影评价系统的添加功能有什么作用? 一、push()方法是什么?它有什么作用? 含义: 作用: 二、功能实现 这段是添加开始时点击按钮使…...
JavaScript学习笔记02
JavaScript笔记02 数据类型详解 字符串 在 JavaScript 中正常的字符串都使用单引号 或者双引号" "包裹:例: 转义字符 在 JavaScript 字符串中也可用使用转义字符(参考:详解转义字符):例&…...
短信过滤 APP 开发
本文字数:7033字 预计阅读时间:42分钟 一直想开发一个自己的短信过滤 APP,但是一直没有具体实施,现在终于静下心来,边开发边记录下整体的开发过程。 01 垃圾短信样本 遇到的第一个问题是,既然要过滤垃圾短信…...
【计算机基础知识7】垃圾回收机制与内存泄漏
目录 前言 一、垃圾回收机制的工作原理 1. 标记-清除算法的基本原理 2. 垃圾回收器的类型及其工作方式 3. 垃圾回收的回收策略和触发机制 三、内存泄漏的定义和原因 1. 内存泄漏的概念和影响 2. 常见的内存泄漏情况及其原因 四、如何避免和处理内存泄漏 1. 使用合适…...
[学习笔记]CS224W
资料: 课程网址 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】 斯坦福大学CS224W图机器学习公开课-同济子豪兄中文精讲 图的基本表示 图是描述各种关联现象的通用语言。与传统数据分析中的样本服从独立同分布假设不一样,图数据自带关联…...
华为云API对话机器人CBS的魅力—实现简单的对话操作
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI智能的问答管理、全面的对话管理、高效训练部署 1.IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts …...
精益制造、质量管控,盛虹百世慧共同启动MOM(制造运营管理)
百世慧科技依托在电池智能制造行业中的丰富经验,与盛虹动能达成合作,为其提供MOM制造运营管理平台,并以此为起点,全面提升盛虹动能的制造管理水平与运营体系。 行业困境 中国动力电池已然发展为全球最大的电池产业,但…...
【科研论文配图绘制】task7密度图绘制
【科研论文配图绘制】task7密度图绘制 task7 了解密度图的定义,清楚密度图是常用使用常见,掌握密度图绘制。 1.什么是密度图 密度图(Density Plot)是一种用于可视化数据分布的图表类型。它通过在数据中创建平滑的概率密度曲线…...
Python3 集合
Python3 集合 集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 创建格式: parame …...
【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!!
【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!! 前言一书籍亮点二作者简介三内容简介四购买链接五参与方式六往期赠书回顾 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖&am…...
Java多线程——同步
同步是什么? 当两个线程同时对一个变量进行修改时,不同的访问顺序会造成不一样的结果,这时候就需要同步保证结果的唯一性。 未同步时 新建Bank类,transfer()用于在两个账户之间转账金额 class Bank {private double[] account…...
Vue+NodeJS实现邮件发送
一.邮箱配置 这里以QQ邮箱为例,网易邮箱类似. 设置->账号 二.后端服务搭建 index.js const express require(express) const router require(./router); const app express()// 使用路由文件 app.use(/,router);app.listen(3000, () > {console.log(server…...
Go语言网络编程(socket编程)TCP粘包
1、TCP粘包 服务端代码如下: // socket_stick/server/main.gofunc process(conn net.Conn) {defer conn.Close()reader : bufio.NewReader(conn)var buf [1024]bytefor {n, err : reader.Read(buf[:])if err io.EOF {break}if err ! nil {fmt.Println("read…...
【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数
前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏…...
PaddleOCR学习笔记3-通用识别服务
今天优化了下之前的初步识别服务的python代码和html代码。 采用flask paddleocr bootstrap快速搭建OCR识别服务。 代码结构如下: 模板页面代码文件如下: upload.html : <!DOCTYPE html> <html> <meta charset"utf-8"> …...
9.8 校招 实习 内推 面经
绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 长安福特2024校园招聘正式启动 校招 | 长安福特2024校园招聘正式启动 2、2023校招总结--SLAM岗位 - 5 2023校招总结--SLAM岗位 - 5 3、校招&实习 | 格灵深瞳2024秋季校园招聘启…...
web前段与后端的区别优漫动游
要了解web前后端的区别,首先必须得清楚什么是web前端和web后端。 web前段与后端的区别 首先:web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hyp…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
