go+redis+lua實現(xiàn)大流量限流之滑動窗口
之前文章寫了GOLANG和PHP實現(xiàn)商品秒殺功能,最近疫情大家都在家里忙著搶菜。但是很多人反饋,賣菜APP能夠加入購物車,但是下單時卻出了意外。這種情況基本就是平臺做了限流處理。
今天就為大家分享和演示go 、redis和lua腳本實現(xiàn)的一種簡單限流方法:滑動窗口,直接上代碼
使用了gin框架,現(xiàn)在AB工具來壓測下,實際也可以在代碼中for循環(huán)大量請求來測試

ab -n 20 -t 3 "http://localhost:8000/count"
本次案例需求是3秒的時間窗口一個用戶的請求數(shù)不超過10個,所以AB 命令加上 -t 3
-t的注釋是:測試所進(jìn)行的最大秒數(shù)。其內(nèi)部隱含值是-n 50000。它可以使對服務(wù)器的測試限制在一個固定的總時間以內(nèi)。默認(rèn)時,沒有時間限制。
我對-n 20 -t 3 的理解是,3秒內(nèi)執(zhí)行20個請求,但是實際的結(jié)果是3秒內(nèi)有1000多個請求,這個有點不太明白,還需要各位大佬指點。
但是并不影響本次案例的需要背景,便于查看我將成功的請求加上序號,最后看結(jié)果:

只有十個請求成功了,其余的失敗了。
回顧前期文章
后續(xù)分享和演示限流的另外兩個方法:令牌桶和漏斗算法
標(biāo)簽: