• 技术文章 >后端开发 >Golang

    一文详解GS Admin限流功如何用

    藏色散人藏色散人2022-12-01 16:12:04转载2509

    本篇文章带大家介绍有关GS Admin 限流功能的使用,GS Admin=gin+scui 它是 golang 开发的一个企业级后台,下面一起看看怎么使用吧~希望对大家有所帮助。

    仓库

    giee: gitee.com/kevn/gsadmin/tree/master
    github: github.com/sonhineboy/gsadmin

    说明

    在日常网站的运营过程种,当并发数达到我们服务的阈值的时候,我们可以通过限流的方式保证服务可用性。【推荐:golang教程

    常见的限流方法:

      1. 使用带缓冲的 chann,当 chan 塞满以后,拒绝服务或者给一个友好的提示或跳转到一个友好的页面等。

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

      3. 使用 httpserver 的频率限制,无需自己实现。

      4. 令牌桶算法:以恒定的速度往令牌桶中放入令牌,当有请求过来则从令牌桶中获取令牌进行后续请求,当获取令牌失败后则进行友好处理。

      8dd1bae291ee229c13d32e44f58d735.jpg

      5. 漏桶算法:请求先进入到漏桶里,而漏桶以固定的速率处理请求,当请求数量超过漏桶的容量时,将超出的请求进行友好处理,不适合突发请求场景。

      eb296f2dfa69d1e2b1b65c0c2e1ceb0.jpg

      上面两种令牌的算法区别:漏桶算法,能够强行限制传输速率,令牌桶算法:能够限制平均传输速率,允许某种突发情况。

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

    以上就是一文详解GS Admin限流功如何用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:GS Admin
    上一篇:go语言属于底层语言吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • golang中切片是啥• 一文浅析Golang中的运算符• 一文浅析Golang中的流程控制• Golang判断结构体是否存在某方法的两种方式(附代码示例)• 一文浅析Golang中的数组
    1/1

    PHP中文网