目录

目录

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、案例


1、概念

1.1 降级

  • 服务降级处理是在客户端实现完成的,与服务端没有关系。
  • 当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级的思想是丢车保帅。

1.1.1 常见降级:

  • 服务接口拒绝服务:页面能访问,但是添加删除提示服务器繁忙。页面内容也可在Varnish或CDN内获取。
  • 页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到varnish或nginx的一个静态页面。
  • 延迟持久化:页面访问照常,但是涉及记录变更,会提示稍晚能看到结果,将数据记录到异步队列或log,服务恢复后执行。
  • 随机拒绝服务:服务接口随机拒绝服务,让用户重试,目前较少有人采用。因为用户体验不佳。

1.1.2 示例

A -> B -> C,C服务存在C1、C2、C3、C4

  1. 如果C4优先级较低,一定是先降级优先级低的接口C4 。
  2. 如果服务链路整体没有性能特别差的点,比如就是外部流量突然激增,那么就从外到内开始降级。
  3. 如果某个服务能检测到自身负载上升,那么可以从这个服务自身做降级。

1.2 熔断

如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

1.2.1 熔断设计

三个模块:熔断请求判断算法、熔断恢复机制、熔断报警。

  • 熔断请求判断机制算法:使用无锁循环队列计数,每个熔断器默认维护10个bucket,每1秒一个bucket,每个blucket记录请求的成功、失败、超时、拒绝的状态,默认错误超过50%且10秒内超过20个请求进行中断拦截。
  • 熔断恢复:对于被熔断的请求,每隔5s允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复。
  • 熔断报警:对于熔断的请求打日志,异常请求超过某些设定则报警。

1.2.2 示例

A -> B -> C,如果C出现问题了,那么B熔断了,则A就不用熔断了。

1.3 限流

限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。

常见限流方式

  • 基于请求限流:指从外部请求的角度考虑限流。

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

1.3.1 算法

  • 漏桶算法:漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。
  • 令牌桶算法:对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
    令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

单机限流:Guava 中的 RateLimiter。在 Guava 的 RateLimiter 中,使用的就是令牌桶算法,允许部分突发流量传输。在其源码里,可以看到能够突发传输的流量等于 maxBurstSeconds * qps。

集群限流:TC 提供的 common-blocking 组件提供此功能。

算法对比:https://blog.csdn.net/xixingzhe2/article/details/128904027

1.3.2 示例

B只允许A以QPS<=5的流量请求,而C却只允许B以QPS<=3的qps请求,那么B给A的设定就有点大,上游的设置依赖下游。而且限流对QPS的配置,可能会随着服务加减机器而变化,最好是能在集群层面配置,自动根据集群大小调整。

2、区别

概念 目的 触发方 触发场景 解决方 处理方案 所有用户表现一致 用户表现
熔断 从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃 某个服务(下游服务)不可用 当失败的调用到一定阈值,如缺省是5秒内20次调用失败,就会启动熔断机制,自动触发 调用方 开启熔断之后,如何实现自动恢复?每隔一段时间,释放一个请求到服务端进行探测,如果后端服务已经恢复,则自动恢复 不一致 用户体验到的是某些功能暂时不可达或不可用
降级 为防止系统的整体缓慢甚至崩溃 服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 整体负荷比较大,进行人工干预 调用方 取消降级 一致 用户体验到的是某些功能暂时不可达或不可用
限流 通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统 通过对进行限速来保护系统 超出了服务每分钟的调用量或服务的某个方法调用量 如果是由于当时压测并发数较高引起;视具体情况而定 调大阈值 一致 一旦达到限制速率则可以拒绝服务或等待

3、案例

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

思路:

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

参考:

服务降级、熔断、限流的区别_会思考的男人的博客-CSDN博客_服务熔断和服务降级和服务限流

压力测试术语之熔断、降级、限流-布布扣-bubuko.com

服务降级,服务熔断,服务限流 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区

熔断,限流,降级 一些理解 - 简书

