【发布时间】:2021-05-19 06:02:36
【问题描述】:
在我们公司,我们使用用 django 构建的时间跟踪系统。它与 Nginx 作为反向代理和 Gunicorn 一起部署以运行 python 代码。 它基本上是一个简单的系统,一个按钮开始考勤,另一个按钮停止。有时用户声称他们按下了开始或停止,但系统没有处理它。 我们现在正在确定我们的 Gunicorn 配置是否不适合我们的用例并且请求会丢失。
所以,我的问题是: 是否有可能,当 Nginx/Gunicorn 无法处理请求数量时,请求会丢失?
事实:
- 最坏的情况是同时有大约 150 个请求(我们的应用程序有 150 个活跃用户,每个人都想同时注册它的停止。这确实不会发生)
- Gunicorn 使用默认配置运行,但有 3 个工作人员
感谢您在这种情况下的任何帮助,如果您需要更多信息,请告诉我!
【问题讨论】:
-
如果网络服务器由于某种原因无法处理传入请求的数量,则请求将超时,因为网络服务器正忙于处理现有请求。我不认为迷失是定义它的好方法。
-
Nginx 是一个反向代理。它实际上只是将请求代理到 gunicorn 服务器。除非您在 Nginx 中添加负载平衡逻辑,否则情况不同。您是否对服务器在特定时间内可以处理的请求数量进行了负载测试?
-
另外,如果用户正在注册,那么这是对数据库的 INSERT 调用,这对于 Postgres 等数据库来说非常快..
-
这里您可能需要考虑两件事 - 您的 Web 服务器一次可以处理多少个请求,以及您的数据库一次可以处理多少个请求。您可以通过使用持久连接来优化应用程序和数据库之间的 TCP 连接,这将使 TCP 连接保持打开状态,尤其是在您的应用程序进行大量数据库调用时。
-
您好 SDRJ,非常感谢您的考虑!没有nginx的负载均衡逻辑,只是反向代理配置。如果服务器无法处理请求,最终用户应该通过其网络浏览器获得通知,对吗?