服务保护
本文最后更新于298 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

线程隔离

线程隔离有两种方式实现:

  • 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果
  • 信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求
优点缺点场景
线程池隔离支持主动超时,支持异步调用线程的额外开销比较大低扇出
信号量隔离轻量级,无额外开销不支持主动超时,不支持异步调用高频调用、高扇出
Sentinel的线程隔离就是基于信号量隔离实现的,而Hystix两种都支持,但默认是基于线程池隔离

Hystix和Sentinel线程隔离的区别?

算法

滑动窗口计数算法

熔断功能中,需要统计异常请求或慢请求比例,也就是计数。在限流的时候,要统计每秒钟的QPS,同样是计数。可见计数算法在熔断限流中的应用非常多。sentinel中采用的计数器算法就是滑动窗口计数算法

令牌桶算法

Sentinel中的热点参数限流正是基于令牌桶算法实现的

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃

使用令牌桶算法时,尽量不要将令牌上限设定到服务能承受的QPS上限。而是预留一定的波动空间,这样我们才能应对突发流量。

漏桶算法

请求到达后不是直接处理,而是先放入一个队列。而后以固定的速率从队列中取出并处理请求。之所以叫漏桶算法,就是把请求看做水,队列看做是一个漏了的桶。

  • 将每个请求视作”水滴”放入”漏桶”进行存储;
  • “漏桶”以固定速率向外”漏”出请求来执行,如果”漏桶”空了则停止”漏水”;
  • 如果”漏桶”满了则多余的”水滴”会被直接丢弃。

漏桶的优势就是流量整型,桶就像是一个大坝,请求就是水。并发量不断波动,就如图水流时大时小,但都会被大坝拦住。而后大坝按照固定的速度放水,避免下游被洪水淹没。

sentinel中的限流中的排队等待功能正是基于漏桶算法实现的。

Sentinel和Gateway限流的区别?

如果觉得本文对您有所帮助,那这将是对我最大的鼓励,期待您留下您宝贵的评论。
暂无评论

发送评论 编辑评论


				
上一篇
下一篇