Spring Cloud的五大组件你知道多少

news2024/9/28 7:15:42

前言

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

青柠自己现在也在跟着大佬学习,大佬常说的一句话的,你的学会封装。

image-20230504091256969

现在就来讲SpringCloud的五大组件

1、Eureka注册中心

举一个电商项目的例子,有订单服务,库存服务,积分服务以及仓储服务等。

在用户购买商品并且下单后,需要修改订单状态,减少库存,增加用户相应的积分,并 且通知仓储中心进行发货,这个时候订单服务需要怎么去一一联系各个服务呢?就算联 系上怎么去调用也是一个问题,这里就引出了Eureka注册中心。

image-20230504090907036

首先,就是在订单服务、库存服务、积分服务以及仓储服务中添加一个EurekaClient组件,其中,库存服务、积分服务以及仓储服务通过这个组件将自己在哪个机器上,监听哪个端口的信息注册到EurekaServer中,EurekaServer中有个注册表,是专门保存这些信息的。

然后,订单服务中的EurekaClient询问EurekaServer组件库存服务、积分服务以及仓储服务都在哪台机器上,监听的端口号是什么,订单服务获取这些信息后调取每一个服务就从自己本地中获取想要调取服务的位置和端口,收到响应后,发送请求过去调取要使用的接口即可。

2、Feign 声明式WebService客户端

拿刚才的例子说,订单服务确实知道了库存服务、积分服务以及仓储服务在哪里了,同时也有监听着端口号,但是新的问题又来了,难道订单服务交互其他三个服务的时候都要写一大堆代码,跟其他服务建立连接,然后构造复杂的请求,然后发送请求过去吗?

答案是No,这里就引出了Feign声明式WebService客户端。

image-20230504090926453

首先说明,Feign的一个机制就是使用了动态代理,如果你对某个接口定义了@FeignClient注解,那么Feign就会针对这个接口创建一个动态代理。

然后,你调用这个接口的时候,其实就是调用了Feign为这个接口创建的动态代理,这个是核心中的核心,Feign的动态代理会根据你在接口的定义的@RequestMapping等注解,来动态构造你要请求的服务地址,最后根据这个地址发送请求,解析相应。

3、Ribbon 负载均衡

继续拿上一个的例子说,Feign确实方便了许多,但是新的问题出来了,如果库存服务上有多台机器,那Feign怎么知道请求的是哪台机器呢?这里就引出了Ribbon负载均衡。

Ribbon会在你每次请求的时候选择一台机器,均匀的将请求发送到各个机器上,Ribbon默认使用的是RoundRobin轮询算法,顾名思义,就是请求到达的时候,对每台机器进行挨个询问,如果订单服务对库存发动了十次请求,那么就会先让你请求第一台机器,然后是第二台机器········第十台机器。

image-20230504091319570

首先说明,Feign的一个机制就是使用了动态代理,如果你对某个接口定义了@FeignClient注解,那么Feign就会针对这个接口创建一个动态代理。  然后,你调用这个接口的时候,其实就是调用了Feign为这个接口创建的动态代理,这个是核心中的核心,Feign的动态代理会根据你在接口的定义的@RequestMapping等注解,来动态构造你要请求的服务地址,最后根据这个地址发送请求,解析相应。

Ribbon与Feign和Eureka一起工作。

首先,Ribbon通过EurekaClient 获取对应的服务信息表,也就知道了所有的服务都部署在哪台机器上,在监听什么端口。然后,Ribbon获取到请求后,使用轮询算法,从中选择一台机器。

最后,Feign就会针对这些机器构造并发出请求,可以参考下图思考:

image-20230504090947147

首先说明,Feign的一个机制就是使用了动态代理,如果你对某个接口定义了@FeignClient注解,那么Feign就会针对这个接口创建一个动态代理。

然后,你调用这个接口的时候,其实就是调用了Feign为这个接口创建的动态代理,这个是核心中的核心,Feign的动态代理会根据你在接口的定义的@RequestMapping等注解,来动态构造你要请求的服务地址,最后根据这个地址发送请求,解析相应。

4、Hystrix熔断器

继续拿上例来说,订单服务在一个业务流程里需要调用三个服务,现在假设订单服务自己最多只有100个线程可以接受请求,然后呢,积分服务不幸的挂掉了,每次订单服务调用积分服务的时候都会卡几秒钟,然后抛出异常。

大家可以考虑一下为什么会出现这样的问题?如果系统在高并发的情况下,大量的请求涌进来,订单服务的100个线程会卡在积分服务这里,导致订单服务没有一个线程可以处理请求,然后又有第101个请求订单服务的时候,发现订单服务崩了,不接受请求了,就会导致其他服务也会挂掉,这就是雪崩效应,一个服务挂掉引起的连锁反应。

