通过节点+雷迪如何实现API速率限制?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
速率限制可以保护和提高基于API的服务的可用性。如果你正在与一个API对话,并收到HTTP 429太多的请求的响应状态码,说明你已经被速率限制了。
为什么要速率限制?
当你考虑限制你自己的基于API的服务时,你需要在用户体验,安全性和性能之间进行权衡。
控制数据流的最常见原因是保持基于API的服务的可用性。但也有安全方面的好处,一次无意或有意的入站流量激增,就会占用宝贵的资源,影响其他用户的可用性。
通过控制传入请求的速率,你可以:
- <李>保障服务和资源不被“淹没”。李> <李>缓和暴力攻击李> <李>防止分布式拒绝服务(DDOS)攻击李>
如何实施限速?
速率限制可以在客户端级别,应用程序级别,基础架构级别或介于两者之间的任何位置实现。有几种方法可以控制API服务的入站流量:
- <李> <强>按用户强>:跟踪用户使用API密钥,访问令牌或IP地址进行的调用李> <李> <强>按地理区域划分强>:例如降低每个地理区域在一天的高峰时段的速率限制李> <李> <强>按服务器>强:如果你有多个服务器处理对API的不同调用,你可能会对访问更昂贵的资源实施更严格的速率限制。李>
你可以使用这些速率限制中的任何一种(甚至组合使用)。
无论你选择如何实现,速率限制的目标都是建立一个检查点,该检查点拒绝或通过访问你的资源的请求。许多编程语言和框架都有实现这一点的内置功能或中间件,还有各种速率限制算法的选项。
这是使用节点和复述,制作自己的速率限制器的一种方法:
- <李>创建一个节点应用李> <李>使用复述,添加速率限制器李> <>李在邮递员中测试李>
在GitHub上查看代码示例。引用>在开始之前,请确保已在计算机上安装了节点和复述。
步骤1:建立节点应用程序
从命令行设置一个新节点的应用。通过CLI提示,或添加<代码> - 代码>标志来接受默认选项。
npm init美元——是的如果在项目设置过程中接受了默认选项,则为入口点创建一个名为<代码>索引。js代码>的文件。
触摸美元指数。js安装表达Web框架,然后在<代码>索引。js代码>中初始化服务器。
const表达=要求(& # 39;表达# 39;) const应用=表示()=process.env const港口。港| | 3000 app.get(& # 39;/& # 39;(点播,res)=比;res.send (& # 39; Hello World ! & # 39;)) app.listen(港口,()=比;控制台。日志(“示例应用倾听http://localhost: ${港口}'))从命令行启动服务器。
节点美元指数。js回到<代码>索引。js代码>中,创建一个路,由先检查速率限制,如果用户没有超过限制再允许访问资源。
app.post(& # 39;/& # 39;异步(点播,res)=比;{ 异步函数isOverLimit (ip) {//定义 }//检查率限制 让overLimit=等待isOverLimit (req.ip) 如果(overLimit) { res.status (429) .send(& # 39;太多的请求,再试一次后,) 返回 }//允许访问资源 res.send(“珍贵的资源访问!“) })
在下一步中,我们将定义速率限制器函数<代码> isOverLimit> 代码。
步骤2:使用复述,添加速率限制器
复述是一个内存中键值数据库,因此它可以非常快速地检索数据。使用复述,实施速率限制也非常简单。
<李>存储一个像用户IP地址一样的关键。李> <李>增加从该IP发出的调用数量李> <李>在指定时间段后使记录过期李>
下图所示的限速算法是一个<强>滑动窗口计数器强>的例子。一个用户如果提交的调用数量适中,或者随着时间的推移将它们分隔开,就永远不会达到速率限制。超过10秒窗口内最大请求的用户必须等待足够的时间来恢复其请求。
通过节点+雷迪如何实现API速率限制