YmRatelimit流量控制工具
ymratelimit 是一個(gè)使用 golang 編寫的高性能流量控制工具,實(shí)現(xiàn)了Leaky bucket和Token bucket兩個(gè)算法。
目前現(xiàn)在已經(jīng)在生產(chǎn)系統(tǒng)大規(guī)模使用,部署在線上數(shù)百臺(tái)服務(wù)上,最大業(yè)務(wù)支撐 20wqps。目前線上已經(jīng)穩(wěn)定使用。
設(shè)計(jì)初衷
- 禁止使用鎖
- 每次請(qǐng)求盡量控制在一次cas操作
- 所有計(jì)數(shù)都轉(zhuǎn)化成int64的操作,盡量減少cpu額外計(jì)算浪費(fèi)
- 精度精確,支持到納秒級(jí)別的流量控制
性能測(cè)試
我們測(cè)試使用之前使用的github.com/juju/ratelimit,下面為測(cè)試結(jié)果
? 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
使用簡單
使用非常簡單,非常方便遷入到系統(tǒng)
rl := ymretelimit.NewLeakyBucket(time.Second, 15) // per second
rl.TakeAvailable()
rl = ymretelimit.NewTokenBucket(time.Microsecond, 15) // per Microsecond
rl.TakeAvailable()
評(píng)論
圖片
表情
