限流

原文 : https://blog.eood.cn/rate-limiting

總結:

  1. nginx中的處理:

    參考網頁:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

vi /export/servers/nginx/conf/nginx.conf
limit_zone one $binary_remote_addr 20m;
limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;
limit_conn one 10;
limit_req zone=req_one burst=120;
來看下具體含義:
 burst :
 漏桶數burst爲5,如果第1秒、2,3,4秒請求爲19個,第5秒的請求爲25個是被允許的。
                              但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤。
                              
                              limit_zone,是針對每個變量(這裏指IP,即$binary_remote_addr)定義
                                           一個存儲session狀態的容器。這個示例中定義了一個20m的容器,
                                             按照32bytes/session,可以處理640000個session。
                                             ( 已經被棄用,請用limit_conn_zone替換)
                              limit_req_zone 與limit_zone類似。rate是請求頻率. 每秒允許12個請求。
                              limit_conn  one 10 : 表示一個IP能發起10個併發連接數limit_req: 與limit_req_zone對應。
 

2. java中,

   使用Google Guava 提供了一個 RateLimiter 實現

final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
  void submitTasks(List<Runnable> tasks, Executor executor) {
    for (Runnable task : tasks) {
      rateLimiter.acquire(); // may wait
      executor.execute(task);
    }
  }

3. redis :

   參考網頁: http://redis.io/commands/INCR#pattern-rate-limiter

    jedis中有incr和expire的api



擴展:

nginx白名單配置:

http://colobu.com/2015/10/26/nginx-limit-modules/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章