高并发之服务降级和服务熔断____服务降级、熔断、限流的区别

高并发之服务降级和服务熔断

服务降级:

服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行。

同时保证部分甚至大部分任务客户能得到正确的相应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。

服务熔断:在股票市场,熔断这个词大家都不陌生,是指当股指波幅达到某个点后,交易所为控制风险采取的暂停交易措施。相应的,服务熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。

降级分类

降级按照是否自动化可分为:自动开关降级和人工开关降级。

降级按照功能可分为:读服务降级、写服务降级。

降级按照处于的系统层次可分为:多级降级。

自动降级分类

(1)、超时降级:主要配置好超时时间和超时重试次数和机制,并使用异步机制探测回复情况

(2)、失败次数降级:主要是一些不稳定的api,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况

(3)、故障降级:比如要调用的远程服务挂掉了(网络故障、DNS故障、http服务返回错误的状态码、rpc服务抛出异常),则可以直接降级。降级后的处理方案有:默认值(比如库存服务挂了,返回默认现货)、兜底数据(比如广告挂了,返回提前准备好的一些静态页面)、缓存(之前暂存的一些缓存数据)

(4)、限流降级

当我们去秒杀或者抢购一些限购商品时,此时可能会因为访问量太大而导致系统崩溃,此时开发者会使用限流来进行限制访问量,当达到限流阀值,后续请求会被降级;降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)、无货(直接告知用户没货了)、错误页(如活动太火爆了,稍后重试)。

服务熔断和服务降级比较:

两者其实从有些角度看是有一定的类似性的:
  1. 目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段;
  2. 最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用;
  3. 粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改);
  4. 自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关预置、配置中心都是必要手段;
而两者的区别也是明显的:
  1. 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;
  2. 管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)
  3. 实现方式不太一样

服务降级要考虑的问题:

1.核心和非核心服务

2.是否支持降级,降级策略

3.业务放通的场景,策略

Hystrix,该库旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包(request collapsing,即自动批处理,译者注),以及监控和配置等功能。

img

img




在这里插入图片描述




服务降级、熔断、限流的区别

降级

系统将某些不重要的业务或接口的功能降低,可以只提供部分功能,也可以完全停到所有所有不重要的功能。降级的思想是丢车保帅。

常见降级方式:

  • 系统后门降级:系统预留后门用于降级,比如提供一个降级URL,访问URL时就执行降级指令。缺点:如果服务器数量多,需要一台一台去操作,效率低。
  • 独立系统降级:将降级操作独立到一个单独的系统中,可以实现复杂的权限管理、批量操作等功能。
    在这里插入图片描述

熔断

降级是应对系统自身的故障,而熔断的目的是应对外部系统的故障。比如A服务的X功能依赖B服务的某个接口,当B服务接口响应很慢时,A服务X功能的响应也会被拖慢,进一步导致了A服务的线程都卡在了X功能上,A服务的其它功能也会卡主或拖慢。此时就需要熔断机制,即A服务不在请求B这个接口,A服务内部发现B接口就直接返回错误,从而避免整个A服务被拖慢。

  • 实现思路:需要系统有一个统一的API调用层,由API来进行采样或者统计。

限流

限流:只允许系统能够承受的访问量进来,超出的会被丢弃。降级从系统功能优先级角度考虑如何应对故障,而限流则从用户访问压力的角度来考虑如何应对故障。

常见限流方式

  • 基于请求限流:指从外部请求的角度考虑限流。
  • 基于资源限流:指从系统内部考虑,找到影响性能的关键资源,对其使用上限限制。

案例

如果你来设计一个整点限量秒杀系统,包括登录、抢购、支付(依赖支付宝)等核心功能,你会如何设计接口级的故障应对手段?

思路:

  • 降级(丢车保帅):在秒杀时,通过服务降级把注册、修改个人信息等非核心功能关闭掉。
  • 熔断:支付依赖第三方服务,要设置熔断策略,熔断后要给出友好提示,比如10分钟后再来支付。
  • 限流:抢购下单接口采用限流方式,如抢购1000件商品,则设置2000大小的队列,请求超过2000后直接拒绝掉。



服务的熔断和降级的区别

熔断:

举个例子解释,生活中每家每户都在用电,小明家的电线由于故障致使了小明家停电了。而小李、小张家的电是正常使用的。电力公司没有由于小明家有故障线路而停掉其余人家的电,同时小明家没有使用有故障的电路的电。这时即为熔断。熔断的目的是当A服务模块中的某块程序出现故障后为了避免影响其余客户端的请求而作出的及时回应。架构

降级:

