fifo页面置换算法设计思路_说说限流算法与设计思路

都知道目前的常规的限流算法有令牌桶和漏桶算法.今天就这些限流常见的算法给大家做一个详细的介绍与实现思路.

固定窗口

这个算法是最为简单的一个算法,Redis存储key和value,key是任意的,value代表一秒内请求的值,设置一个计时器每个一秒钟将限流的key设置为0.
当有请求来临时执行incr key,key超出了一定值后进行限流.

滑动窗口

tcp就是使用的滑动窗口策略来限制发送的速率.但是tcp的滑动窗口是基于发送和接收的包的大小来限制发送的速率.
我们根据其思想可以改为基于时间的滑动窗口.限制1s内最多请求多少次,且是滑动的.

设定两个边界:窗口大小设置为n,窗口的左边界left右边界right.
固定且不可改变,在设定一个指针point.point指针和right重合代表窗口关闭.point指针和left指针重合代表窗口内没有流量.不能超过leftright边界.

根据业务请求量设定每隔xpoint指针向左移动1次.当有请求进入时point指针向右移动1次.达到n次后窗口关闭.

滑动窗口限流也可以避免漏桶出现的无法应对顺时大流量的请求.

除此之外我们还可以设计一种可伸缩的窗口,根据不同的环境不同的时间对窗口进行缩放扩大,或者是提高降低point指针移动的速率.

漏桶

964d050725088ca928b1e67b2b73b701.png

漏桶算法:入桶的速率可以不定,但是出桶的速率是恒定的.
实现很简单的我们可以用队列实现,按照固定频次从队列里消费数据.

漏桶算法可以很方便的将并发请求的大流量,转换为平滑的流量.
当然我们需要额外的存储空间存储请求的数据.不像下述的算法,只是限制流量不会做流量的整形.

令牌桶

c9386a4396f5b3d9b57dd9cebff45dd4.png

按照一定的速率将令牌放入到桶当中,当请求来临时先从桶获取令牌,如果拿到了令牌则继续请求,否则不执行请求.
桶满后新增令牌被丢弃.
桶空或者桶满后根据业务需要可以适当进行扩大和缩小.

总结

令牌桶交互流程比较复杂,实现需要额外的一些令牌的存储空间,漏桶算法没有那么灵活且需要存储等待处理请求的信息.在面对较大的瞬时流量时,令牌桶和滑动窗口算法有着很好的优势,可以较好的应对瞬时流量,流量也可以瞬时传输,对于漏桶而言瞬时的大流量却只能平均速率传输,因为输出的速率是恒定的.
时间间隔的算法没有那么平滑,时间滑动窗口算法实现简单且平滑,可以瞬时传输较大流量,不需要额外的存储空间.

以上内容希望帮助到大家,更多PHP大厂PDF面试文档,PHP进阶架构视频资料,PHP精彩好文免费获取可以关注公众号:PHP开源社区,或者访问:

四年精华PHP技术文章整理合集——PHP框架篇

四年精华PHP技术文合集——微服务架构篇

四年精华PHP技术文合集——分布式架构篇

四年精华PHP技术文合集——高并发场景篇

四年精华PHP技术文章整理合集——数据库篇

作者:代码界吴彦祖
来源:CSDN
地址:https://blog.csdn.net/lzx_victory/article/details/107628662
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值