django - 带有 Nginx 和 Gunicorn 的 Django-App - 请求丢失?
问题描述
在我们公司,我们使用用 django 构建的时间跟踪系统。它与 Nginx 作为反向代理和 Gunicorn 一起部署以运行 python 代码。它基本上是一个简单的系统,一个按钮开始考勤,另一个按钮停止。有时用户声称他们按下了开始或停止,但系统没有处理它。我们现在正在确定我们的 Gunicorn 配置是否不适合我们的用例并且请求会丢失。
所以,我的问题是: 当 Nginx/Gunicorn 无法处理大量请求时,请求是否会丢失?
事实:
- 最坏的情况是同时有大约 150 个请求(我们应用程序的 150 个活跃用户,每个人都想同时注册它的停止。这确实不会发生)
- Gunicorn 使用默认配置运行,但有 3 个工作人员
在这种情况下的任何帮助表示赞赏,如果您需要更多信息,请告诉我!
解决方案
感谢@SDRJ 的想法,我可以自己解决这个问题。
原始服务器规格
- 具有 2 个 CPU 的虚拟机
- Nginx 作为反向代理
- Gunicorn 运行 3 个工人和每个工人 1 个线程
负载测试
尽管少量请求的平均运行时间为 0.05 秒,但负载测试表明服务器一次无法处理超过 200 个请求。这导致 Nginx 为进一步的请求发出“Bad Request 502”信号,这表明 Nginx 无法再访问 Gunicorn。
优化规格
将 gunicorn 的配置更改为:
- 3 个工人,4 个线程
这导致了更好的性能。服务器一次能够轻松处理 4000 多个请求。
结论
当 Nginx/Gunicorn 无法处理请求数量时,请求是否会丢失?
是的。“丢失”可能是一个不利的描述,但可能会发生某些请求未得到处理的情况。
推荐阅读
- python - 部署在 heroku 上的站点的根目录是什么?
- python - 谁能帮我解决这个 pyautogui 导入错误?
- python - Python SQLite3 问题:提供的绑定数量不正确
- java - Do While 循环在空指针处停止
- python - 如何从 pip 1.0 升级?
- javascript - 在 axios 请求中将 HTML 作为字符串发送不起作用
- oracle - 通过在 PL/SQL 中引发异常来插入详细信息的过程
- javascript - 在 Object 中查找最大元素及其键 - React native
- ios - 元素树层次结构中缺少 Xcode 按钮
- python - 如何使用 ExecuteScript 和 python 从 nifi 中的一个传入流文件创建多个流文件