GS Admin 限流功能的使用

sonhineboy · · 1008 次点击 · · 开始浏览    

## 说明 >在日常网站的运营过程种,当并发数达到我们服务的阈值的时候,我们可以通过限流的方式保证服务可用性。 ## 常见的限流方法:   1\. 使用带缓冲的chann,当chan塞满以后,拒绝服务或者给一个友好的提示或跳转到一个友好的页面等。   2\. 计数器,在10秒内只接受100 请求,当超过100请求后,拒绝服务,当超过10秒后,计数归零,重新接受请求。   3\. 使用httpserver的频率限制,无需自己实现。   4\. 令牌桶算法:以恒定的速度往令牌桶中放入令牌,当有请求过来则从令牌桶中获取令牌进行后续请求,当获取令牌失败后则进行友好处理。   ![](https://cdn.learnku.com/uploads/images/202211/28/89741/xNq2yvgabv.png!large)   5\. 漏桶算法:请求先进入到漏桶里,而漏桶以固定的速率处理请求,当请求数量超过漏桶的容量时,将超出的请求进行友好处理,不适合突发请求场景。   ![](https://cdn.learnku.com/uploads/images/202211/28/89741/LQNwbuju7B.png!large)   上面两种令牌的算法区别:漏桶算法,能够强行限制传输速率,令牌桶算法:能够限制平均传输速率,允许某种突发情况。 ## GS Admin 限流方式 [GS Admin](https://kevn.gitee.io/gsadmindoc/ "GS Admin") 采用golang内部有一个非常好用的限流器time/rate位于golang.org/x/time/rate 具体的用法可以产靠官方文档。GS Admin已经封装了web 中间件只需要在配置文件配置想应得参数就可以了 ``` rate: limit: 15 //每秒产生得令牌数量 burst: 2 //令牌得大小 ``` 经过测试如果超过了限流,中间件就会触发,代码如下 ``` func Limiter() gin.HandlerFunc { return func(c *gin.Context) { if global.Limiter.Allow() == false { global.Response{}.Failed(c, "当前请求过快,请稍后再试!") c.Abort() return } c.Next() } } ``` ## 仓库 动动小手 点点star gitee : https://gitee.com/kevn/gsadmin/tree/master github:https://github.com/sonhineboy/gsadmin

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1008 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传