带有 Nginx 和 Gunicorn 的 Django-App - 请求丢失了吗?
Django-App with Nginx and Gunicorn - Requests get lost?
在我们公司,我们使用用 django 构建的时间跟踪系统。它使用 Nginx 作为反向代理和 Gunicorn 部署到 运行 python 代码。
它基本上是一个简单的系统,有一个按钮可以开始考勤,另一个按钮可以停止考勤。有时用户声称他们按下了开始或停止,但系统没有处理它。
我们现在正在确定我们的 Gunicorn 配置是否不适合我们的用例并且请求丢失。
所以,我的问题是:
当 Nginx/Gunicorn 无法处理大量请求时,请求是否可能丢失?
事实:
- 同时有大约 150 个请求的最坏情况(我们应用程序的 150 个活跃用户,每个人都想同时注册它的停止。这实际上永远不会发生)
- Gunicorn 运行 具有默认配置,但有 3 个工人
在此情况下,我们将不胜感激,如果您需要更多信息,请告诉我!
感谢@SDRJ 的点子,我自己解决了这个问题。
原始服务器规格
- 具有 2 个 CPU 的虚拟机
- Nginx 作为反向代理
- Gunicorn 运行 3 个工人和每个工人 1 个线程
负载测试
尽管少量请求的平均运行时间为 0.05 秒,但负载测试显示服务器无法同时处理超过 200 个请求。
这导致 Nginx 发出 “错误请求 502” 进一步请求的信号,表明 Nginx 无法再访问 Gunicorn。
优化规格
将 gunicorn 的配置更改为:
- 3 个工人,4 个线程
这带来了更好的性能。服务器一次能够轻松处理超过 4000 个请求。
结论
当 Nginx/Gunicorn 无法处理请求数量时,请求是否可能丢失?
是的,是的。 “丢失”可能是一个不利的描述,但可能会发生某些请求未得到处理的情况。
在我们公司,我们使用用 django 构建的时间跟踪系统。它使用 Nginx 作为反向代理和 Gunicorn 部署到 运行 python 代码。 它基本上是一个简单的系统,有一个按钮可以开始考勤,另一个按钮可以停止考勤。有时用户声称他们按下了开始或停止,但系统没有处理它。 我们现在正在确定我们的 Gunicorn 配置是否不适合我们的用例并且请求丢失。
所以,我的问题是: 当 Nginx/Gunicorn 无法处理大量请求时,请求是否可能丢失?
事实:
- 同时有大约 150 个请求的最坏情况(我们应用程序的 150 个活跃用户,每个人都想同时注册它的停止。这实际上永远不会发生)
- Gunicorn 运行 具有默认配置,但有 3 个工人
在此情况下,我们将不胜感激,如果您需要更多信息,请告诉我!
感谢@SDRJ 的点子,我自己解决了这个问题。
原始服务器规格
- 具有 2 个 CPU 的虚拟机
- Nginx 作为反向代理
- Gunicorn 运行 3 个工人和每个工人 1 个线程
负载测试
尽管少量请求的平均运行时间为 0.05 秒,但负载测试显示服务器无法同时处理超过 200 个请求。 这导致 Nginx 发出 “错误请求 502” 进一步请求的信号,表明 Nginx 无法再访问 Gunicorn。
优化规格
将 gunicorn 的配置更改为:
- 3 个工人,4 个线程
这带来了更好的性能。服务器一次能够轻松处理超过 4000 个请求。
结论
当 Nginx/Gunicorn 无法处理请求数量时,请求是否可能丢失?
是的,是的。 “丢失”可能是一个不利的描述,但可能会发生某些请求未得到处理的情况。