服务降级、熔断、限流相关推荐

  1. java 限流熔断_SpringCloud-Alibaba-Sentinel服务降级,热点限流,服务熔断

    前言:除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.一个服务常常会调用别的模块,可能是另外的一个远程服务.数据库,或者第三方 api 等.例如,支付的时候,可能需 ...

  2. 服务降级,限流,削峰

    服务降级 举例:淘宝的搜索功能,平时的时候 搜全站.高峰期的时候,限制只能搜店内或者一些品类不给搜. 削峰 把瞬时流量拉长.强行把并行变成串行 举例:12306的春运票,一段时间一段时间的放,一个地方 ...

  3. 系统降级熔断限流和排队

    这类问题的主要原因在于系统压力太大.负载太高,导致无法快速处理业务请求,由此引发更多的后续问题.最常见的情况就是,数据库慢查询将数据库的服务器资源耗尽,导致读写超时,业务读写数据库时要么无法连接数据库 ...

  4. dubbo服务降级与限流

    前言 作为RPC框架,dubbo在调用过程中不可避免的会出现各种异常问题,在使用springcloud进行微服务治理时,会接触到hystrix,sentinel等服务限流降级框架,同样对于dubbo来 ...

  5. 「微服务系列 13」熔断限流隔离降级

    我们知道微服务分布式依赖关系错综复杂,比方说前端的请求转化为后端调用的服务请求,一个前端请求会转为成很多个后端调用的服务请求,那么这个时候后台的服务出现不稳定或者延迟,如果没有好的限流熔断措施,可能会 ...

  6. 服务熔断、降级、限流、异步RPC -- HyStrix

    本人新书出版,对技术感兴趣的朋友请关注: https://mp.weixin.qq.com/s/uq2cw2Lgf-s4nPHJ4WH4aw 在今天,基于SOA的架构已经大行其道.伴随着架构的SOA化 ...

  7. 服务如何做熔断,降级,限流?

    文章目录 基础概念 降级(自身服务出现问题,降级) 熔断(依赖的外部接口出现故障的情况时,断绝和外部接口的关系) 限流 我们是如何做的? 降级 熔断 后端服务是通过 Hystrix 做的熔断与降级 降 ...

  8. 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

    目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践 1. 开源代码整体架构设计 2. 微服务逻辑架构设计 3. 微服务熔断降级与限流规划 3.1 微服务熔断 ...

  9. 服务容错、限流、资源隔离、熔断、监控…3天,撸完了!

    随着业务规模增大,服务拆分往往成为必然选择,团队开发效率.部署灵活度.扩展性会得到大幅度提升. 但整个应用分散成多个服务后,定位故障点变得更加困难:一个服务故障可能导致整个系统挂掉,稳定性下降,对系统 ...

  10. Dubbo使用Sentinel来对服务进行降级与限流

    2019独角兽企业重金招聘Python工程师标准>>> 一.Sentinel 是什么 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切 ...

最新文章

  1. C语言嵌入式系统编程修炼之(六)性能优化
  2. 简单说一下什么是回流和重绘
  3. php.ini 相对路径,php中zend相对路径问题
  4. 可以自发热的袜子,穿上暖3.9℃,这个冬天不再怕脚冷!
  5. itext-2.1.7.jar
  6. 有哪些指标可以描述两个图(graph)的相似度?
  7. 语言速算24点的小窍门_生活百科,知道这25个实用的居家小窍门,可以为你省去不少麻烦...
  8. flash相册制作软件模板_儿童照片相册模板 怎么制作炫酷视频相册
  9. 设计模式之二 工厂模式
  10. 计算机组成原理总概括(转)
  11. PHP操作文件的常用函数
  12. 视频 Docker 学习(高级篇)
  13. python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】
  14. binance ping pong
  15. 计算机课程word教学,浅谈计算机Word表格的制作课程教学
  16. Java解析excel工具easyexcel 助你快速简单避免OOM
  17. 矩阵中的旋转(Rotation)
  18. IOS开发之内购-AppStore
  19. 冒泡排序由浅入深详细分析图解
  20. IOS APP更新问题

热门文章

  1. Matlab基于主成分分析(PCA)的平面拟合—点云处理及可视化第2期
  2. 在外资银行开户有什么好处?
  3. element ui 滚动条插件
  4. 记一次ES整合logstash所遇的坑
  5. 一个馒头引发的血案...请看完无极后观看此片,保笑死人不偿命
  6. 2021年低压电工考试及低压电工作业模拟考试
  7. 常规功能和模块自定义系统 (cfcmms)—013给Extjs6加入多界面主题(Theme)
  8. 北京昌平数据中心,T3级IDC机房简介
  9. emmet :_使用Emmet快速编写HTML Crazy Fast:交互式指南
  10. php 5秒跳转,PHP 5秒后自动跳转到某页面