全球看点:轻量级限流工具 throttled
throttled 是一个非常轻量且易扩展的限流组件,我们可以将它轻松地集成到应用程序中,以实现限流和配额管理的能力。
简介throttled(https://github.com/throttled/throttled) 基于通用信元速率算法实现了对资源的访问速率限制,资源可以是特定的 URL、用户或者任何自定义的形式,可以很方便地与各种 http 和 rpc 框架进行集成。throttled 定义了限流元信息的存储抽象,并内置了 memstore,redis store 等元信息存储实现,我们可以根据具体的使用场景实现单机限流和集群限流。
(资料图片仅供参考)
下面我们来基于 throttled 自带的 http 限流组件实现一个简单的 demo 试试看:
package mainimport ( "fmt" "log" "net/http" "github.com/throttled/throttled/v2" "github.com/throttled/throttled/v2/store/memstore")func main() { // 在 store 中添加 key 的数量限制 store, err := memstore.New(65536) if err != nil { log.Fatal(err) } // 配置限流规则 quota := throttled.RateQuota{ MaxRate: throttled.PerMin(20), MaxBurst: 5, } rateLimiter, err := throttled.NewGCRARateLimiter(store, quota) if err != nil { log.Fatal(err) } httpRateLimiter := throttled.HTTPRateLimiter{ RateLimiter: rateLimiter, // 根据 path 进行限流 VaryBy: &throttled.VaryBy{Path: true}, } handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello, world\n") }) http.ListenAndServe(":8080", httpRateLimiter.RateLimit(handler))}以上我们实现了一个按请求 path 进行限流的 http 服务,允许同一个 path 每分钟 20 次请求,并支持短时间内最多 5 个请求的 burst。
此外,我们也可以通过指定 VaryBy和 DeniedHandler的方式对资源定义和超限处理进行一些更多的定制。
总结throttled 是一款小巧轻量的限流组件,我们可以使用 throttled 非常轻松地实现单机或集群的 QPS 限流能力。当然,throttled 的限流手段比较单一,当前仅支持基于 QPS 的限流规则,尚未扩展更全面的限流模式和更丰富的阻断规则。
参考资料https://github.com/throttled/throttled
https://baike.baidu.com/item/通用信元速率算法/2083527
2022 GopherChina大会报名火热进行中!
扫描下方二维码报名参与大会合作、现场招聘及企业购票等事宜请联系微信:18516100522
戳这里上车!
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...