首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务系列:通过Kong网关给API限流

微服务系列:通过Kong网关给API限流

原创
作者头像
AIOPS
发布2023-11-11 21:57:14
6531
发布2023-11-11 21:57:14
举报
文章被收录于专栏:高可用高可用

1. 背景介绍

上篇文章中,我们介绍了如何通过Kong网关来将API对外暴露服务,但是这样并没有体现Kong的优势。接下来我们就介绍几种API常见功能(限流、鉴权等),这些功能传统需要开发介入才能完成,我们看看Kong怎么免开发实现这些功能。

在Kong网关上实施API限流(rate limitting)是确保API正常运行并避免滥用的重要步骤。本文将介绍限流原理、Kong网关限流分类及实战等。

微服务系列传送门:

1、 为什么需要API网关

2、 Kong初探

3、 Kong安装配置

4、 通过Kong提供API服务

2. 令牌桶限流原理

令牌桶算法是一种基于时间的限流算法。在固定的时间间隔内,向令牌桶中添加令牌。当请求到达时,需要从桶中获取一个令牌。如果令牌可用,请求将被处理;否则,请求将被拒绝。令牌桶算法可以实现精确的速率限制,并且可以根据需要调整令牌生成速率。

在Kong网关中,限流功能是通过配置rate-limiting插件来实现的。当客户端请求API时,Kong网关会检查已配置的限流规则。根据这些规则,如果请求速率超过限制,请求将被阻止或拒绝。

3. Kong网关的限流分类

Kong网关提供了两种类型的限流:

1. 令牌桶算法:该方法使用一个令牌桶,在请求速率增加时分配令牌,并在速率降低时回收令牌。通过维护一个固定的速率,可以防止突发流量造成服务不可用。

2. 滑动窗口:滑动窗口技术根据时间窗口内的请求数量来限制速率。它可以适应于不同的时间段和请求模式,并提供更大的限流灵活性。这个功能需要Kong网关的License,我们就不再演示。

4. Kong网关限流实战

环境搭建参考文章:通过Kong网关来将API对外暴露服务

4.1 全局限流

4.1.1 开启

下面指令开启了单client IP维度所有请求的限流,现在每分钟5次请求,超过就限制

curl -i -X POST http://localhost:8001/plugins \
 --data name=rate-limiting \
 --data config.minute=5 \
 --data config.policy=local

4.1.2 验证

浏览器访问URL 5次后,即可看到error报错,效果得到验证

4.1.3 删除规则

首先查找到上面规则的ID,然后调用API删除

# 查找插件ID
[root@VM-4-13-centos ~]# curl -s http://localhost:8001/plugins | jq
{
  "data": [
    {
      "enabled": true,
      "service": null,
      "consumer": null,
      "name": "rate-limiting",
      "id": "cb7edc98-ae09-4668-b5b3-7cf0b9e79e56",
      ...
}
# 删除规则
[root@VM-4-13-centos ~]# curl -s -X DELETE http://localhost:8001/plugins/cb7edc98-ae09-4668-b5b3-7cf0b9e79e56
# 确认已删除
[root@VM-4-13-centos ~]# curl -s http://localhost:8001/plugins | jq
{
  "data": [],
  "next": null
}

4.2 服务级别限流

4.2.1 新建服务

使用同样的后端,创建service example_service_1并加入路由example_route_1

、path v2

[root@VM-4-13-centos kong]# curl -i -s -X POST http://localhost:8001/services --data name=example_service_1 --data url='http://127.0.0.1:8081'
[root@VM-4-13-centos kong]# curl -i -X POST http://localhost:8001/services/example_service/routes --data 'paths[]=/v2' --data name=example_route_1 

4.2.2 给example_service添加限流

curl -X POST http://localhost:8001/services/example_service/plugins \
  --data "name=rate-limiting" \
  --data config.minute=5 \
  --data config.policy=local

4.2.3 验证

在浏览器分别访问v1、v2接口,会发现v1会被限流、v2没有被限流,说明service级别的限流仅对service生效而不是全局生效。

由于v1、v2使用的是同一个后端,也说、说明了无需修改后端,即可通过Kong网关实现。

除了上面的限流方式外,还支持route级别限流(匹配路由后尽心该路由规则的整体i限流)、用户级别限流,这里就不一一测试了,感兴趣的读者可以自行测试。

5. 总结

Kong网关的API限流功能提供了一种有效保护服务免受滥用和攻击的方法。通过使用令牌桶算法和滑动窗口(商业版本才支持)等高级技术,可以实现更灵活和可扩展的限流功能。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景介绍
  • 2. 令牌桶限流原理
  • 3. Kong网关的限流分类
  • 4. Kong网关限流实战
    • 4.1 全局限流
      • 4.1.1 开启
      • 4.1.2 验证
      • 4.1.3 删除规则
    • 4.2 服务级别限流
      • 4.2.1 新建服务
      • 4.2.2 给example_service添加限流
      • 4.2.3 验证
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档