Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 6.3 Spring Cloud Zuul 限流 - Go语言中文社区

Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 6.3 Spring Cloud Zuul 限流


6.3 Spring Cloud Zuul 限流

前面的章节中,我们介绍了在Hystrix中,限流可以通过熔断来实现,通过某个阀值来对异常流量进行降级处理,除了异常流量我们可以通过服务降级之外,我们还可以使用一些其他的限流方式来保护我们的系统免受“系统雪崩”。这一节,我们来介绍一下Spring Cloud Zuul的限流。

6.3.1 限流算法

说到限流算法,这里列举几个比较简单也是常见的算法:

  1. 计数器算法

    计数器算范比较简单和粗暴,一般我们会限制1s之内能通过的请求数,比如限流为100qps,算法的实现思路就是从第一个请求进来开始计时,在接下去的1s内,每来一个请求,就把计数加1,如果累加的数字达到了100,那么后续的请求就会被全部拒绝。等到1s结束后,把计数恢复成0,重新开始计数。

    具体的实现可以是这样的:对于每次服务调用,可以通过 AtomicLong.incrementAndGet()方法来给计数器加1并返回最新值,通过这个最新值和阈值进行比较。

    这种实现方式,中间有一个最大的弊端是:如果我们在1s的前100ms中,已经通过了100个请求,那么在后面的900ms中,只能把剩下所有的请求都拒绝掉,这种现象被称为“突刺现象”。

  2. 漏桶(Leaky Bucket)算法

    为了消除“突刺现象”,可以采用漏桶算法实现限流。漏桶的原型是一个底部有窟窿的桶,桶上方有一个注水孔,水不断的流入桶中,桶下方的窟窿会已一个相对恒定的速度漏水,在流入大于流出的情况下,桶在一定时间以后就会被注慢,这时多余的水就会溢出;在流入小于流出的情况下,漏桶不起任何作用。如图6-10:

    html>

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/meteor_93/article/details/104122038
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