熔断,降级,限流

文章目录

  • 熔断
    • 概念
    • 为什么需要熔断
    • 熔断器模型
    • 熔断策略
  • 降级
    • 概念
    • 熔断和降级的关系
      • 熔断降级
      • 限时降级
      • 限流降级
  • 参考文章

熔断和降级都是自我保护的一种机制,但二者又有所不同。

熔断

概念

“熔断”一词早期来自股票市场。熔断[Circuit Breaker]也叫自动停盘机制,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。
熔断在程序中,表示断开的意思。如发生了某事件,程序为了整体的稳定性,所以暂时(断开)停止服务一段时间,以保证程序可用时再被使用。
熔断与保险丝的工作机制一样,比如保险丝能承受的最大电流是5A,如果电流达到了6A,由于保险丝承受不了这么高的电流,保险丝就会融化电路断开,起到了保护电路的作用。

为什么需要熔断

当下游服务因为某种原因突然变得不可用或者响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。目标服务情况好转则恢复调用。
微服务集群中,每个应用基本都会依赖一定数量的外部服务。有可能随时都会遇到网络连接缓慢,超时,依赖服务过载,服务不可用的情况,在高并发场景下如果此时调用方不做任何处理,继续持续请求故障服务的话很容易引起整个微服务集群雪崩 。比如高并发场景的用户订单,一般需要依赖:商品服务,账户服务,库存服务;
在这里插入图片描述
假如此时账户服务过载,订单服务持续请求账户服务只能被动的等待账户服务报错或者请求超时,进而导致订单请求被大量堆积,这些无效请求依然会占用系统资源:cpu,内存,数据库连接…导致订单服务整体不可用。即使账户服务恢复了订单服务也无法自我恢复。
如果此时有一个主动保护机制应对这种场景,至少可以保证自身的运行状态,等待账户服务恢复时订单服务也同步自我恢复,这种自我保护机制就是熔断[在订单服务处进行熔断等待账户服务的恢复]
熔断是调用方自我保护的机制,客观上也能保护被调用方

熔断器模型

在这里插入图片描述
熔断器分为三种状态:

  • Closed:初始状态,该状态下熔断器会保持闭合,对资源的访问通过熔断器的检查。

  • Open:断开状态,熔断器开启,对资源的访问进行切断

  • Half Open:半开状态,该状态下除了探测流量,对资源的访问也会被切断。探测流量是指,熔断器处于半开状态时,会周期性的允许一定数目的探测请求通过,如果探测请求能够正常返回,代表探测成功,此时熔断器会重置状态到Closed状态,结束熔断;如果探测失败,回滚到Open状态。
    三种状态之间的转换

  • 初始状态下,熔断器处于Closed状态。如果基于熔断器的统计数据表明当前资源触发了设定的阈值,那么熔断器会切换状态到Open状态

  • Open状态即熔断状态,所有请求都直接会被拒绝。熔断规则中会配置一个熔断超时重试时间,经过熔断超时重试时长后熔断器被置为Half-Open状态,从而进行探测机制

  • 处于HalfOpen状态;进行周期性探测,请求服务正常变为Closed状态,请求服务不成功变为Open状态。

熔断策略

  • 慢调用比例策略(Slow Request Ration):在Closed状态下,当响应慢的请求[需要设置适当的RT临界值]到达一定的比例触发阈值,就会熔断变为Open状态。
  • 错误比例策略(Error Ratio):在Closed状态,统计周期内资源请求访问异常比例大于设定的阈值,就会熔断变为Open状态,拒绝接下来的服务请求。
  • 错误计数策略(Error Count):在Closed状态,在资源周期内请求异常访问数达到阈值,触发熔断变为Open状态。

降级

概念

