Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
niumoo opened this issue Jul 15, 2022 · 3 comments
Open

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

niumoo opened this issue Jul 15, 2022 · 3 comments

Comments

@niumoo
Copy link

niumoo commented Jul 15, 2022

介绍 5 种限流算法,7 种限流方式

@Michael18811380328
Copy link

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

@senlypan
Copy link

senlypan commented Jul 18, 2022

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

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

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

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

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

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

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

@niumoo
Copy link
Author

niumoo commented Jul 19, 2022

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

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

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

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

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants