【问题标题】:Webhook Endpoints - Handling Many Concurrent RequestsWebhook 端点 - 处理许多并发请求
【发布时间】:2019-09-22 11:56:00
【问题描述】:

这与编程无关,更重要的是基础设施,但在所有交换站点中,StackOverflow 似乎对 RESTful API 部门最了解。

我配置了一个端点来处理可能在 3 分钟窗口内接收多达 1k 个事件的事件。我注意到很多事件“错过了”,但我不确定我是否愿意在没有完全理解的情况下立即指责过度使用。

监听端点是/users/events?user=2345345,其中2345345 是用户ID。从这里我们对该特定用户执行必要的操作,但是如果在此期间下一个用户,2895467 执行的操作导致新事件在第一个可以被处理之前被发送到/users/events?user=2895467。会发生什么?

我打算通过使用celery 来发出信号来减轻这种担忧,这将大大减少这种情况,但是假设在这个单一端点保持同步时可能会错过事件是否公平?

【问题讨论】:

  • 这与同时处理来自多个用户的请求的网络服务器没有什么不同。 webhook 没有什么不同。
  • 这就是我的假设,如果没有返回 200,有问题的供应商确实会发送重试,所以我想错过的事件实际上必须在供应商身上,否则如果我的服务器没有,他们会重试处理它们。
  • 听起来他们的超时时间很短,你的服务器跟不上。

标签: python rest webhooks


【解决方案1】:

现实生活中的行为取决于用于“部署”的方法。

例如,如果您在 nginx 后面使用带有单个无线程工作程序的 uwsgi,则请求将“按顺序”处理:如果第二个请求在第一个处理之前到达,那么第二个请求将被“排队”(添加到 backlog)。

它可以排队多长时间以及队列中可能有多少请求 依赖于nginx的配置(listen backlog),uwsgi的配置(并发,listen backlog)甚至配置 操作系统内核(搜索net.core.somaxconnnet.core.netdev_max_backlog)。当队列变“满”时,新的 “并发”连接将被丢弃,而不是被添加到队列中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2011-09-27
    • 2019-04-22
    相关资源
    最近更新 更多