Kong 提供了 Rate Limiting 插件,实现对请求的限流功能,避免过大的请求量过大,将后端服务打挂。
Rate Limiting 支持秒/分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最
多 100 次请求,并且每分钟最多 1000 次请求。
Rate Limiting 支持 consumer 、 credential 、 ip 三种基础维度的限流,默认为 consumer 。例如
说:设置每个 IP 允许每秒请求的次数。计数的存储,支持使用 local 、 cluster 、 redis 三种方式进
行存储,默认为 cluster :
- local :存储在 Nginx 本地,实现单实例限流。
- cluster :存储在 Cassandra 或 PostgreSQL 数据库,实现集群限流。
- redis :存储在 Redis 数据库,实现集群限流。
Rate Limiting 采用的限流算法是计数器的方式,所以无法提供类似令牌桶算法的平滑限流能力。
配置 Rate Limiting 插件
调用 Kong Admin API services/${service}/plugins ,创建 Rate Limiting 插件的配置:
以下为3种插件的方式
# 服务上启用插件
curl -X POST http://127.0.0.1:8001/services/handsome-product/plugins --data "name=rate-limiting" --data "config.second=1" --data "config.limit_by=ip"
# 路由上启用插件
curl -X POST http://127.0.0.1:8001/routes/{route_id}/plugins --data "name=rate-limiting" --data "config.second=5" --data "config.hour=10000"
# consumer上启用插件
curl -X POST http://127.0.0.1:8001/plugins --data "name=rate-limiting" --data "consumer_id={consumer_id}" --data "config.second=5" --data "config.hour=10000"
- name 参数,设置为 rate-limiting 表示使用 Rate Limiting 插件。
- config.second 参数,设置为 1 表示每秒允许 1 次请求。
- config.limit_by 参数,设置为 ip 表示使用 IP 基础维度的限流。
也可以通过konga UI操作添加rate-limiting插件
测试
请求超过阈值,会被kong限流