熔断、限流、降级的区别

6/30/2022 10:07:02 AM
692
0

熔断、限流、降级都是保持系统稳定运行的策略,但针对的场景有所不同

 

熔断

服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用[1]

上面的解释中有两个很关键的词,一个是暂时,一个是停止

停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回

暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均返回成功,则增大调用量)试探调用下游服务,
当下游服务恢复可用时,自动停止熔断。

熔段解决如下几个问题:

  • 当所依赖的对象不稳定时,能够起到快速失败的目的;
  • 快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复

 

限流

限流是指上游服务对本服务请求 QPS 超过阙值时,通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。

1.2 常见的限流算法

常见的限流算法有:计数器、漏桶、令牌桶、滑动窗口。

计数器算法

  • 实现:采用计数器实现限流有点简单粗暴,一般我们会限制一秒钟的能够通过的请求数,比如限流qps为100,算法的实现思路就是从第一个请求进来开始计时,在接下去的1s内,每来一个请求,就把计数加1,如果累加的数字达到了100,那么后续的请求就会被全部拒绝。等到1s结束后,把计数恢复成0,重新开始计数。
  • 弊端:如果我在单位时间1s内的前10ms,已经通过了100个请求,后面的990ms,只能眼巴巴的把请求拒绝,这种现象称为“突刺现象”,不平滑;
     

降级

降级是指当自身服务压力增大时,采取一些手段,增强自身服务的处理能力,以保障服务的持续可用。比如,下线非核心服务以保证核心服务的稳定、降低实时性、降低数据一致性

措施产生原因针对服务
熔断下游服务不可用下游服务
降级自身服务的处理能力不够自身服务
限流上游服务请求增多上游服务

全部评论



提问