weekly icon indicating copy to clipboard operation
weekly copied to clipboard

【文章推荐】介绍 5 种限流算法,7 种限流方式

Open niumoo opened this issue 1 year ago • 3 comments

这个主要是 Java 服务器端限流措施,可以参考

Michael18811380328 avatar Jul 18 '22 08:07 Michael18811380328

过了一遍,基本包括了我们常见限流策略方案,但是如果把各个限流策略 递进关系相关性 这类核心概念补充一下,文章会让读者更加便于接受和总结。

首先计数器方式也有人说 固定窗口 的,实现简单,精确度不够,临界超QPS,简而言之就是有 流量突刺,所以引出 滑动窗口,好处在于能够一定程度上解决了精确度,但是又不稳定,不能完全消除这种超qps的概率,不是绝对的精确,并且随着你追求精确度去不断窗口细分,成本代价也不断增加,还是没有达到绝对精确,那有没有绝对精确的呢?

有,滑动日志,它解决了精确度问题,达到了完全精确,但是空间复杂度O(N)和时间复杂度O(logN)的问题,又使得滑动日志虽然达到了绝对精确但是牺牲了很大的成本,计算复杂度很高。并且还有一个问题,就是你虽然精确度完全精确了,但是你流量不够 平滑,在极小极限的时间窗口情况下,你流量平滑度还是不够,就算你通过计算复杂度去换取平滑度,但是做不到绝对平滑。简而言之就是你没法很好的去控制 速率,于是又有了 令牌桶漏桶,设计思路基本都是控制平均访问速率,像 v ≤ N / T。区别就在于漏桶能保护下游服务,但是牺牲了响应性能,就是匀速流出肯定需要流量等待嘛,而令牌桶虽然没有很好保护了下游服务但是能应对突刺流量,也提升了响应体验。

另外,往细了说,令牌桶和漏桶就是滑动窗口的变种,无非加了速率控制和应对不同的流量模型和响应场景。

所以限流的设计,把读者往几方面引导,能更加了解限流的本质,例如:

  • 精确度
  • 平滑度
  • 响应
  • 计算成本
  • more

另外还有,就是讲分布式限流方面,就变得复杂,引入了中心节点,引入了协调者,其中必然带来时延,并且节点通信间也带来了精确度问题,因此就稍复杂了些。

senlypan avatar Jul 18 '22 09:07 senlypan

过了一遍,基本包括了我们常见限流策略方案,但是如果把各个限流策略 递进关系相关性 这类核心概念补充一下,文章会让读者更加便于接受和总结。

首先计数器方式也有人说 固定窗口 的,实现简单,精确度不够,临界超QPS,简而言之就是有 流量突刺,所以引出 滑动窗口,好处在于能够一定程度上解决了精确度,但是又不稳定,不能完全消除这种超qps的概率,不是绝对的精确,并且随着你追求精确度去不断窗口细分,成本代价也不断增加,还是没有达到绝对精确,那有没有绝对精确的呢?

有,滑动日志,它解决了精确度问题,达到了完全精确,但是空间复杂度O(N)和时间复杂度O(logN)的问题,又使得滑动日志虽然达到了绝对精确但是牺牲了很大的成本,计算复杂度很高。并且还有一个问题,就是你虽然精确度完全精确了,但是你流量不够 平滑,在极小极限的时间窗口情况下,你流量平滑度还是不够,就算你通过计算复杂度去换取平滑度,但是做不到绝对平滑。简而言之就是你没法很好的去控制 速率,于是又有了 令牌桶漏桶,设计思路基本都是控制平均访问速率,像 v ≤ N / T。区别就在于漏桶能保护下游服务,但是牺牲了响应性能,就是匀速流出肯定需要流量等待嘛,而令牌桶虽然没有很好保护了下游服务但是能应对突刺流量,也提升了响应体验。

另外,往细了说,令牌桶和漏桶就是滑动窗口的变种,无非加了速率控制和应对不同的流量模型和响应场景。

所以限流的设计,把读者往几方面引导,能更加了解限流的本质,例如:

  • 精确度
  • 平滑度
  • 响应
  • 计算成本
  • more

另外还有,就是讲分布式限流方面,就变得复杂,引入了中心节点,引入了协调者,其中必然带来时延,并且节点通信间也带来了精确度问题,因此就稍复杂了些。

大佬总结的很好,回头来看这篇文章确实还有很多改进的空间,你的评价很受用!

niumoo avatar Jul 19 '22 02:07 niumoo