我正在尝试在我们的 REST API 上实现一些限制。一种典型的做法是在某个阈值之后阻止请求(带有403
或429
响应)。但是,我看到一个 api反而增加了响应的延迟。
当您调用 API 时,我们将查看您在前五分钟期间每秒的平均调用次数 (c/s)。以下是将会发生的事情:
超过 3c/s,我们增加了 2 秒的延迟
超过 5c/s,我们增加了 4 秒的延迟
超过 7c/s,我们增加了 5 秒的延迟
从客户的角度来看,我认为这比返回错误要好。可能发生的最糟糕的情况是你会放慢速度。
我想知道如何在不对应用服务器产生负面影响的情况下实现这一点。即为了增加这些延迟,服务器需要保持请求打开,导致它让越来越多的请求处理器保持忙碌,这意味着它对新请求的容量越来越小。
实现这一目标的最佳方法是什么?(即,这是否可以在 Web 服务器/负载均衡器上完成,以免对应用程序服务器产生负面影响?是否可以为此添加某种节流层?)
我们使用的是 Django/Tastypie,但问题更多是在架构/概念层面。