ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

常见分布式算法之(二)——限流算法

2021-07-06 12:34:48  阅读:163  来源: 互联网

标签:10 令牌 窗口 算法 限流 漏桶 分布式


在分布式系统高并发场景下,用于控制流量大小,防止由于流量过大导致服务器宕机。常用的限流算法如下:

一、滚动窗口

又称计算器限流法,包括两种参数,即窗口时间大小(windows_sieze)和限流次数(count),假设windows_size=5秒,count=10,即每个窗口时间5秒内,最大的访问次数不超过10,如下图

 

 

  • 每个窗口开始时,计数器清零,每收到一次访问请求,计数器+1。
  • 当一个窗口内,请求次数大于限流次数时(10)时开始限流。

二、滑动窗口

如滚动窗口例子,当第4秒到第5秒之间(窗口交替时),如果突然出现高并发时,可能会导致响应次数超过10,比如第4秒突然出现9次访问,第5秒也出现了9次访问,那么这两秒之内就出现了18次,超过预先设想值(5秒内10次)。为避免上述情况,可以使用滑动窗口进行改进,如下图:


滑动窗口包括两个重要参数,即窗口大小(window_size)和滑动步长(slide_step),当window_size == slide_step时,即滑动窗口等同于滚动窗口。 

三、令牌桶限流

  • 令牌桶限流包括两个参数:令牌生成速率(replenishRate)、桶大小(burstCapacity),replenishRate用于指定客户端请求的平均访问次数,burstCapactiy用于指定访问突发峰值。
  • 由于令牌桶有固定的大小,当请求速度小于令牌生成速度时,令牌桶会被填满。
  • 令牌桶内剩余令牌用于处理突发流量,这也是令牌桶最重要的特性。

四、漏桶限流

  和令牌桶限流算法一样,漏桶算法内部也同样维护一个容器,这个容器会以恒定速度出水,不管上面的水流速度有多快,漏桶水滴的流出速度始终保持不变。实际上消息中间件就是使用了漏桶限流的思想,不管生产者的请求有多大,消息的处理能力取决于消费者。

五、回顾总结

  • 漏桶算法与令牌桶算法的主要区别在于:漏桶算法能够强行限制数据的传输速率,而令牌桶算法能够在限制平均传输速率的同时还允许某种程度的突发传输。
  • 漏桶算法不能够有效地使用网络资源,因为漏桶的漏出速率是固定的,所以即使网络中没有发生拥塞,漏桶算法也不能使数据流速率达到端口的速率,而令牌桶算法则能够满足这些具有突发特性的流量。

标签:10,令牌,窗口,算法,限流,漏桶,分布式
来源: https://www.cnblogs.com/jaco32/p/14976150.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有