1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        性能測試

        我們測試使用之前使用的github.com/juju/ratelimit,下面為測試結(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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            黑丝av在线播放 韩国三级黄色录像 | 国产美女粉嫩无套内谢 | 2018天天日夜夜爽 | 国产精品爱久久久久久久威尼斯 | 性爱av在线 | 人兽视频在线观看 | 人人操欧美 | 欧美操逼精品 | 亚洲性生活视频 | 伊人丁香五月天 |