YmRatelimit 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
YmRatelimit 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
YmRatelimit 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
YmRatelimit 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
YmRatelimit 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 未知
开发语言 Google Go
操作系统 跨平台
软件类型 开源软件
所属分类 管理和监控系统监控
开源组织
地区 国产
投 递 者 狗眼看世界
适用人群 未知
收录时间 2020-06-17

软件简介

ymratelimit 是一个使用 golang 编写的高性能流量控制工具,实现了Leaky bucket和Token bucket两个算法。 

目前现在已经在生产系统大规模使用,部署在线上数百台服务上,最大业务支撑 20wqps。目前线上已经稳定使用。

设计初衷

  1.   禁止使用锁
  2.   每次请求尽量控制在一次cas操作
  3.   所有计数都转化成int64的操作,尽量减少cpu额外计算浪费 
  4.  精度精确,支持到纳秒级别的流量控制

性能测试

我们测试使用之前使用的github.com/juju/ratelimit,下面为测试结果

➜  ymratelimit git:(master) ✗ go test -bench=. -run=none
goos: darwin
goarch: amd64
pkg: github.com/maczam/ymratelimit
BenchmarkYmretelimit-4                  14109680                79.9 ns/op
BenchmarkParallelYmretelimit-4          44515245                28.5 ns/op
BenchmarkJujuRatelimit-4                10214019               111 ns/op
BenchmarkParallelJujuRatelimit-4         6336103               160 ns/op
PASS
ok      github.com/maczam/ymratelimit   4.978s

➜  ymratelimit git:(master) ✗ go test -bench=. -benchmem -run=none
goos: darwin
goarch: amd64
pkg: github.com/maczam/ymratelimit
BenchmarkYmretelimit-4                  14484910                80.0 ns/op             0 B/op          0 allocs/op
BenchmarkParallelYmretelimit-4          42125070                27.6 ns/op             0 B/op          0 allocs/op
BenchmarkJujuRatelimit-4                10546452               111 ns/op               0 B/op          0 allocs/op
BenchmarkParallelJujuRatelimit-4         6592738               171 ns/op               0 B/op          0 allocs/op
PASS
ok      github.com/maczam/ymratelimit   5.034s

使用简单

使用非常简单,非常方便迁入到系统

	rl := ymretelimit.NewLeakyBucket(time.Second, 15) // per second
    rl.TakeAvailable()

    rl = ymretelimit.NewTokenBucket(time.Microsecond, 15) // per Microsecond
    rl.TakeAvailable()

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (3)

加载中
2020/07/17 17:47
回复
举报
ymretelimit 打错了,应该是 ymratelimit 结尾部分: " rl := ymretelimit.NewLeakyBucket(time.Second, 15) // per second rl.TakeAvailable() rl = ymretelimit.NewTokenBucket(time.Microsecond, 15) // per Microsecond rl.TakeAvailable() "
2020/07/10 17:41
回复
举报
狗眼看世界软件作者
大佬们可以使用尝试了
2020/06/17 19:47
回复
举报
更多评论
暂无内容
暂无内容
暂无内容
3 评论
14 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部