原文 : 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 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/