OpenResty限频限流

OpenResty限频限流

之前对系统限流这个话题有过一次讨论,之后有在实际工作中遇到一次应用,写一篇文章记录本次实践。

背景

目前在做的系统有提供Open API接入,即客户通过API Key接入使用系统功能。所允许接入的API根据功能种类不同所需系统开销有所差异,从技术角度希望对系统增加一些保护措施,避免用户接入使用过程有意或无意高频调用一些API对系统构成压力,从而影响整个系统稳定性。

限制主要考虑两个维度:

  • 限频,限制单位时间内调用次数,关注调用速度
  • 限流,限制时间窗口内调用次数,关注调用总量

如上描述,限频、限流本质是同一件事:“限制一定时间内的调用次数”,但此处特意使用两个不同的名词用于体现差异性(后文会多次提及):

  • 单位时间,粒度小,常量,通常用秒描述
  • 时间窗口,粒度大,变量,如一分钟、五分钟、十五分钟或一小时等

在目标系统中针对特定API(POST /api/order),期望实现:“每秒调用不能超过20次,每分钟调用不能超过200次”,前者称之为限频,后者称为限流。

方案

限频限流可以选择在应用层实现,早期在一些项目中的确有借助Redis实践过,结论是只能满足前期需要,后期系统QPS过高时应用层与Redis的开销不容小觑。

当前项目的Open AP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值