Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算Django应用程序每秒的最大请求数?_Python_Django_Deployment_Concurrency_Python Requests - Fatal编程技术网

Python 如何计算Django应用程序每秒的最大请求数?

Python 如何计算Django应用程序每秒的最大请求数?,python,django,deployment,concurrency,python-requests,Python,Django,Deployment,Concurrency,Python Requests,我是关于部署Django应用程序的,然后我突然想到,我找不到一种方法来预测我的应用程序每秒可以处理多少个请求 有没有一种方法可以计算Django应用程序每秒可以处理多少个请求,而不必求助于测试部署和使用外部工具,例如 我知道这涉及到几个因素(比如数据库查询的数量等),但也许有一种方便的方法可以计算,甚至估计一个Django应用程序实例可以处理多少访问者 编辑:删除对Gunicorn的提及,因为这只会让我真正想知道的事情更加混乱 根据文件 有多少工人 不要将工作人员的数量缩放到您希望拥有的客户端的

我是关于部署Django应用程序的,然后我突然想到,我找不到一种方法来预测我的应用程序每秒可以处理多少个请求

有没有一种方法可以计算Django应用程序每秒可以处理多少个请求,而不必求助于测试部署和使用外部工具,例如

我知道这涉及到几个因素(比如数据库查询的数量等),但也许有一种方便的方法可以计算,甚至估计一个Django应用程序实例可以处理多少访问者

编辑:删除对Gunicorn的提及,因为这只会让我真正想知道的事情更加混乱

根据文件

有多少工人

不要将工作人员的数量缩放到您希望拥有的客户端的数量。Gunicorn应该只需要4-12个工作进程就可以每秒处理数百或数千个请求

Gunicorn依靠操作系统在处理请求时提供所有负载平衡一般来说,我们建议(2 x$num_cores)+1作为开始时的员工数量。虽然不太科学,但该公式基于这样一个假设:对于给定的内核,一个工作进程将从套接字读取或写入数据,而另一个工作进程正在处理请求

显然,您的特定硬件和应用程序将影响最佳工作人员数量。我们建议在应用程序加载时,使用TTIN和TTOU信号从上述猜测和调整开始

永远记住,有一件事是工人太多了。在一个点之后,工作进程将开始对系统资源进行重击,从而降低整个系统的吞吐量

最好的方法是使用一些负载测试工具(如您提到的蝗虫)对其进行调优

重点矿山

有没有一种方法可以计算一个人每秒可以处理多少个请求 Django应用程序句柄,无需执行 测试部署并使用外部工具,如蝗虫

不,是的。正如mackarone指出的,我不认为你会回避测量它。考虑在本地DEV服务器上与本地DB实例进行本地基准测试的情况,以便生成用于估计的基线。问题是硬件、网络(服务之间的距离)都会产生巨大的差异。因此,您在本地生成的任何数字对于容量规划来说都相对毫无价值

根据我的经验,本地测试对于相对变化非常有用。考虑一下您希望看到SQL查询计划的性能影响的情况。建立一个局部基线,进行改变,而不是在局部观察效果,这有助于衡量相对加速

如何生成这些数字?

我建议将应用程序部署到您计划测试的硬件和网络上。此部署应使用您的生产配置和组件拓扑(即,如果您要运行gunicorn,请确保gunicorn正在运行而不是NGINX,或者如果您要在gunicorn前面安装一个代理,请确保已安装。我将使用您的生产配置运行应用程序的单个实例

一旦运行,我将使用任何流行的负载测试工具针对单个实例启动负载测试:

您可以从单机启动这些负载测试,并增加流量,直到响应时间不再可接受,以便了解并发连接的情况,以及应用程序可以容纳的吞吐量

现在您对您的服务的单个实例能够处理什么有了一些想法。在您的db(或其他共享资源)饱和之前,这些数字可以用来预测您的服务需要多少实例来处理一定数量的流量!

您必须先安装(loadtest),它是一个npm包, 我在学习redis,当时我发现了这个,你可以用它,它对我有用, 有关更多信息,请查看本教程:


计算像最大吞吐量这样的任何东西都是非常棘手的,您最好的办法是运行负载测试并以经验的方式测量最大吞吐量。@mackorone到目前为止,这似乎是唯一的选择,但也许社区中有人可以想出一个聪明的解决方案;-).也许我把古尼科恩包括在我的描述中是错误的。即使一个Gunicorn工作人员非常高效,这也归结为您的Django应用程序能够以多快的速度响应请求。我想知道我的Django应用程序每单位时间能处理多少个请求…谢谢!这似乎是一个相当复杂的话题,在谷歌上搜索,我找不到任何资源来讨论它们的结果,至少我想知道Django应用程序在野外的表现有多好。。。
npm install -g loadtest

loadtest -n 100 -k  http://localhost:8000/myUrl/