找回密码
 立即注册
首页 业界区 业界 网关上的限流器

网关上的限流器

崆蛾寺 2025-11-21 01:30:02
1. nginx原生限流能力

https://blog.nginx.org/blog/rate-limiting-nginx
ngx_http_limit_req_module 提供的请求限流能力必须基于某个预定义的key,eg: client Ip, request_uri, host_name, 这个限流器是基于漏桶算法。
  1. limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;
  2. server {
  3.     listen 80;
  4.     location / {
  5.         limit_req zone=ip burst=12 delay=8;
  6.         proxy_pass http://website;
  7.     }
  8. }
复制代码
①  使用二进制client ip 作为限流的基础维度,相比字符串形式的remote_addr 占用空间更小
②  限流的配置名是ip, 使用了nginx的共享内存来存储 键值对
③ r= 5r/s 漏桶每s放行5个请求, 支持的最大并发能力是12(排队请求12)
④ 上文“漏桶算法”显示,排队中的请求会有等待的延迟时间,如果不希望过多的等待,指定delay参数(默认是0,排队的请求都被延迟)。
那问题又来了, 我就想基于整体请求速率限流,不想根据某个特定的请求key限流, 阁下又该如何回锅?
nginx map指令就可以派上用场:map 基于现有变量$remote_addr创建新变量$global_req_key。
  1. http {
  2.   map $remote_addr $global_req_key {
  3.     default       0;
  4.     // 有很多分支值,去掉这些分支,就99归1了。
  5.   }
  6.   
  7.   limit_req_zone $gloobal_req_key zone=global:10m r=10r/s;
  8. }
复制代码
ref


  • nginx上还有特定键上发生的连接数的限流指令limit_conn_zone 供参考。
  • openresty 内置了限流模块lua-resty-limit-traffic, 支持漏桶、固定窗口限速,支持施加多个限流策略。
2. kong网关限流能力

kong 网关上有rate-limiting插件,可以提供限流能力
[table][tr]功能性需求非功能性需求[/tr][tr][td]通过userid,ip,apikey 识别用户[/td][td]低延时(

相关推荐

您需要登录后才可以回帖 登录 | 立即注册