限流算法

限流的算法

常见的限流算法有:计数器、漏桶和令牌桶算法。

计数器

  • 设定单位时间限制接口的请求数量为n,单位时间内的每次请求加1,如果超过请求数量的限制,则拒绝或者等待下一个单位时间的但来,缺点:请求不均衡,导致响应不平滑,有时集中、有时稀疏

令牌桶算法

令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。令牌桶算法的描述如下:

  • 假设限制 2r/s ,则按照 500 毫秒的固定速率往桶中添加令牌;
  • 桶中最多存放 b 个令牌,当桶满时,新添加的令牌被丢弃或拒绝;
  • 当一个 n 个字节大小的数据包到达,将从桶中删除 n 个令牌,接着数据包被发送到网络上;(或者说n个请求,请求想要执行必须先拿到执行令牌,同时令牌桶内相应的减少n个令牌,没拿到令牌的请求被拒绝或者等待)
  • 如果桶中的令牌不足 n 个,则不会删除令牌,且该数据包将被限流(要么丢弃,要么缓冲区等待)。

漏桶算法

漏桶作为计量工具( The Leaky Bucket Algorithm as a Meter )时,可以用于流量整形( Traffic Shaping )和流量控制( TrafficPolicing ),漏桶算法的描述如下:

  • 一个固定容量的漏桶,按照常量固定速率流出水滴;
  • 如果桶是空的,则不需流出水滴;
  • 可以以任意速率流入水滴到漏桶;
  • 如果流入水滴超出了桶的容量,则流入的水滴溢出了(被丢弃),而漏桶容量是不变的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文参考资料 高并发系统之限流特技:http://blog.csdn.net/g_hongjin/article/...
    alivs阅读 1,345评论 0 2
  • 曾经在一个大神的blog里看到这样一句话:在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限...
    Johnsonxu阅读 2,005评论 0 4
  • 摘要:在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。而有些场景并不能用缓存和降级来解决,因此需有一种...
    落羽成霜丶阅读 2,171评论 0 18
  • 聊聊高并发系统限流特技-1来自开涛的博客 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是...
    meng_philip123阅读 6,684评论 1 20
  • 当我在一个地方熟悉过后,对于生活和工作的巨大落差,会给我一种恐慌感。这种恐慌感让我有些坐立不安。但这里遇见的人,每...
    苏潇潇阅读 136评论 0 0