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

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

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

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

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

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

再举一个双 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.rhkb.cn/news/122191.html

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

相关文章

大模型参数高效微调技术原理综述(二)-BitFit、Prefix Tuning、Prompt Tuning

随着,ChatGPT 迅速爆火,引发了大模型的时代变革。然而对于普通大众来说,进行大模型的预训练或者全量微调遥不可及。由此,催生了各种参数高效微调技术,让科研人员或者普通开发者有机会尝试微调大模型。 因此&#xff0c…

2023-9-1-虚拟网卡学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

日常开发小点汇总(1)

1.浮动元素 生成一个浮动流&#xff0c;块级元素看不到&#xff0c;文本、行内属性元素及行内元素可见 <div class"demo1"></div><span>123</span><div class"demo2"></div>.demo1 {width: 100px;height: 100px;backg…

在 linux 虚拟机上安装配置 hive

目录 一 下载hive 安装包 二 解压 hive 并配置环境变量 三 配置hive 的配置文件 四 更新 guava 五 hive初始化 六 开启远程连接 七 使用datagrip 连接 hive 一 下载hive 安装包 百度网盘资源如下&#xff1a; 链接: https://pan.baidu.com/s/18jF-Qri0hc52_rtL61O0YQ?…

Unity中神秘的Transform和transform(小写)的关系

1.为什么Transform类是保护的不能通过new 来实例化对象,也没有静态函数,而Rotate()这种方法却属于它,该如何访问? Transform 类还是被保护的不允许用户修改! protected Transform(); 是一个受保护的构造函数,不能直接实例化 Transform 类。 2.为甚么transform可以访问Tr…

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动&#xff0c;这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合&#xff0c;如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求&#xff0c;1999年8月…

蓝桥杯备赛(Day5)——二叉树

二叉树存储 普通做法,二叉树一个节点包括结点的数值以及指向左右子节点的指针 在class Node中 def __init__(self,s,l=None,r=None):self.val=Noneself.l=lself.r=r 在竞赛中,我们往往使用静态数组实现二叉树,定义一个大小为N的静态结构体数组,使用其来存储一棵二叉树。…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…

Android后退堆栈

修改代码 现在的ItemClick使得用户单击其中一个项目时就会跳转&#xff0c;现在要修改其使得在一个小屏幕设备上才会这样做&#xff0c;在一个大屏幕设备上运行用户选择一个训练项目时在右边的片段显示响应的信息。 希望片段处理后退的方式&#xff1a;假设用户在手机上运行这…

酷克数据与华为合作更进一步 携手推出云数仓联合解决方案

在一起&#xff0c;共迎新机遇&#xff01;8月25-26日&#xff0c;2023华为数据存储用户精英论坛在西宁召开。酷克数据作为国内云原生数据仓库的代表企业&#xff0c;也是华为重要的生态合作伙伴&#xff0c;受邀参与本次论坛&#xff0c;并展示了云数仓领域最新前沿技术以及联…

华为云Stack的学习(五)

六、华为云stack服务简介 1.云服务在华为云Stack中的位置 云服务对接多个数据中心资源池层提供的资源&#xff0c;并向各种行业应用提供载体。 2.华为云Stack通用服务 2.1 云计算的服务模式 2.2 计算相关的云服务 2.3 存储相关的云服务 2.4 网络相关的云服务 3.云化案例 **…

C#,数值计算——NRf2的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class NRf2 : UniVarRealValueFun { public NRf3 f3 new NRf3(); public RealValueFun z1; public RealValueFun z2; public NRf2(RealValueFun zz1, RealValueFun zz2) …

SLAM从入门到精通(矩阵的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习SLAM&#xff0c;离开了矩阵肯定是玩不转的。大学数学里面除了微积分&#xff0c;剩下的就是线性代数和概率论。而矩阵就是线性代数的一部分。…

微信短链跳转到小程序指定页面调试

首先说下背景&#xff1a;后端给了短链地址&#xff0c;但是无法跳转到指定页面。总是在小程序首页。指定的页面我们是h5页面。排查步骤如下&#xff1a; 1、通过快速URL Scheme 编译。上部普通编译 下拉找到此选项。 、 2、按照小程序的要求的URL Scheme输入。另外后端给的…

事务的优化

例子&#xff1a; 举例&#xff1a;假设我们有一个文件上传的uploadFile方法&#xff0c;在这个方法中我们会先执行上传一个文件到分布式文件系统中的方法addMediaFilesToMinIO( )&#xff0c;上传成功后执行文件资源数据入库的addMediaFilesToDb( ),那么这个时候事务应该加在哪…

Revit SDK 介绍:EventsMonitor 事件监控器

前言 这个例子实现了一个事件监控器&#xff0c;当有事件被触发的时候&#xff0c;会生成一条日志记录。 内容 核心逻辑&#xff1a; 用户通过对话框选择想要注册的事件对选中的事件进行注册&#xff0c;事件处理函数都是app_eventsHandlerMethod当事件被触发&#xff0c;事…

uniapp实现移动端的视频图片轮播组件

1、视频轮播组件app体验地址 https://tt.appc02.com/nesxr6 2、支持小程序、H5、APP&#xff0c;在小程序上运行的效果图 3、使用方法 第一步&#xff0c;按照截图步骤配置好 "app-plus": {"subNVues": [{"id": "videoMask", // 唯…

Vue3+Ts实现父子组件间传值的两种方式

文章目录 写在前面1、v-modelemit传值1.1父向子传递数据1.2子向父传递数据 2、使用v-bindemit2.1父向子传递数据2.2子向父传递数据 总结 写在前面 对于常用的组件间传参最近有了有点小心得总结一下&#xff0c;主要是两种子向父组件传参的方式总结。欢迎评论区讨论 概览&…

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面&#xff1a;核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作&#xff1a; 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 &#xff08;1&#xff09;创建线程组 &#xf…

Build阶段-Maven安装配置

构建Java项目的工具一般有两种选择&#xff0c;一个是Maven&#xff0c;一个是Gradle。 这里我们选择Maven作为项目的编译工具。 具体安装Maven流程不做阐述&#xff0c;但是需要确保配置好Maven仓库私服以及JDK编译版本