简单理解微服务限流、降级、熔断

news2025/1/15 17:31:21

微服务限流、降级、熔断分别都是什么意思,我们平时工作中为什么要关注这些东西呢?

公司不断的发展壮大,一开始处于蛮荒时代,咱们从单体应用过渡到微服务的时候,可能还是那一套单体的思想,再加上用户量可能也不多,直接就不去考虑起量了之后,我们需要如何处理

可殊不知,当有一天起量了,机会摆在你面前时候,你没有准备好,你也是抓不住的

先举一个生活中常见的例子:

我们有时去访问一个网站的时候,当网络正常的情况下,我们发现访问这个网站,比平时好像慢了一些,且会出现报系统错误的情况,或者报错系统繁忙等信息,可能是服务做了超时,超时之后就报错了

再举一个双 11 的例子

咱们访问某猫或者某狗的时候,咱们发现并不是每一次访问都是可以正常进入页面的,也就是说一会可以正常进入页面,一会又不能正常进入页面,并且会提示系统繁忙请稍后再试,此处实际上是服务应用了限流和熔断

另外,在双 11 这一天,咱们买了商品之后,发现当天是没有办法进行退款的,这个是应用了服务降级

那么,咱们在技术上什么限流,什么是熔断,什么又是服务降级呢?

什么是限流?

通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理,限流是从整体系统上去进行考虑的

最近国庆了,很多人都会去坐火车,坐高铁,咱们排队过安检的时候,我们可以看到保安会隔一会放 10 个人进去,过一会又放一些人进去,一直维持着里面只能有 10个人在进行安全检查

那么这 10 个数字,就相当于是服务进行的限流,只要一达到 10 人以上的请求,那么就会服务拒绝,当有空余的时候,才会处理新来的请求,这个应该就不难理解了吧

一般限流的方式有这些:

  • 固定时间窗口控制
  • 使用漏桶的方式
  • 使用令牌桶的方式

关于限流的详细的具体实现方式,咱们可以查看历史文章:最常用的限流算法以及如何在http中间件中加入流控

什么是熔断?

熔断和限流还不太一样,上面我们可以看到限流是,控制请求速率,只要还能承受,那么都会处理,可是熔断是这样的一个效果

举个 栗子

例如咱们的微服务系统中,多个微服务是会相互调用的,且会存在一个较长的调用调用链,链路一长,关联的服务多了就会带来一个问题

网关请求到我们的微服务 A,微服务 A 需要去调用微服务 B,微服务 C,微服务 B 还会去调用为服务 D,微服务C也会去调用其它的微服务

这个时候,如果在这条链路上,哪怕有一个服务出现了问题,或者相应时间过长,那么对与微服务A的调用就会占用越来越多的系统资源,一般服务也是会做重试机制,且当客户端调用某个接口不能得到正常响应的时候,是会进行疯狂请求的,这会导致微服务 A 消耗过多资源,进而引起系统崩溃,所谓的“雪崩效应”

那么这个时候,就不得不引入一个断路器来进行熔断,咱们一会会应用 hystrix 来进行功能实现

关于熔断,我们可以这样来思考,咱们初高中学过的物理,家里的电闸开关出都会设置一个保险丝,当咱们的用电负荷过大的时候,保险丝就会自我熔断,保护电路

那么微服务中的熔断也是这个效果,他可以保护咱们的调用链路,防止高压请求带来资源极高的消耗,最终导致雪崩,熔断是从微服务层级去考虑的

咱们的断路器 hystrix 当发现链路中,微服务 A 请求 微服务 B ,响应时间过长,或者 微服务 B 不可用的时候,那么微服务 A 就会迅速的进行错误响应,而不是疯狂的去调用微服务 B

Hystrix 自身还有探测机制,会去探测微服务 B 是否可用,如果可用了,那么微服务 A 的请求就会正常的去请求微服务 B

关于断路器的使用方式,实现方式,和熔断的实现方案,我们可以查看历史文章:golang 微服务中的断路器 hystrix

什么是服务降级?

当我的微服务架构整体的负载超出了预设的上限阈值或要应对即将到来的大流量是,为了保证重要或基本的服务能正常运行,会自动或者手动的关闭某些外围或者不重要的服务

服务降级其实就更好理解了,例如咱们服务有 10 个功能,当服务压力过大的时候,咱们就可以自动关闭外围的几个核心的功能,让系统资源都集中咱们的核心服务上,一般是从外围服务开始降级

咱们做核酸已经持续好几年了,咱们以喉咙上的老茧为证

做核酸的时候,进入一个通道,我们可以看到,最开始有检查戴口罩的,往下走,有检查健康码的,再往下走,开始检查场所码,最后快到大白处之后,就开始检查核酸码了

当有大的人流量,咱们做核酸的时候,可能就只有查看场所码和核酸码了,这个就好理解了吧

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI

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

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

相关文章

VIT理论代码详解

将图像输入到transformer的思想 把每个像素点按照顺序拿出来,作为token,这样做的话输入参数规模是:假如是1通道的灰度图: 224x224x150176,bert才512,是bert的100倍。 改进方法: VIT模型架构图…

前端代理报错Error occured while trying to proxy to: localhost:端口

webpack配置进行前端代理时, 报错信息如下:(DEPTH_ZERO_SELF_SIGNED_CERT) 需设置:secure为false即可解决此报错 // webpack配置前端代理config["/test"]{target: https://xxxx.com,changeOrigin: true,secure: false // 这个配置…

