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

服务降级:

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

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

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

降级分类

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

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

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

自动降级分类

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

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

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

(4)、限流降级

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

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

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

服务降级要考虑的问题:

1.核心和非核心服务

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

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

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







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

降级

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

常见降级方式:

  • 系统后门降级:系统预留后门用于降级,比如提供一个降级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. 管理目标的层次不太同样,熔断实际上是一个框架级的处理,每一个微服务都须要(无层级之分),而降级通常须要对业务有层级之分(好比降级通常是从最外围服务开始)

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

  1. 微服务限流及熔断一:四种限流算法(计数器算法、滑动窗口算法、令牌限流算法、漏桶限流算法)

    引言 本篇内容根据<spring cloud alibaba 微服务原理与实战>中内容摘取,希望和大家分享限流的思想,本篇不涉及代码层面的实现. 限流的目的 目的:通过限制并发访问数或者限 ...

  2. 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  3. 微服务网关鉴权:gateway使用、网关限流使用 用户密码加密 JWT鉴权

    目标 掌握微服务网关Gateway的系统搭建 掌握网关限流的实现 能够使用BCrypt实现对密码的加密与验证 了解加密算法 能够使用JWT实现微服务鉴权 1.微服务网关Gateway 1.1 微服务网 ...

  4. Sentinel降级_异常数_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0041

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们再说最后一个通过异常数来降级 异常数是说,当资源近1分钟的异常数目超过阈值,以后进行熔断, ...

  5. Sentinel降级_异常比例_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0040

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们再看异常比例 这里就是说,当QPS,每秒请求数要大于5,并且每秒异常的总数占通过量的,比率 ...

  6. 服务容错设计:流量控制、服务熔断、服务降级

    一. 为什么需要容错设计: 在分布式系统中,因为使用的机器和服务非常多,所以故障发生的频率会比传统的单体应用更大.只不过,单体应用的故障影响面很大,而分布式系统中由于故障的影响面可以被隔离,所以影响面 ...

  7. c++突破网关屏蔽_通过API网关实现微服务管控-限流,熔断和降级

    今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容.在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断.包括也不断地在谈去中心化架构 ...

  8. 服务降级、熔断、限流

    目录 目录 1.概念 1.1 降级 1.1.1 常见降级: 1.1.2 示例 1.2 熔断 1.2.1 熔断设计 1.2.2 示例 1.3 限流 1.3.1 算法 1.3.2 示例 2.区别 3.案例 ...

  9. Sentinel微服务限流、熔断、降级介绍(一)

    概述 在互联网应用中,会有很多突发性的高并发访问场景,比如双11大促.秒杀等.这些场景最大的特点就是访问量会远远超出系统所能够处理的并发数. 在没有任何保护机制的情况下,如果所有的流量都进入服务器,很 ...

最新文章

  1. photoshop学习笔记(一)2015-12-4【新浪云搬运】
  2. 居然之家忍“刮骨疗伤”之痛拥抱新零售
  3. java hasfocus_Java KeyEvent.hasNoModifiers方法代碼示例
  4. 继承练习 :开发一个系统时 需要对员工进行建模 员工包含3个属性 姓名 工号 工资 功能 work
  5. debug LUW1 - do binding workflow
  6. vue是什么软件_Angular vs React vs Vue:2020年的最佳选择是什么?
  7. ant-design-vue 快速入手及常用标签
  8. Nancy之Cache的简单使用
  9. 大学四年,电脑必备的三个宝藏工具软件
  10. 室内设计——别墅设计方案(包含预览图jpg和.psd文件)
  11. 1. C语言---输出格式大全
  12. 关于Tomcat和Servlet容器的小结
  13. 计算机位数怎么看win10,查看Windows10系统是32位还是64位的三种方法
  14. 黑苹果睡眠问题(仅适用自己的配置)
  15. 【FPGA】VGA驱动:行同步时序+场同步时序
  16. 多生成树协议,冗余备份,负载均衡
  17. wps怎么关闭视图保护_怎么在PPT2013中清除编辑受保护视图功能?
  18. 通过串口给ESP8266发送AT指令连接wifi的注意事项
  19. 什么降风噪最好的蓝牙耳机?2021主动降噪耳机推荐
  20. 5 Pandas数据库

热门文章

  1. [转载] 详解Java中的泛型
  2. python二分法查找程序_查找Python程序的输出| 套装2(基础)
  3. 动态路由协议_动态路由协议的类别
  4. 清空 linux 服务器,Linux服务器清理
  5. ruby array_Array.select! Ruby中的示例方法
  6. long类型20位示例_Java Long类numberOfTrailingZeros()方法及示例
  7. JS判断文本框中只能输入数字和小数点
  8. python基本的信号与槽函数的使用 信号发射 槽函数接收
  9. QT5获取CPU编号和硬盘序列号
  10. 全网最详细 Python如何读取NIFTI格式图像(.nii文件)和 .npy格式文件和pkl标签文件内容