The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
cyhone

Golang 限流器 time/rate 使用介绍

  •  
  •   cyhone · Nov 2, 2019 · 6097 views
    This topic created in 2418 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    欢迎关注公众号及同名知乎专栏,第一时间收到文章推送:编程沉思录
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5436 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 01:27 · PVG 09:27 · LAX 18:27 · JFK 21:27
    ♥ Do have faith in what you're doing.