V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
cyhone
V2EX  ›  Go 编程语言

Golang 限流器 time/rate 使用介绍

  •  
  •   cyhone · 2019-11-02 20:37:05 +08:00 · 5253 次点击
    这是一个创建于 1607 天前的主题,其中的信息可能已经有所发展或是发生改变。

    限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。 限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。

    其实 golang 标准库中就自带了限流算法的实现,即 golang.org/x/time/rate。 该限流器是基于 Token Bucket(令牌桶)实现的。

    简单来说,令牌桶就是想象有一个固定大小的桶,系统会以恒定速率向桶中放 Token,桶满则暂时不放。 而用户则从桶中取 Token,如果有剩余 Token 就可以一直取。如果没有剩余 Token,则需要等到系统中被放置了 Token 才行。

    本文则主要集中介绍下该组件的具体使用方法, 点击查看全文

    10 条回复    2019-11-05 14:29:44 +08:00
    cyhone
        1
    cyhone  
    OP
       2019-11-02 20:37:44 +08:00
    原文链接: https://www.cyhone.com/articles/usage-of-golang-rate/
    同时欢迎关注公众号:编程沉思录
    lbp0200
        2
    lbp0200  
       2019-11-02 21:21:29 +08:00 via iPhone
    赞,最近刚好需要
    freestyle
        3
    freestyle  
       2019-11-02 23:31:37 +08:00 via iPhone
    不错,这个比 juju/ratelimit 多了动态设置参数功能,用 juju/ratelimit 要改参数还得用新建替换的方式曲线处理.
    zzlettle
        4
    zzlettle  
       2019-11-03 13:56:44 +08:00
    其实我一直有个疑惑
    这样的令牌桶方式和生产者和消费者模式有什么区别
    xmge
        5
    xmge  
       2019-11-03 13:56:48 +08:00
    很棒
    xmge
        6
    xmge  
       2019-11-03 13:59:39 +08:00
    求楼主博客搭建方式,我的有点不好看,xmge.top
    cyhone
        7
    cyhone  
    OP
       2019-11-03 16:21:15 +08:00 via Android
    @zzlettle 上面描述令牌桶的原理,听起来像是用生产者消费者实现。虽然这也是一种实现方式,但是实际 golang 的这个实现采用了在消费之前再生产 token 数目的方式,而且也不是用 blockingqueue 的方式承载 token,而且用简单的记录 token 数目,然后转换成对应时间差值的方式。
    具体原理,我会在今天或明天再发一篇文章讲解,欢迎关注公众号编程沉思录或者同名知乎专栏,可以第一时间收到推送~
    cyhone
        8
    cyhone  
    OP
       2019-11-03 16:26:17 +08:00 via Android
    @xmge 我的跟你一样也是用的 hexo 的 next 主题,我用的 next 的 Gemini 皮肤,自己稍微修改了下样式。
    博客当成静态网站放在了自己的服务器上,所以比直接放在 github 稍微快点~
    cyhone
        10
    cyhone  
    OP
       2019-11-05 14:29:44 +08:00
    对 time/rate 的原理实现分析也已发了文章《 Golang 限流器 time/rate 实现剖析》
    链接: https://v2ex.com/t/616449#reply2

    欢迎关注公众号及同名知乎专栏,第一时间收到文章推送:编程沉思录
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3487 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:00 · PVG 19:00 · LAX 04:00 · JFK 07:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.