Webhook 端点 - 处理许多并发请求

Webhook Endpoints - Handling Many Concurrent Requests

这与编程、基础设施无关,但在所有交换站点中,Whosebug 似乎最了解 RESTful API 部门。

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

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

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

现实生活中的行为取决于 "deployment" 所使用的方法。

例如,如果您在 nginx 后面使用 uwsgi 和单个非线程 worker,那么请求将被处理 "sequentially":如果第二个请求在第一个请求被处理之前到达,那么第二个请求将是 "queued"(已添加积压)。

可以排队多长时间,可以排队多少请求 取决于 nginx (listen backlog), configuration of uwsgi (concurrency, listen backlog) 的配置,甚至取决于配置 OS 内核(搜索 net.core.somaxconnnet.core.netdev_max_backlog)。当队列变为 "full" 然后新 "concurrent" 连接将被丢弃而不是被添加到队列中。