1. 限流的目的

①  并发量较大(突发流量)

②  防止用户恶意刷接口

2. 限流的方式

①  Tomcat,可以设置最大连接数

②  Nginx,漏桶算法

   ①  控制速率(突发流量)

漏桶的配置:

语法解析:

命令 limnit_req_zone key zone rate

key:定义限流的对象,binary_remote_addr就是一种key,是基于客户端ip限流

zone:定义共享存储区存储访问信息,10m表示可以存储16万个ip地址访问信息

rate: 最大访问速率 rate=10r/s 表示每秒最多处理10个请求

burst = 20 :相当于桶的大小为20,能容纳20个请求

nodelay:快速处理模式

  ② 控制并发连接数

limit_coon perip 20 : 对应的key是 $binary_remote_addr,表示限制单个IP同时最多持有20个连接

limit_coon perserver 100 : 对应的key为$server_name,表示虚拟主机(server)同时能够处理的并发连接数的总数

③  网关,令牌桶算法

yml配置文件中,微服务路由设置添加局部过滤器 RequestRateLimiter,需要搭配Redis使用。

 key-resolver:定义限流的对象(ip、路径、参数),须有代码实现,使用spel表达式取值

replenishRate:令牌桶每秒填充的平均速率,每秒生成多少个令牌

urstCapacity:令牌桶的总容量

④  自定义拦截器

该方式不常用

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