gin*_*ime 6 django rest throttling
我正在尝试在REST API上实现一些限制.甲典型的方法是经过一定的阈值以阻止请求(具有403或429响应).但是,我已经看到一个api会增加响应的延迟.
当您拨打API时,我们将查看您在过去五分钟内的平均每秒呼叫次数(c/s).这是将要发生的事情:
超过3c/s,我们增加了2秒的延迟
超过5c/s,我们加上4秒延迟
超过7c/s,我们增加了5秒的延迟
从客户的角度来看,我认为这比回复错误要好.可能发生的最糟糕的事情是你会放慢速度.
我想知道如何在不对App服务器产生负面影响的情况下实现这一目标.即,为了添加这些延迟,服务器需要保持请求打开,从而使得请求处理器越来越忙,这意味着它有更少的容量来处理新请求.
实现这一目标的最佳方法是什么?(即这是可以在Web服务器/负载均衡器上完成的事情,以便应用程序服务器不会受到负面影响吗?是否有某种类型的限制层可以为此目的添加?)
我们正在使用Django/Tastypie,但问题更多的是在架构/概念层面.
如果您使用同步应用程序服务器,这是 Django 应用程序最常见的设置(例如默认的 Gunicorn --worker-class sync),那么在应用程序中添加这样的延迟确实会对性能产生非常糟糕的影响。处理延迟请求的工作人员将在延迟期间被阻止。
但是您可以使用异步应用程序服务器(例如带有“--worker-class gevent”的gunicorn),然后开销应该可以忽略不计。处理延迟请求的工作人员能够在延迟进行时处理其他请求。
在反向代理服务器中执行此操作可能是更好的选择,因为它允许轻松灵活地调整策略。有一个外部 nginx 模块正是用于此类事情。
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |