限流的实现方式

xiaojiuaigc@163.com 发布于 2024-10-31 499 次阅读


  • Tomcat:可以设置最大的连接数(微服务不适用)
  • Nginx:漏桶算法
  • 网关:令牌桶算法
  • 自定义拦截器

Nginx限流

控制速率(突发流量)

  • 语法:limit_req_zone key zone rate
  • key:定义限流对象,binary_remote_addr就是一种key,基于客户端ip限流
  • Zone:定义共享存储区来存储访问信息,10m可以存储16wip地址访问信息
  • Rate:最大访问速率,rate=10r/s 表示每秒最多请求10个请求
  • burst=20:相当于桶的大小
  • Nodelay:快速处理

控制并发连接数

这是测试文本,单击 “编辑” 按钮更改此文本。

  • limit_conn perip 20:对应的key是 $binary_remote_addr,表示限制单个IP同时最多能持有20个连接。
  • limit_conn perserver 100:对应的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数

网关限流

yml配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter

  • key-resolver :定义限流对象( ip 、路径、参数),需代码实现,使用spel表达式获取
  • replenishRate :令牌桶每秒填充平均速率。
  • urstCapacity :令牌桶总容量。