首页 > 解决方案 > 在 C# 中速率限制客户端 api 的最佳方法

问题描述

我遇到了一个问题,我正在努力决定最好的解决方法。也许我的软件架构需要改变?

我有一个 cron 作业,它每 10 秒访问一次我的网站方法,然后在我的网站上,该方法然后每次对 API 进行 API 调用,但是 API 的速率限制为 x 在一分钟内的数量和 y 的数量

目前我超出了 API 限制,需要以某种方式在网站方法中控制它。我可能考虑过存储在一个文件中,但似乎与数据库相似,因为我目前没有在这个项目中使用数据库。

我试过这个包:https ://github.com/David-Desmaisons/RateLimiter但可惜它在我的场景中不起作用,我认为如果我按照他的示例中提供的循环执行一个请求,它会起作用。我注意到他有一个持久计时器(PersistentCountByIntervalAwaitableConstraint),但他没有文档或示例(我给他发了电子邮件)。我已经做了很多谷歌搜索,但找不到任何关于这种唯一服务器速率限制的示例,这是服务器限制客户端而不是客户端限制对服务器的请求的另一种方式

如何在不更改 cronjobs 的情况下解决我的问题?每个人都认为最好的解决方案是什么?

标签: c#.netasp.net-mvcapi

解决方案


假设您不想更改产生负载的客户端,则别无选择,只能在服务器上实施速率限制。

由于 ASP.NET 应用程序可以随时重新启动,因此用于该速率限制的状态必须保留在某个地方。您可以为此选择任何您喜欢的数据存储。

在这种情况下,您有两个限制:每分钟一个和每天一个。如果您只是应用两个单独的速率限制器,您最终会很快超过每日限制。在那之后,在一天的剩余时间里将没有进一步的访问权限。很可能,这是不可取的。

只应用每日限制似乎更好,因为它更具限制性。一个简单的解决方案是计算请求必须相隔多远才能满足每日限制。然后,您存储最后一次请求的日期。如果没有足够的时间过去,任何新的传入请求都会立即失败。

让我知道这是否对您有帮助。


推荐阅读