sentinel

限流降级方案

2019-10-28  本文已影响0人  lesline

限流算法

并发数限流

  1. 计数器并发数限流:使用共享变量实现
  2. 信号量:使用java中的Semaphore

QPS限流

  1. 计数器法:实现简单,精度不高,重置节点时无法处理突发请求
  2. 滑动窗口:滑动窗口的窗口越小,则精度越高,相应的资源消耗也更高。
  3. 漏桶算法 : 限制的是流出速率,突发请求要排队,对服务保护较好;流入随机,流出固定
  4. 令牌桶算法 :限制的是平均流入速率,允许一定程度突发请求(无需排队)。

限流算法实现 - 简书

限流方法对比

计数器 VS 滑动窗口
计数器算法是最简单的算法,可以看成是滑动窗口的低精度实现。滑动窗口由于需要存储多份的计数器(每一个格子存一份),所以滑动窗口在实现上需要更多的存储空间。也就是说,如果滑动窗口的精度越高,需要的存储空间就越大。

令牌桶和漏桶对比:

限流降级实现

redis

redis+lua限流 - 简书

Guava RateLimiter

Guava RateLimiter使用和源码分析 - 简书

Hystrix

5、 spring cloud:Hystrix - 简书

Sentinel

sentinel概念 - 简书

  1. 并发数/线程数:
    共享变量:不同版本用了不同实现

volitle 与 LongAdder - 简书

  1. QPS限流/降级:
    滑动窗口:Sentinel 底层采用高性能的滑动窗口数据结构来统计实时的秒级指标数据。

最大不同点:
Hystrix通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢(线程池隔离)。这种隔离方案虽然隔离性比较好,但是代价就是线程数目太多,线程上下文切换的 overhead 比较大,特别是对低延时的调用有比较大的影响。Sentinel 并发线程数限流不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目,如果超出阈值,新的请求会被立即拒绝,效果类似于信号量隔离。

动态配置支持:
Hystrix只提供了配置修改的入口,没有将配置界面化,如果想在页面上动态调整配置,还需要自己实现。

方案对比

Sentinel 与 Hystrix 的对比 · alibaba/Sentinel Wiki · GitHub

上一篇下一篇

猜你喜欢

热点阅读