0

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

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

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

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

4

1 回答 1

1

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

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

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

于 2019-05-03T23:52:29.987 回答