这里我们可以思考一下,就算积分服务挂掉了,订单服务也可以不用挂啊?为什么?我们结合业务来看,只要订单服务修改订单状态,减少库存并通知仓储进行发货就OK了,如果积分服务挂了,大不了等他恢复之后,慢慢人肉手工恢复数据!为啥一定要因为一个积分服务挂了,就直接导致订单服务也挂了呢?不可以接受!这里就引出了SpringCloud 的组件:Hystrix熔断器。

image-20230504091009108

现在的情况就是积分服务挂掉了,但是仓储服务与库存服务都可以正常工作,在订单服务调用积分服务的时候每次都要卡几秒干啥?一点意义也没有,所以我们直接对积分服务做熔断,比如说在五秒内请求积分服务失败就直接返回,这个过程就是熔断。

在熔断的同时我们还要做一件事,订单服务每次调用积分服务的时候,就在数据库中添加一条信息,例如:给张三用户添加30积分,因为积分服务挂掉,添加失败!这样等积分服务恢复了之后,可以根据这些信息手动给用户添加积分,这个过程就是降级。

5、zuul微服务网关(网络路由)

继续拿上个例子说,假设你后台部署了几百台机器,现在有个前端兄弟,通过浏览器请求过来的,人家要请求库存服务,难道还要让人家记住这个服务的名字?部署在5台机器上?就算人家肯记住一个,你有好几百机器呢,难不成还要人家请求一个就要记住一个?这个时候就得引出了zuul微服务网关。

一般,微服务架构中都会有一个zuul网关,前端不用去关心后端有多少台机器,就知道有一个网关即可,前端得请求都会往网关走,网关会根据请求中得一些特征,将请求转发给后端的各个服务。而且有了网关之后,还可以做统一的降级、限流、认证授权、安全等。

SpringCloud五大组件示意图

image-20230504091027014

6、总结

好了,大体知识就是这样的,后边青柠会继续梳理这块的知识,欢迎大家关注我,评论区一起讨论

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

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

相关文章

瑞萨e2studio(25)----电容触摸配置(2)

