<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          YmRatelimit流量控制工具

          聯(lián)合創(chuàng)作 · 2023-09-27 08:17

          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ì)初衷

          1.   禁止使用鎖
          2.   每次請(qǐng)求盡量控制在一次cas操作
          3.   所有計(jì)數(shù)都轉(zhuǎn)化成int64的操作,盡量減少cpu額外計(jì)算浪費(fèi) 
          4.  精度精確,支持到納秒級(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()

           

          瀏覽 21
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  熟妇av一区二区 天堂一区二区三区 | 啊啊啊啊啊靠逼 | 亚洲一区影音先锋 | 男女日逼网站 | 五月婷婷网 |