设计模式(1) - UML类图

1、前言 最近在阅读 Android 源码,时常碰到代码中有一些巧妙的写法,简单的如 MediaPlayerService 中的 IFactory,我知道它是工厂模式,但是却不十分清楚它为什么这么用;复杂点的像 NuPlayer 中的 DeferredActions 机制…

云原生Kubernetes:kubectl管理命令

目录 一、理论 1.kubectl 管理命令 2.项目的生命周期 二、实验 1.kubectl 管理命令 2.项目的生命周期 三、总结 一、理论 1.kubectl 管理命令 (1)陈述式资源管理方法 kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口…

进入低功耗和唤醒

休眠模式 进入休眠模式 如果使用 WFI 指令进入睡眠模式,则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会 将器件从睡眠模式唤醒。 如果使用 WFE 指令进入睡眠模式,MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可 通过以下方式产生&#xff…

转载: 又拍云【PrismCDN 】低延时的P2P HLS直播技术实践

低延时的P2P HLS直播技术实践本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》低延时的P2P HLS直播技术实践 [首页 > Open Talk NO.41 | 2018 音视频技术沙龙深圳站 > 低延时 WebP2P 直播技术实践https://opentalk-blog.b0.upaiyun.com/prod/2018-0…

maven管理android项目

maven管理android项目 1.安装maven-android-sdk-deployer,下载地址:https://github.com/mosabua/maven-android-sdk-deployer 2.解压缩大英文路径文件夹 3.在压缩后的根目录执行mvn clean install -P 2.3.3(2.3.3指的是android版本号&#x…

传输层协议--UDP

引入 传输层负责数据能够从发送端传输到接收端。 端口号(Port) 端口号标识了一个主机上进行通信的一个进程。 两个问题: 1. 一个进程可以绑定多个端口号吗?--可以 2.一个端口号可以绑定多个进程吗?--不可以 我们…

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波(Mean Filter)是一种简单的滤波技术,用于平滑图像并减少噪声。它的原理非常简单:对于每个像素,将其与其周围邻域内像素的平均值作为新的像素值…

Python实现猎人猎物优化算法(HPO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

2023年全国职业院校技能大赛 高等职业教育组(信息安全管理与评估)正式赛题

全国职业院校技能大赛 高等职业教育组 qq:2366046367 q群:670610200信息安全管理与评估 任务书 模块一 网络平台搭建与设备安全防护 一、 比赛时间 本阶段比赛时长为180分钟。 二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 …

【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识②

十二、面向对象 1、什么是对象:客观存在的事物都是对象 2、什么是类:类是确定对象将会拥有的特性和行为,它不是具体客观存在的东西 3、面向对象和面向过程的区别? (1)面向对象是将实物高度抽象化 &…

关闭vscode检查更新

要关闭 Visual Studio Code 的自动检查更新功能,请按照以下步骤进行操作: 打开 Visual Studio Code。点击左侧的扩展图标(四个方块组成的图标)。在扩展面板中,点击右上角的齿轮图标,选择 “扩展设置”。在…

网络技术一:计算机网络概述

计算机网络概述 计算机网络定义 一组自治计算机互联的集合 计算机网络基本功能 资源共享 综合信息服务 分布式处理与负载均衡 计算机网络的类型 局域网 LAN:由用户自行建设,使用私有地址组建的内部网络 城域网 MAN:由运营商或大规模…

Linux vim

知识回顾 文件 内容 属性目录权限:1. 如果你想进入一个目录是需要x权限的 2.r 的作用是限制你查看该目录下的文件属性和内容 3. W 的作用是限制你能否在这个目录中创建和删除文件 Vim 首先,使用 touch test.c 指令创建一个文件 输入 : vi…

python关闭指定进程以excel为例

先说下环境: Excel版本: Python2.7.13和Python3.10.4并存。 2、打开两个excel工作簿 看进程是这样的: 3、用python编程kill进程 # -*- coding: utf-8 -*- import os proc_nameEXCEL.EXE if __name__ __main__:os.system(taskkill /im {} /…

java获取jenkins发布版本信息

一.需求: 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现: 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…

数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

目录 创建学生表聚合查询聚合函数直接查询设置别名查询设置条件查询 常用的聚合函数 分组查询单个字段Group by报错分组查询多字段分组查询 多表查询直接查询重命名查询Students表新建一列CourseID 连接(JOIN)查询INNER JOINRIGHT JOIN, LEFT JOINFULL J…

弄懂软件设计模式(一):单例模式和策略模式

前言 软件设计模式和设计原则是十分重要的,所有的开发框架和组件几乎都使用到了,比如在这小节中的单例模式就在SpringBean中被使用。在这篇文章中荔枝将会仔细梳理有关单例模式和策略模式的相关知识点,其中比较重要的是掌握单例模式的常规写法…

SpringBoot项目--电脑商城【获取省市区列表】

1.易错点 1.错误做法 新增收货地址页面的三个下拉列表的内容展示没有和数据库进行交互,而是通过前端实现的(将代码逻辑放在了distpicker.data.js文件中),实现方法是在加载新增收货地址页面时加载该js文件,这种做法不可取 2.正确做法 把这些数据保存到数据库中,用户点击下拉…