之前文章写了GOLANG和PHP实现商品秒杀功能,最近疫情大家都在家里忙着抢菜。但是很多人反馈,卖菜APP能够加入购物车,但是下单时却出了意外。这种情况基本就是平台做了限流处理。
今天就为大家分享和演示go 、redis和lua脚本实现的一种简单限流方法:滑动窗口,直接上代码
使用了gin框架,现在AB工具来压测下,实际也可以在代码中for循环大量请求来测试
ab -n 20 -t 3 "http://localhost:8000/count"
本次案例需求是3秒的时间窗口一个用户的请求数不超过10个,所以AB 命令加上 -t 3
-t的注释是:测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
我对-n 20 -t 3 的理解是,3秒内执行20个请求,但是实际的结果是3秒内有1000多个请求,这个有点不太明白,还需要各位大佬指点。
但是并不影响本次案例的需要背景,便于查看我将成功的请求加上序号,最后看结果:
只有十个请求成功了,其余的失败了。
回顾前期文章
后续分享和演示限流的另外两个方法:令牌桶和漏斗算法