关于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()
    }
}

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据