apisix limit-req 限流

本文详细解析了APIsIX官方文档中rate和burst参数的误解,并介绍了计数器、滑动窗口、漏桶和令牌桶等限流算法,以及Nginx的限流实例,强调了突发流量处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
apisix 官方文档对于rate,burst解释不是很清楚。这里会误以为当Rate=10,Burst=0时,客户端基于IP的限流为每秒10次。但是实际上有突发流量在第0.1秒发送5次时,这时会有4个请求被拒绝。

limit count 确实如上述所说,下面借nginx讲解下limit-req。
在这里插入图片描述

限流算法

常见的限流算法有计数器(固定窗口)、滑动窗口、漏桶、令牌桶

计数器

最简单的限流算法,计数器限制每一分钟或者每一秒钟内请求不能超过一定的次数,在下一秒钟计数器清零重新计算

  • 限制每分钟访问不能超过100次,客户端在第一分钟的59秒请求100次,在第二分钟的第1秒又请求了100次,那么在这2秒内后端会受到200次请求的压力,形成了流量突刺。

滑动窗口

滑动窗口其实是细分后的计数器,它将每个时间窗口又细分成若干个时间片段,每过一个时间片段,整个时间窗口就会往右移动一格

  • 每分钟被分成了4个时间片段,每个时间片段15秒,假设客户端在第一分钟的50秒请求了100次,时间到了第二分钟的10秒,时间窗口向右滑动一格,这时这个时间窗口其实已经打满了100次,客户端将被拒绝访问

漏桶

均匀出水

  • 固定大小FIFO队列+定时取队列元素的方式实现
  • 削峰填谷

缺点

  • 队列中会进行排队

令牌桶

桶里一直扔令牌

  • 有令牌快速响应
  • 不会进行漏桶等待

缺点

  • 下游并发高

Nginx 限流

nginx 限流。

a rate=10,burst=0
请求0.05s发送2个,一个被拒绝
b rate=10,burst=1
请求0.05s发送2个,两个成功,第二个等待第一个执行完

nginx 限流demo参考 nginx限流

### 关于APISix配置文件 #### 配置文件概述 APISix 的配置主要由两个部分组成:全局配置和路由配置。全局配置通常位于 `conf/config.yaml` 文件中,而路由配置则通过 Admin API 动态设置。 #### 全局配置文件结构与参数说明 以下是典型的 APISix 全局配置文件 (`config.yaml`) 的基本框架及其各字段含义: ```yaml apisix: node_listen: 9080 # HTTP监听端口,默认为9080 enable_admin: true # 是否启用admin api接口,默认开启 admin_key: # 设置访问Admin API所需的密钥认证信息 - name: "admin" key: "edd1c9f034335f136f87ad84b625c8f1" role: "admin" nginx_config: http_snippet: "" # 可用于自定义Nginx配置片段 stream_snippet: "" # 流模式下的额外配置项 plugins: # 已加载的插件列表 enabled_list: - limit-req # 请求限流插件 - prometheus # Prometheus监控指标收集器 deployment: role: traditional # 运行角色,可选值有'traditional'/'control_plane' etcd: host: # etcd集群地址数组 - "http://127.0.0.1:2379" # 默认本地单机环境配置 ``` 此段描述了APISix的主要配置选项以及它们的功能[^1]。 #### 路由配置实例 对于具体的路由规则设定,则是经由Admin API完成,并不会直接写入上述静态配置文件内;这里给出一个简单的HTTP路由示例作为参考: ```json { "uri": "/hello", "upstream": { "type": "roundrobin", // 使用轮询算法分发流量 "nodes": { // 上游服务器节点集合 "example.com:80": 1 // 权重设为1 } }, "plugins": { // 应用于此路径上的插件集 "prometheus": {} } } ``` 这段JSON展示了如何利用Admin API创建一条新的HTTP路由记录,指定了目标URI、负载均衡策略及所使用的中间件插件[^2]。 #### 自定义插件支持 当涉及到更复杂的场景比如集成第三方服务时,可能还需要调整部署方式或扩展功能特性。例如,在Kubernetes环境中使用Helm图表安装APISix时,如果想要添加外部Python脚本作为插件运行,则需编辑对应的Chart模板文件以适应特定需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值