举个例子解释,咱们去银行排队办理业务,大部分的银行分为普通窗口、特殊窗口(VIP窗口,老年窗口)。某一天银行大厅排普通窗口的人巨多。这时特殊窗口贴出告示说某时刻以后再开放。那么这时特殊窗口的工做人员就能够空出来去帮其余窗口办理业务,提升办事效率,已达到解决普通窗口排队的人过的目的。这时即为降级,降级的目的是为了解决总体项目的压力,而牺牲掉某一服务模块而采起的措施。微服务

以上为了加深理解分别举了个例子。有不妥的地方欢迎留言指出。下面是前边的总结:

二者其实从有些角度看是有必定的相似性的:
  1. 目的很一致,都是从可用性可靠性着想,为防止系统的总体缓慢甚至崩溃,采用的技术手段;
  2. 最终表现相似,对于二者来讲,最终让用户体验到的是某些功能暂时不可达或不可用;
  3. 粒度通常都是服务级别,固然,业界也有很多更细粒度的作法,好比作到数据持久层(容许查询,不容许增删改);
  4. 自治性要求很高,熔断模式通常都是服务基于策略的自动触发,降级虽然说可人工干预,但在微服务架构下,彻底靠人显然不可能,开关预置、配置中心都是必要手段;
而二者的区别也是明显的:
  1. 触发缘由不太同样,服务熔断通常是某个服务(下游服务)故障引发,而服务降级通常是从总体负荷考虑;
  2. 管理目标的层次不太同样,熔断实际上是一个框架级的处理,每一个微服务都须要(无层级之分),而降级通常须要对业务有层级之分(好比降级通常是从最外围服务开始)

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

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

相关文章

Controller数据导出Excel 详细教程——easypoi-base,easypoi-web,easypoi-annotation

Controller获取数据导出Excel&#xff0c;详细教程 1&#xff1a;导入对应依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.3</version></dependency><dependency&g…

01 - java 开始

Java 的优势 java适合做web后台 java配置环境的时候 java的安装目录&#xff1a;JAVA_HOMEjdk的安装目录&#xff1a;%JAVA_HOME%\bin java的执行机制 先将.java的文件用 javac 编译成 .class的字节码文件再将这些 .class 的字节码文件用 java 执行&#xff08;执行的是文…

15 - java 继承

java继承 This > Son Super > Father Object 类是所有类的顶级父类 只要创建一个类默认都会继承这个顶级父类 – Object 在子类继承父类里面 构造器必须先构造一个父类&#xff08;先有爸爸&#xff0c;才有儿子&#xff09;&#xff0c;必须首先构造父类&#xff0…

easyPOI基本用法详解

文章目录easyPOI基本用法1.Excel文件的简单导入和导出1.1准备工作1.2导入1.3导出1.4图片的导出1.5图片的导入1.6excel模板导出文件1.7excel转html2.Word文件导出2.1使用word模板导出2.2使用word模板导出多页3.excel导入时验证3.1环境准备3.2实战演练3.3注意事项easyPOI基本用法…

16 - java 类加载顺序

类的加载顺序 类对象、静态变量是存在元空间的方法区&#xff0c;实例对象是new出来的&#xff0c;放在堆里面的 一个类加载到内存的完整过程 加载父类 --> 加载子类 --> 构造父类 --> 构造子类 class文件要从磁盘加载到内存形成对象 内存靠地址去取寻址 – 随机存…

360全景倒车影像怎么看_别克关怀-后视镜和倒车影像 倒车时到底看哪个

很多人在考驾照的时候&#xff0c;倒车倒的都很熟练&#xff0c;但是一上路就不行了。一方面&#xff0c;这是因为道路上的状况多变&#xff0c;时常有行人经过&#xff0c;另一方面&#xff0c;上路之后&#xff0c;遇见的停车位千奇百怪&#xff0c;什么样子的都有&#xff0…

17 - 引用类型比较内容

引用数据类型比较 引用数据类型直接比较一定是 false --> 比较的是它俩的地址 Animail a1 new Animal(); Animail a2 new Animal(); System.out.println(a1 a2); //false特殊的 String String s1 "a"; String s2 "a"; System.out.println(s1 s…

springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

springboot使用jxls导出excel 实现思路&#xff1a; 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板&#xff0c;然后在具体的导出接口业务代码里通过IO流加载到这个Excel模板文件&#xff0c;读取指定的工作薄(也就是excel左下角的Shee…

idea(mac) 使用收集

其实 idea 后面的 webstorm phpstorm pycharm… 都大同小异 idea 使用积累1. 设置代码区字体大小2. command​ 滚轮改变字体大小3. 去掉代码区中间的白线4. 查看项目配置5. 自动删除类中无用包、自动导入包6. 显示行号和方法分隔符7. 提示的时候忽略大小写8. 统一显示 utf - 8…

