天天看點

guava限速器原理及使用 背景:技術:原理:主要接口:實作:

 背景:

      ergate-realtime在大流量情況下無法對任務dump資料進行讀寫限制,導緻影響正常業務的讀請求,那麼如何對ergate中的任務通過配置化的方式進行讀寫限速呢?

技術:

      guvav中提供了對應用中接口進行限速的API->RateLimiter,RateLimiter中提供了兩種方式實作對接口 進行限速,一種是平滑突出流,另一種是預熱突出流。

平滑突發限流是對陡增流量進行限速,限制1s内的QPS大小。

平滑預熱限流是對陡增流量進行緩慢降速,而不是直接降速,會有一個緩慢達到所配置限速大小。

原理:

       其實作原理為:通過令牌桶的流控算法,通過配置的參數,按照一定的頻率向桶中投放令牌,每個線程執行時都會從桶中擷取令牌,一旦擷取到足夠的令牌線程就會繼續執行,

擷取不到就會被阻塞直到擷取到令牌後繼續執行達到限流的作用。

主要接口:

RateLimiter中主要接口:

  • create(double permitsPerSecond)  建立一個令牌桶,參數為桶中的令牌數
  • acquire(int permits) 擷取桶中的令牌數

實作:

ergate-realtime中通過對讀寫接口增加該方法,并以配置化的方式執行個體化令牌數。