瑞萨e2studio.24--电容触摸配置1 概述初始配置监控检测电容按键显示和测量标准差显示多个触摸按键曲线 概述 篇文档将在上篇文章基础上修改电容触摸配置。 初始配置 需要进入Debug模式才可以进行电容触摸配置。 监控检测电容按键 从电容触摸主界面(QE&#xf…

解决Xshell安装时错误代码-1603的问题

安装流程 官网下载:家庭/学校免费 - NetSarang Website 填写姓名,邮箱,申请下载,就能在邮箱收到下载链接 点击链接即可自动开始下载; 下载完成后进行安装即可 问题描述 安装进行到最后一步时,出现下图…

CCED2000后,中文编程软件再次脱颖而出,系出金山

WPS抗衡微软,CCEDE却被淹没? DOS代,我们用WPS来进行文字编辑,CCED来做表格,两者在那个时代可以称得上是国产办公领域的“必装软件”。 如今,30年过去了,WPS一步一步成长为抗衡微软office的国产…

4d毫米波雷达聚类检测和追踪

待整理和写代码,准备先用dbcan聚类,用激光那一套做做看看效果 流程 4D雷达毫米波聚类跟踪流程如下图: 预处理主要包括标定、坐标转换和动静分离。 标定使用水平仪、角反,采集数据分析,得到水平和俯仰偏角。 坐标转…

nssctf web (3)

[HUBUCTF 2022 新生赛]checkin <?php show_source(__FILE__); #将当前文件的代码显示到页面 $username "this_is_secret"; #给username赋值 $password "this_is_not_known_to_you"; #给password赋值 include("flag.php");//here I ch…

MySQL数据管理

一、MySQL数据库管理 1、库和表 行&#xff08;记录&#xff09;&#xff1a;用来描述一个对象的信息 列&#xff08;字段&#xff09;&#xff1a;用来描述对象的一个属性 2、常用的数据类型 int &#xff1a;整型 float &#xff1a;单精度浮点 4字节32位 double &…

《网络安全审查办法》

1发展历程 2020年4月27日&#xff0c;12部门联合发布《网络安全审查办法》&#xff0c;2020年6月1日起实施。 2021年7月10日&#xff0c;国家互联网信息办公室发布关于《网络安全审查办法&#xff08;修订草案征求意见稿&#xff09;》公开征求意见的通知。11月16日国家互联网信…

【C++入门】你知道为什么C++有函数重载而C语言没有函数重载吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

《最强Android书 架构大剖析》读书笔记

文章目录 第一章 Android 体系结构的变革之路1.2 Android系统源码目录与Linux的异同Android的框架原生二进制可执行文件Android 的原生库核心(core)库用以支持框架的库硬件抽象层Linux内核不带上层 UI界面的Android 第二章 Android 的分区和文件系统2.1 分区架构实验:从设备中获…

ffmpeg学习日记513-源码-configure_filtergraph()函数分析及功能

Date: 12/04/2023 Hours: Details:template_tags 文章目录 源码版本实现文件函数原型参数释义函数功能函数分析filtergraph_is_simple函数 总结参考 源码版本 ffmpeg-4.1.10 实现文件 fftools/ffmpeg_filter.c 函数原型 int configure_filtergraph(FilterGraph *fg)参数释…

重识三只松鼠:“二次创业”的新变革,“深蹲起跳”的新动能

“羚羊明白它必须跑得比狮子快&#xff0c;不然它会被狮子吃掉&#xff1b;每天早晨狮子醒来&#xff0c;狮子也明白它必须赛过跑得最慢的羚羊&#xff0c;不然它会活活饿死。不论你是狮子还是羚羊&#xff0c;都不重要……重要的是每天旭日东升&#xff0c;你就得开始奔跑&…

突破经典网格特征?AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记

突破经典网格特征&#xff1f;AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记 一、Abstract二、引言三、相关工作视觉 Transformer Backbones基于聚类的注意力自适应下采样点云网络 四、方法4.1 聚类和区域4.1.1 平衡聚类4.1.2 聚类的区域 写在前面 这一周赶上…

【五一创作】Visual Studio常用调试技巧的温习

当你在编写C程序时&#xff0c;难免会遇到代码出现错误的情况。这时候就需要用调试工具来定位问题并解决它。以下是一些在Visual Studio中使用调试器时常用的技巧&#xff0c;权当作温故总结罢~ 1. 断点 断点是调试中最为基本但也最常用的技巧之一。通过在需要定位的代码行上打…

一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系

想要搞清楚 x64、IA64、AMD64 指令集之间的关系&#xff0c;就要先了解 Intel 和 AMD 这两家公司在生产处理器上的发展历史。 x86 处理器 1978年 Intel 生产了它的第一款 16bit 处理器8086&#xff0c;之后几款处理器名字也都以86结尾&#xff0c;包括80186&#xff0c;80286&a…

五一长假暴露了电动爹的真面目,而新能源汽车市场似乎也到了转折点

4月份国内市场汽车销量数据已经出炉&#xff0c;同比来说仍然保持了很高的增长&#xff0c;不过环比数据却显示出新能源汽车市场似乎已到了转折点&#xff0c;繁荣期似乎已经结束&#xff0c;淘汰赛开始了。 一、五一长假再次暴露了电动爹的真面目 新能源汽车长途旅行首先就是怕…

部署LVS-DR集群

引言 一、LVS-DR工作原理 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09;工作模式&#xff0c;是生产环境中最常用的一 种工作模式。 LVS-DR 模式&#xff0c;Director Server 作为群集的访问入口&#xff0c;不作为网关使用节点 Director Server 与 …

推荐算法实战项目:DeepFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由哈尔滨工业大学联合华为发表论文《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》中提出的DeepFM模型。其实根据名字可以看出来&#xff0c;此模型包含Deep和FM两个部分。其中Deep部分就是普通的深度神经网络&#xff0c;FM是因子…

【图像处理】墨西哥小波和带通滤波

一、说明 在连续小波的家族当中&#xff0c;埃尔米特小波是个非常特别的存在&#xff08;应用在连续小波转换称作埃尔米特转换&#xff09;。Ricker子波计算电动力学的广谱源项。它通常只在美国才会被称作墨西哥帽小波&#xff0c;因为在作为核函数处理2维图像时&#xff0c;形…

推荐算法实战项目:NFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由新加坡国立大学的研究人员在论文《Neural Factorization Machines for Sparse Predictive Analytics∗》中提出的NFM模型。 NFM模型全称是Neural Factorization Machines&#xff0c;通过名字也可以看出&#xff0c;这又是一个基于FM模型改进得到的网络。无论…

SpringBoot+vue文件上传下载预览大文件分片上传文件上传进度

文章目录 学习链接上传文件前端后端代码 下载文件a标签下载前端代码后台代码 动态a标签下载前端代码 axios 动态a标签前端代码 浏览器直接输入 预览文件前端代码后端代码 分片上传前后端分别md5加密spark-md5commons-codec 分片上传实现前端代码后端代码 学习链接 Blob &…