epp是什么意思_什么是1K/2K/3K注塑?

ABC小词条的出现是因为公众号后台大家留言提问的名词很多&#xff0c;我们每周挑一个成本分析相关的小知识点&#xff0c;可能是工艺&#xff0c;成本方法&#xff0c;产品方面等话题&#xff0c;来做一个简短的ABC解释&#xff0c;如有错误欢迎指出。文末会提出一个问题&#…

facebook对话链接_Facebook已开源其最新的聊天机器人Blender

它是一种更具人性化的聊天机器人&#xff0c;并击败了Google成为世界上最好的聊天机器人> Photo by Alex Haney on Unsplash4月29日&#xff0c;Facebook AI Research(FAIR)宣布已构建并开源了一个新的聊天机器人Blender。最先进的开源聊天机器人Facebook AI拥有开源的Blend…

基于easypoi实现自定义模板导出excel

项目中需要做一个统计报表功能&#xff0c;实现各种Excel报表数据导出。要求表头能够动态配置&#xff0c;表数据通过存储过程实现&#xff0c;也要求能够动态配置。 技术选型&#xff1a; 由于之前在项目中使用过easypoi&#xff0c;相对于原生apache poi&#xff0c;能够用很…

vb6 datagrid表格垂直居中_老板不喜欢看你的Excel表格,学完这些美化技巧,早日升职加薪...

Excel报表是工作中经常要制作的&#xff0c;给老板看的表格越是简单明了越好&#xff0c;工作得到认可&#xff0c;给你升职加薪&#xff0c;如果你发给你老板的表格是这样的&#xff1a;对齐方式各种各样&#xff0c;数据看起来也很枯燥&#xff0c;仅需简单4点&#xff0c;轻…

Java接口修饰符详解

接口就是提供一种统一的”协议”&#xff0c;而接口中的属性也属于“协议”中的成员。它们是公共的&#xff0c;静态的&#xff0c;最终的常量。相当于全局常量。抽象类是不“完全”的类&#xff0c;相当于是接口和具体类的一个中间层。即满足接口的抽象&#xff0c;也满足具体…

查看论坛隐藏链接_软连接与硬链接的区别

点击上方蓝色“后端开发杂谈”关注我们, 专注于后端日常开发技术分享硬链接与软连接的联系与区别文件都有文件名和数据, 这在Linux上被分为两部分: 用户数据(user data) 与 元数据(metadata). 用户数据, 即文件数据块( data block), 数据块是记录文件真实内容的地方; 元数据是文…

java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控&#xff0c;那么如果程序出现异常错误时要如何排查呢&#xff1f;并且系统在运行时做了哪些事情我们又从何得知呢&#xff1f;这个时候日志这个概念就出现了&#xff0c;日志的出现对系统监控和异常分析起着…

如何从一张图片里取出其中一部分_如何鉴别坑人的锌合金龙头

01.对大部分人而言&#xff0c;锌合金龙头是一个熟悉又陌生的词儿。当我们提起锌合金龙头时&#xff0c;很多人会一脸茫然的回答&#xff1a;啥&#xff1f;锌合金龙头&#xff1f;没听过&#xff01;不认识&#xff01;但在日常生活中锌合金龙头的出现率可不低&#xff01;不信…

SpringBoot框架中各层(DTO、DAO、Service、Controller)理解

粗略理解 View层→Controller层&#xff08;响应用户请求&#xff09;→Service层&#xff08;接口→接口实现类&#xff09;→DAO层&#xff0c;即Mapper层&#xff08;抽象类&#xff1a;xxxMapper.java文件&#xff0c;具体实现在xxxMapper.xml&#xff09;→Model层&#…

verilog找不到模块_工欲善其事,必先利其器 verilog编辑器搭建

一款合适的编辑器能够大大提高我们代码的编写速度&#xff0c;而sublime就是一款非常强大的编辑器&#xff0c;它在拥有丰富的插件的同时&#xff0c;也具备非常美型的外观。sublime是一款免费的编辑器&#xff0c;虽然不进行购买的话会时不时地提示购买&#xff0c;但是无视就…

log4j2漏洞

log4j2漏洞 这个漏洞到底是怎么回事&#xff1f; 怎么利用这个漏洞呢&#xff1f; 我看了很多技术分析文章&#xff0c;都太过专业&#xff0c;很多非Java技术栈或者不搞安全的人只能看个一知半解&#xff0c;导致大家只能看个热闹&#xff0c;对这个漏洞的成因、原理、利用…