一个系统的处理能力是有上限的,当遇到抢购等高并发场景时,如果不采取任何措施,大量的请求会使得系统在短时间内崩溃,造成不可预计的后果。这时就需要使用「限流」来对系统进行保护。
「限流」是指限制并发访问数或者限制一个时间窗口内允许处理的请求数量来保护系统,一旦达到限制数量,则对当前请求进行处理采取对应的拒绝措施,比如跳转到错误页面、拒绝请求等。从本质上来说,「限流」的主要作用是损失一部分用户的可用性,为大部分用户提供稳定可靠的服务。「限流」是 API 网关最核心的能力之一,本文将带您了解如何使用腾讯云 API 网关实现多维度,精细化的限流,最大程度上保护您的业务安全。
01.
使用 API 网关实现限流
如图,在腾讯云 API 网关上主要可以通过 3 个方面进行流量管理,保护后端安全:
1. 使用流量控制插件实现多维度精细化限流;
2. 支持在 API 网关上调整主次业务限流值,为核心业务分配更多资源;
3. API 网关提供完善的实时日志、监控、告警能力,方便即时调整限流策略。
方案优势
- 免改造
限流策略都收敛在网关层,无需改造后台服务即可接入;
- 维度多
支持多种维度的限流,大到整个服务,小到某个用户都可以设置限流。同时支持各种维度间的自由组合,满足的业务场景多;
- 性能好
基于开源的经典限流算法优化,同等条件下性能优于传统的解决方案(如 Nginx 限流),限流功能本身几乎不影响接口性能;
- 支持流量分析
提供丰富的流量看板和支持实时查询流量数据的云 API,可基于流量数据分析,优化限流策略。
02.
「API 网关」流量控制插件
使用流量控制插件是 API 网关提供的进行流控限制的主要方式,支持设置三种资源维度(API、应用、ClientIP)和四种时间维度(秒、分钟、小时、天)的限流。插件中还支持设置特殊的应用和特殊 ClientIP,特例的限流值将覆盖默认的应用、ClientIP 的限流值。
您可创建基础流控插件并绑定到 API 生效,以保护您的后端服务。流控插件的使用步骤如下:
1. 登录 API 网关控制台。
- 控制台地址:https://console.cloud.tencent.com/api
2. 在左侧导航栏,单击「插件」,进入插件列表页,单击页面左上角的「新建」,选择插件类型为「基础流量控制」,新建一个基础流量控制插件,按照您的实际业务需求配置后,点击「保存」按钮。
3. 在插件列表中选中刚刚创建好的插件,点击操作列的「绑定API」,在绑定 API 弹窗中选择服务和环境,并选择需要绑定插件的 API。
4. 单击「确定」,即可将插件绑定到 API,此时插件的配置已经对 API 生效。
03.
「API 网关」服务降级
服务降级是限流的常用手段,其主要思路是在后端压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。通过 API 网关的实例、服务、API 限流功能可以便捷的实现服务降级。
1. 通过 API 网关服务区分不同业务模块
专享实例可提供更高的性能,当您通过API网关服务来区分不同业务模块时,可从逻辑上区分主次业务,将次要业务落在共享实例,将核心业务落在专享实例中,以便为核心业务提供更多资源。两种实例间支持无感知的迁移切换,当业务逻辑变化时,也能方便的进行调整。
2. 通过 API 网关 API 区分不同业务模块
当您通过 API 网关来区分不同业务模块时,业务相关的一组 API 都处于同一个服务下,该服务的 QPS 上限是固定的;因此,您可前往 API 详情页,为核心 API 设置高 QPS 上限,为此要 API 设置低 QPS 上限,采用「弃车保帅」的策略,保证核心业务的访问。
04.
「API 网关」实时流量监控
API 网关基于云日志服务 CLS 和云监控提供完善的实时日志、监控、告警能力,目前支持的监控指标包括请求数、出流量、响应时间、错误数等,所有监控指标都支持 1 分钟、5 分钟、1 小时、1 天四种时间维度,也开放了标准的云 API 供用户调用查询。
您可以在抢购等高并发活动期间,通过控制台监控面板或云API实时监控业务流量的变化,根据实际情况不断自动或手动调整限流策略,以达到最好的限流效果。
05.
「API 网关」限流技术优势
腾讯云 API 网关限流是基于经典令牌桶算法进行优化,性能较通用方案有了有效提升,依赖腾讯云上高可用高性能的中控平台,具备以下优势:
- 能够有效控制 API 平均请求频率;
- 平滑处理系统负载,有力应对流量突增;
- 动态计算令牌速率,减少性能损耗;
- 多维度集群化的高精度流控,全力保证后端服务安全。
未来展望
目前腾讯云 API 网关已经支持了非常强大的限流能力,我们也在此基础上不断深耕探索,未来的重点一方面是不断优化限流算法,提供极致的性能;另一方面 API 网关将推出基于请求参数的限流能力,满足更多限流场景,敬请期待!
06.
直播预告,参与有礼 ?
参与直播互动,将有机会 免费获得 腾讯视频 VIP 月卡 1 张!
8 月 16 日,晚 7 点见!
推荐阅读
One More Thing
欢迎进入千人 QQ 群 (871445853) 交流 Serverless!
- GitHub: github.com/serverless
- 官网: cloud.tencent.com/product/serverless-catalog
点击「阅读原文」,即可预约参加 8.16 晚 7 点直播,干货满满,不容错过!