乐趣区

关于goland:GS-Admin-限流功能的使用

阐明

在日常网站的经营过程种,当并发数达到咱们服务的阈值的时候,咱们能够通过限流的形式保障服务可用性。

常见的限流办法:

1. 应用带缓冲的 chann,当 chan 塞满当前,拒绝服务或者给一个敌对的提醒或跳转到一个敌对的页面等。

2. 计数器,在 10 秒内只承受 100 申请,当超过 100 申请后,拒绝服务,当超过 10 秒后,计数归零,从新承受申请。

3. 应用 httpserver 的频率限度,无需本人实现。

4. 令牌桶算法:以恒定的速度往令牌桶中放入令牌,当有申请过去则从令牌桶中获取令牌进行后续申请,当获取令牌失败后则进行敌对解决。

5. 漏桶算法:申请先进入到漏桶里,而漏桶以固定的速率解决申请,当申请数量超过漏桶的容量时,将超出的申请进行敌对解决,不适宜突发申请场景。

下面两种令牌的算法区别:漏桶算法,可能强行限度传输速率,令牌桶算法:可能限度均匀传输速率,容许某种突发状况。

GS Admin 限流形式

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()}
}
退出移动版