延迟限制 http api 调用

2024-01-02

我正在尝试对 REST API 实施一些限制。 A典型方法 http://django-tastypie.readthedocs.org/en/latest/throttling.html在某个阈值之后阻止请求(带有403 or 429回复)。然而,我见过one api http://apidocs.mailchimp.com/api/faq/#faq6这增加了一个延迟响应反而。

当您调用 API 时,我们将查看您在前五分钟内每秒的平均调用次数 (c/s)。将会发生以下情况:

  • 超过 3c/s,我们添加 2 秒延迟

  • 超过 5c/s,我们添加 4 秒延迟

  • 超过 7c/s,我们添加 5 秒延迟

从客户的角度来看,我认为这比返回错误更好。最糟糕的情况就是你会放慢速度。

我想知道如何实现这一点不会对应用服务器产生负面影响。也就是说,为了增加这些延迟,服务器需要保持请求打开,导致越来越多的请求处理器忙碌,这意味着它处理新请求的能力越来越小。

实现这一目标的最佳方法是什么?(也就是说,这是否可以在 Web 服务器/负载均衡器上完成,以便应用程序服务器不会受到负面影响?是否可以为此添加某种限制层?)

我们正在使用 Django/Tastypie,但问题更多是在架构/概念层面。


如果您使用的是同步应用程序服务器,这是 Django 应用程序最常见的设置(例如默认的 Gunicorn)--worker-class sync),那么在应用程序中添加这样的延迟确实会对性能产生非常糟糕的影响。处理延迟请求的工作人员将在延迟期间被阻止。

但是您可以使用异步应用程序服务器(例如带有“--worker-class gevent”的gunicorn),然后开销应该可以忽略不计。处理延迟请求的工作人员能够在延迟进行时处理其他请求。

在反向代理服务器中执行此操作可能是更好的选择,因为它允许轻松灵活地调整策略。有一个外部 nginx 模块正是用于此类事情 https://github.com/perusio/nginx-delay-module.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延迟限制 http api 调用 的相关文章

  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 如何在views.py中检查用户的权限?

    在我的 Django 站点上的views py 文件中 我有一个基于类的视图 需要根据用户的权限更改变量 所以如果用户有pro view许可 然后它看到一件事 否则如果有basic view然后它看到另一个 我怎样才能在我的内部访问它get
  • Django - 在基于类的视图中从另一个类方法调用一个类方法

    我在基于 django 类的视图中有一个方法 例如称为get player stats 我想从这个方法中调用同一个类中的另一个方法 但我无法这样做 代码如下 class ScoreView TemplateView def get play
  • 将模型中没有的字段添加到 Django ModelForm

    我有一个看起来像这样的模型 class MySchedule models Model start datetime models DateTimeField name models CharField Name max length 75
  • django ImportError:无法导入名称 list_route

    我尝试通过用 list route 标记来添加新端点 但是当我尝试导入 if 时 from rest framework decorators import list route 它找不到它 我需要安装一些东西才能工作吗 我是 django
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 在 Django OAuth Toolkit 中安全创建新应用程序

    如何将 IsAdminUser 权限添加到 Django OAuth Toolkit 中的 o applications 视图 REST FRAMEWORK DEFAULT PERMISSION CLASSES rest framework
  • Django 中所有应用程序的基本模板

    我有一个包含 2 个应用程序的项目 project blog templates index html polls templates index html project templates base html index html 现在
  • Django 基于类的视图上的 success_url 的反向抱怨循环导入

    当使用基于方法的视图时 重定向为reverse没有抱怨这一点 并且仍然可以找到 root url conf 但是 在基于阶级的观点中 它抱怨 ImproperlyConfigured at blog new post The include
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 为什么这个 django url 没有重定向?

    从以下表单获取发布数据后 页面应重定向到 associate learn 如操作中所示 然而 它只是停留在单选按钮页面上 我怀疑我犯了初学者的错误 但在重新阅读教程后 我不确定发生了什么 索引 html Choose a dataset i
  • 获取用户最近城市的最佳方式? Python/Django

    我有一个数据库中城市数量有限的网站 需要向用户显示距离他当前位置最近的城市 我可以通过 MaxMind API 获取位置 但我想获取数据库中距用户城市最近的城市 例如 如果我的数据库中有这些城市 Los Angeles San Franci
  • 无法覆盖 save_model django admin?

    我不明白我做错了什么 我希望用户只添加公告模型的标题和描述 其余部分应自动填充 这是我的模型 class Annoucement models Model username models ForeignKey User on delete
  • 如何重写 Django 中的 model.Manager.create() 方法?

    我有很多Hardware模型有一个HardwareType具有各种特征 就像这样 models py from django db import models class HardwareType model Models name mod
  • 在视图之间共享并在 AppConfig 中初始化的变量

    我想要一个在应用程序启动时初始化的变量 并且可以从视图访问该变量 my app my config py class WebConfig AppConfig name verbose name def ready self print lo
  • Django中的自动递增值

    我在 django 中有一个表并尝试自动递增它的序列号 在自定义模板中 for 循环用于变量 自定义模板 for i in getodeskview tr td 1 td td i odesk id td td i hours td td
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • 使用 Facebook 进行身份验证的网站的 REST API

    我们有一个网站 其中only登录网站并进行身份验证的方式是使用 Facebook 这不是我的选择 当您第一次登录 Facebook 时 系统会自动为您创建一个帐户 现在 我们希望为我们的网站创建一个 iPhone 应用程序 并为其他人使用我
  • 从 WCF REST 获取错误详细信息

    我有一个由 Net WCF 客户端使用的 REST 服务 遇到错误时 REST 服务会返回 HTTP 400 错误请求 响应正文包含 JSON 序列化详细信息 如果我使用 Fiddler Javascript 或直接从 C 执行请求 我可以

随机推荐