降级(fallback),降低级别的意思,指在程序出现问题时,仍能保证有限功能可用的一种机制。
比如电商交易系统在双11时,使用的人比较多,此时如果开放所有功能,可能会导致系统不可用,此时可以开启降级功能,优先保证支付功能可用,而其它非核心功能,如评论、物流、商品介绍等功能暂时关闭。
降级是一个退而求其次的方案,熔断是整体不可用的方案。

熔断和降级的关系

降级和熔断是服务安全中的2个不同的流程,在服务发生故障时,先断开[熔断]与服务的连接,然后在执行降级逻辑。
熔断时会调用降级机制,降级时不会调用熔断机制;
熔断是从全局出发,为了保证系统稳定性而停用服务,降级是退而求其次,提供一种保底的解决方案。
在这里插入图片描述
降级是一种思想,一个接口,熔断降级限流的关系如下:
在这里插入图片描述

熔断降级

A服务调用B服务,失败次数达到一定阈值后,A服务的断路器打开,就不再请求B服务,直接执行本地的fallback方法;
在这里插入图片描述

限时降级

A服务调用B服务,B服务响应超过A服务设定的阈值,执行降级逻辑
在这里插入图片描述

限流降级

服务B的连接超过自身能承受的最大连接数。在这里插入图片描述

具体如何限流可以详见文章https://blog.csdn.net/weixin_46290302/article/details/135054106?spm=1001.2014.3001.5501

参考文章

1.https://blog.csdn.net/abu935009066/article/details/128134965
2.熔断和降级的区别
3.一文讲透微服务熔断的原理
4.微服务熔断和降级的区别

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

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

相关文章

Gradle 简单入门

Gradle简单介绍: Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。面向Java应用…

【GoLang】哪些大公司正在使用Go语言

