ASP.NET Core基于滑动窗口实现限流控制的方法


今天小编给大家分享一下ASP.NETCore基于滑动窗口实现限流控制的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在实际项目中,为了保障服务器的稳定运行,需要对接口的可访问频次进行限流控制,避免因客户端频繁请求导致服务器压力过大。而AspNetCoreRateLimit是目前ASP.NET Core下最常用的限流解决方案。查看它的实现代码,我发现它使用的固定窗口算法。固定窗口算法是将时间线划分为固定大小的窗口,并为每个窗口分配一个计数器。每个请求,根据其到达时间,被映射到一个窗口。如果窗口中的计数器已达到限制,则拒绝落在此窗口中的请求。例如,如果我们将窗口大小设置为one分钟,每分钟允许ten个请求:ASP.NET Core基于滑动窗口算法实现限流控制 #yyds干货盘点#_滑动窗口59秒的请求将被阻止,因为这时已经接受了10个请求。1分钟时计数器归零,所以1分01秒的请求可以接受。固定窗口算法的问题主要在于,如果在窗口边缘发生大量请求,会导致限流策略失效。比如,在59秒接收了9个请求,在1分01秒又可以再接收10个请求,相当于每分钟允许了20个请求。滑动窗口类似于固定窗口算法,但它通过将前一个窗口中的加权计数添加到当前窗口中的计数来计算估计数,如果估计数超过计数限制,则请求将被阻止。具体公式如下:估计数 = 前一窗口计数 * (1 – 当前窗口经过时间 / 单位时间) + 当前窗口计数例如,假设限制为每分钟10个:窗口[00:00, 00:01)中有9个请求,窗口[00:01, 00:02)中有5个请求。对于01:15到达的请求,即窗口[00:01, 00:02)的25%位置,通过公式计算请求计数:9 x (1 – 25%) + 5 = 11.75 > 10. 因此我们拒绝此请求。即使两个免费云主机域名窗口都没有超过限制,请求也会被拒绝,因为前一个和当前窗口的加权和确实超过了限制。根据上面的公式,实现滑动窗口算法代码如下:如果最近的2次请求相距2个窗口时间,则可以认为前一窗口计数为0,重新开始计数。新建Middleware,使用滑动窗口算法进行限流:需要注意的是,我们注册Middleware时,必须使用单例模式,保证所有请求通过同一SlidingWindow计数:以上就是“ASP.NETCore基于滑动窗口实现限流控制的方法”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: 如何使用CSS实现三角形

这篇文章将为大家详细讲解有关如何使用CSS实现三角形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。相信大家在浏览网站的时候,经常看到各种下拉菜单,上面会有一个小小的三角形,实现这种三角形一般会想到是用图片或者iconfont…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/23 09:18
下一篇 09/23 09:18

相关推荐