APISIX限流实战

本文介绍了apisix中的三种限流方式,包括漏桶算法(不推荐线上使用)、基于客户端连接数的limit-count以及支持集群限流的固定时间窗口算法。重点讲解了如何在apisix中配置限流插件以实现丰富的扩展功能。

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

apisix限流算法

目前apisix主要提供三种限流方式

Limit-req(漏桶算法)

漏桶算法限制单个客户端对服务的请求速率

目前看到的漏桶算法只支持单机限流,
所以线上不推荐使用limit-req

limit-count

对单个服务的并发请求数。当客户端对路由的并发请求数达到限制时。

这个主要是基于客户端连接数的,也是仅支持单机

limit-count

使用固定时间窗口算法,主要用于限制单个客户端在指定的时间范围内对服务的总请求数,并且会在 HTTP 响应头中返回剩余可以请求的个数
该限流方式支持外接redis来支持集群限流。但是固定时间窗口算法有一个致命的缺点我们需要注意
比如时间窗口设置为1,qps设置为200.

在 0-0.5请求为0,
0.5 -1s访问量为200
在 1-1.5访问量为200。

这种情况并不会限流。因为不是滑动窗口。

但是实际在0.5-1.5这1s内的请求数量是400

实战

  1. 在路由列表点击创建按钮

  1. 设置路由信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 设置上游服务
    这里上游服务选我们要转发的服务,比如order

  1. 插件配置

限流相关的功能主要在插件里面。所以我们需要选用限流的插件

总结

总的来说apisix提供的插件功能给我提供了非常丰富的扩展组件。我们在对每个路由进行配置的时候只需要启动这些插件即可,非常简单

参考

### APISIX 限流插件使用指南 #### 插件概述 APISIX 提供了多种类型的限流策略,其中最常用的为 `limit-count` 和 `limit-conn` 插件。这些插件允许管理员设置每秒最大访问次数或连接数,从而保护后端服务免受过载影响[^1]。 #### 配置方法 为了启用并配置限流插件,在创建路由时需指定相应的字段: ```json { "plugins": { "limit-count": { "count": 10, "time_window": 60, "rejected_code": 503, "key_type": "var", "key": "remote_addr" } }, "upstream_id": "1" } ``` 上述 JSON 片段展示了如何通过 Admin API 设置基于 IP 地址 (`remote_addr`) 的限流规则,即每个客户端在一分钟内最多能发起十次请求;超过此限额则返回 HTTP 503 错误响应码[^2]。 对于更复杂的场景,比如按用户 ID 或其他自定义变量进行限流,则可以通过修改 `"key"` 字段来实现不同维度上的流量控制[^3]。 #### 关键参数解释 - **count**: 单位时间内允许的最大请求数量; - **time_window**: 统计周期长度(单位:秒),在此期间内的累计请求数不得超过设定阈值; - **rejected_code**: 当超出限制时向客户端发送的状态码,默认情况下推荐采用标准错误代码如 429 (Too Many Requests) 或者 503 (Service Unavailable)[^4]; - **key_type** 及 **key**: 定义用于区分各个独立统计单元的标准,支持静态字符串(`static`)、HTTP 头部(`header`)、URI 参数(`query_string`)以及 Nginx 内建变量(`var`), 如 `consumer_name`, `http_x_forwarded_for` 等[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值