限流的必要性

如果一段时间内请求的数量过大,就会给服务器造成很大压力,可能导致服务器无法提供其它服务。

计数器算法

通过一个计数器 counter 来统计一段时间内请求的数量,并且在指定的时间之后重置计数器。

该方法实现简单,但是有临界问题。例如,允许一分钟内通过的请求数为 N,如果在重置计数器的前后一小段时间内分别请求 N 次,那么在这一小段时间内总共请求了 2N 次,超出了规定的 N 次。

滑动窗口算法

是计数器算法的一种改进,将原来的一个时间窗口划分成多个时间窗口,并且不断向右滑动该窗口。

在临界位置的突发请求都会被算到时间窗口内,因此可以解决计数器算法的临界问题。

漏桶算法

能够以恒定速率处理请求。

请求需要先放入缓存中,当缓存满了时,请求会被丢弃。

令牌桶算法

和漏桶算法的区别在于它是以恒定速率添加令牌,当一个请求到来时,先从令牌桶取出一个令牌,如果能取到令牌那么就可以处理该请求。

令牌桶的大小有限,超过一定的令牌之后再添加进来的令牌会被丢弃。

令牌桶算法允许突发请求,因为令牌桶存放了很多令牌,那么大量的突发请求会被执行。但是它不会出现临界问题,在令牌用完之后,令牌是以一个恒定的速率添加到令牌桶中的,因此不能再次发送大量突发请求。

  • Leaky Bucket & Tocken Bucket - Traffic shaping

转载于:https://juejin.im/post/5caa099d6fb9a05e5b2adfac

限流算法(记录cyc大佬的专栏)相关推荐

  1. 简单介绍4种限流算法!(固定窗口计数器算法、滑动窗口计数器算法、漏桶算法、令牌桶算法)...

    作者:架构小菜 链接:https://www.jianshu.com/p/7987bf427b5b 简单介绍 4 种非常好理解并且容易实现的限流算法! 一.固定窗口计数器算法 规定我们单位时间处理的请 ...

  2. 面试必备:4种经典限流算法讲解

    最近,我们的业务系统引入了Guava的RateLimiter限流组件,它是基于令牌桶算法实现的,而令牌桶是非常经典的限流算法.本文将跟大家一起学习几种经典的限流算法. 公众号:捡田螺的小男孩 限流是什 ...

  3. 限流算法(漏桶算法、令牌桶算法)对比

    限流算法(漏桶算法.令牌桶算法) 漏桶算法: 有个桶,比如最大能进2个单位的水(请求),桶底有个洞,每个单位的水都会在桶里待3秒后漏下去. 那么这个桶就可以同时处理2个单位的水. 如果进水太多,同一时 ...

  4. 详解4种经典的限流算法

    最近,我们的业务系统引入了Guava的RateLimiter限流组件,它是基于令牌桶算法实现的,而令牌桶是非常经典的限流算法.本文将跟大家一起学习几种经典的限流算法. 限流是什么? 维基百科的概念如下 ...

  5. 服务高可用利器——限流算法介绍与示例

    文章目录 0.前言 1.计数器 1.1 简介 1.2 示例 2.滑动窗口 2.1 简介 2.2 示例 3.漏桶 3.1 简介 3.2 示例 4.令牌桶 4.1 简介 4.2 示例 5.小结 参考文献 ...

  6. Rate Limiting Algorithms (限流算法)

    1. Leaky Bucket (漏桶) 漏桶是一种常用的限流策略.NGINX 和 QEMU 中利用漏桶来实现限流.在漏桶模型中,桶的容量是固定的,当桶被流进的水填满时,多余的水就会溢出:虽然水可以以 ...

  7. 高并发系统的限流算法与实现

    开发高并发系统时有三把利器用来保护系统:缓存.降级和限流. 缓存:缓存的目的是提升系统访问速度和增大系统处理容量. 降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的 ...

  8. 服务器三种常见的限流算法

    服务器三种常见的限流算法 1.计数器算法 2. 滑动窗口 3.令牌桶算法 4.漏桶算法 滑动窗口限流 漏桶限流 令牌桶限流 限流算法总结 单机限流和分布式限流 限流组件 在开发高并发系统时,有三把利器 ...

  9. 限流算法-常见的4种限流算法

    首先我们先来看看什么是限流? 限流是指在系统面临高并发.大流量请求的情况下,限制新的流量对系统的访问,从而保证系统服务的安全性. 另一种解释:在计算机网络中,限流就是控制网络接口发送或接收请求的速率, ...

最新文章

  1. 微软宣布 Win10 设备数突破8亿,距离10亿还远吗?
  2. java中图片文件的判断
  3. 机器学习--Hoeffding Inequality--界定概率边界
  4. mongodb文档操作
  5. JAVA——自定义排序(实现Comparable接口)
  6. android应用程序签名
  7. UScript中的Pow函数
  8. Import declarations are not supported by current JavaScript version
  9. CentOS配置国内(阿里云)镜像加速器
  10. UE4 虚幻引擎,BluePrint蓝图接受输入
  11. 如何和下属谈心(转)
  12. 自动化本科生考计算机研究生,请教关于自动化专业本科生报考研究生的问题?...
  13. java导出excel弹出下载框_[Java教程]Springmvc和poi3.9导出excel并弹出下载框
  14. 自己怎么开发一个软件app、如何开发一个app系统软件?
  15. 解决一个应用连接oracle端口1521不通问题
  16. solidworks渲染材质库_solidworks渲染材质参数
  17. 如何立即关闭 Node 服务器?
  18. 十分钟学python-【译】10分钟学会Pandas
  19. Python输入三角形的三条边求面积,输入圆的半径输出面积周长的两个程序的代码
  20. 在1000万整数中找到前100个最大的数 算法

热门文章

  1. python字典append_python中字典重复赋值,append到list中引发的异常
  2. 定时/计数器(定时和计数的功能)、定时器中断
  3. css版式_第2部分:使版式具有响应能力,并为以后的版本奠定基础
  4. Python这些位运算的妙用,绝对让你大开眼界
  5. 梯度下降法和随机梯度下降法
  6. 第五课 路由之初识路由
  7. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
  8. Win7下搭建外网环境的SVN服务器
  9. HTTP/2 规格制定完成
  10. Android两个注意事项.深入了解Intent和IntentFilter(两)