带有 Nginx 和 Gunicorn 的 Django-App - 请求丢失了吗?

Django-App with Nginx and Gunicorn - Requests get lost?

在我们公司,我们使用用 django 构建的时间跟踪系统。它使用 Nginx 作为反向代理和 Gunicorn 部署到 运行 python 代码。 它基本上是一个简单的系统,有一个按钮可以开始考勤,另一个按钮可以停止考勤。有时用户声称他们按下了开始或停止,但系统没有处理它。 我们现在正在确定我们的 Gunicorn 配置是否不适合我们的用例并且请求丢失。

所以,我的问题是: 当 Nginx/Gunicorn 无法处理大量请求时,请求是否可能丢失?

事实:

在此情况下,我们将不胜感激,如果您需要更多信息,请告诉我!

感谢@SDRJ 的点子,我自己解决了这个问题。

原始服务器规格

  • 具有 2 个 CPU 的虚拟机
  • Nginx 作为反向代理
  • Gunicorn 运行 3 个工人和每个工人 1 个线程

负载测试

尽管少量请求的平均运行时间为 0.05 秒,但负载测试显示服务器无法同时处理超过 200 个请求。 这导致 Nginx 发出 “错误请求 502” 进一步请求的信号,表明 Nginx 无法再访问 Gunicorn。

优化规格

将 gunicorn 的配置更改为:

  • 3 个工人,4 个线程

这带来了更好的性能。服务器一次能够轻松处理超过 4000 个请求。

结论

当 Nginx/Gunicorn 无法处理请求数量时,请求是否可能丢失?

是的,是的。 “丢失”可能是一个不利的描述,但可能会发生某些请求未得到处理的情况。