你见过哪些令你膛目结舌的代码技巧? 文章目录 你见过哪些令你膛目结舌的代码技巧?前言:哪些大公司正在使用Go语言谷歌(Google):脸书(Facebook):亚马逊(Amazon…

TikTok手工艺新潮流:小视频中的手作乐趣

随着短视频平台的兴起,TikTok以其独特的创意和活力,成为了全球用户分享生活、展示才华的热门平台之一。本文将深入探讨TikTok上涌现的手工艺潮流,揭示小视频中的手作乐趣如何成为一种全新的艺术表达方式。 TikTok手工艺的独特之处 TikTok提供…

实验一传统的结构化的软件工程方法、实验二面向对象的软件工程、实验三软件测试

背景: 实验一 传统的结构化的软件工程方法 1实验目的 了解传统的软件工程方法的基本原理,掌握软件生命周期的全过程依次划分为需求分析、总体设计、详细设计、编码、测试、维护等几个重要阶段。每个阶段所要完成的任务以及提交的文档。 2实验内容 …

32 在Vue3中如何同时定义多个插槽

概述 当你想要给外部预留多个位置的时候,具名插槽就非常有用了。 比如,我们定义一个卡片,让别人使用的时候,标题可以自定义,内容也可以自定义,这个时候就需要两个插槽。 基本用法 我们创建src/componen…

行业前景咋样?大厂找我用C++抓取化工产品数据并分析

最近又来活了,天天忙到半夜,但是想想收益还是再坚持坚持。是这么一回事,兄弟所在的化工公司最近想看看某些行业数据,看看市面的同类型产品销量收益等情况是否满足预期效果,也就找到我让我给用爬虫写一个采集并分析的报…

基于Java SSM框架实现教学质量评价评教系统项目【项目源码+论文说明】

基于java的SSM框架实现教学质量评价评教系统演示 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,教学质量评价系统当然也不能排除在外。教学质量评价系统是以实际运用为…

机器学习 | 密度聚类和层次聚类

密度聚类和层次聚类 密度聚类 背景知识 如果 S 中任两点的连线内的点都在集合 S 内,那么集合 S称为凸集。反之,为非凸集。 DBSCAN 算法介绍 与划分和层次聚类方法不同,DBSCAN(Density-Based Spatial Clustering of Applications with Noi…

【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《模式之谜 | 数据奇迹解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌌1 初识模式识…

MySQL基本操作 DDL DML DQL三大操作介绍

DDL 数据(结构)定义 创建表DML 数据操作 增删改DQL 查询语句 DDL 数据(结构)定义 创建表 创建 删除数据 注释 --空格内容 创建数据库 CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]eg:CREATE DATABASE IF NOT EXISTS school CHARSET utf8如果对应school不存在,…

Python学习笔记(六):函数的多返回值、函数的多种参数使用形式、匿名函数、文件的读取操作、文件的写入 、文件的追加

目录 一、函数的多返回值 二、函数的多种参数使用形式 2.1位置参数 2.2关键字参数 2.3缺省参数 2.4不定长参数 三、匿名函数 3.1 函数作为参数传递 3.2 函数的定义 3.3 匿名函数定义语法: 四、文件的读取操作 4.1 open()打开函数…

2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力

文章目录 每日一句正能量前言AI时代,云与PC结合为用户带来更好体验全新处理器,首次引入针对人工智能加速的NPU大模型时代,软硬结合带来更好训练成果后记 每日一句正能量 成长是一条必走的路路上我们伤痛在所难免。 前言 在2023年的英特尔On技…

【UML】第8篇 用例图(3/3)

目录 一、用例的关系 1.1 泛化(Generalization)关系 1.2 包含(include)关系 1.3 扩展关系 二、用例表示例 不是非要把电影改成连续剧,给大家播,确实是时间和精力有限。 用例图,虽然简单&…

一个网卡能设置(绑定)两个或多个IP

昨天领导问我,一个网卡设置两个IP。我就有点发愣:一个网卡能设置两个IP吗?我倒是见过一个机器插两个网卡,同时支持内网和外网。一个网卡设置两个IP,以谁为准? 上网搜索了一下,还真可以&#xff…

MySQL——基础篇

学习视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru/?spm_id_from333.999.0.0&vd_source619f8ed6df662d99db4b3673d1d3ddcb 前言✴️ 基础篇——MySQL概述、SQL、函数、约束、多表查询、事务 进阶篇——存储引擎、索引、SQL优化、视图/存储过程/触发…

Spring Boot3通过GraalVM生成exe执行文件

一、安装GraalVM 1、官网:https://www.graalvm.org/downloads/ 2、配置环境变量 2.1、环境变量必须使用JAVA_HOME,否则会出现问题 2.2、在系统变量配置Path,%JAVA_HOME%\bin,注意必须放在顶部第一位 2.3、配置jdk的环境变量,在P…

vue的语法模板与数据绑定的说明

vue的两大模板语法: 1.插值语法 2.指定语法 插值语法:{{}} 功能:用于解析标签体的内容 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性 指定语法: 功能:用于解析标签(包括:标签属性、标…

判断数据是否为整数--函数设计与实现

#定义函数:is_num(s),判断输入的数据是否整数。 #(1)判断是否是数字 def is_num(s):if s.isdigit(): #isdigit()是一个字符串方法,用于检查字符串是否只包含数字字符。如果字符串只包含数字字符,则返回True;否则返回Falsereturn T…

订货系统本地化部署的三大优势

批发贸易行业,订货系统的本地化部署成为了许多企业的首选。本地化部署意味着将订货系统部署在企业自己的服务器上,而不是依赖于云服务提供商。这种部署方式有许多优势,以下是其中的四个主要优势: 1. 数据安全性:本地化…

Redis第2讲——Java三种客户端(Jedis、Lettuce和Redisson)

上篇文章介绍了Redis的9种数据类型和常命令、7种数据结构和9种编码方式。但是如果想要把它应用到项目中,我们还需要一个redis的客户端。redis的Java客户端种类还是很多的,其中使用最广泛的有三种——Jedis、lettuce和redisson,下面我们一起来…