68

什么用于大中型 python WSGI 应用程序,Apache + mod_wsgi 或 Nginx + mod_wsgi?

哪种组合需要更多的内存和 CPU 时间?
哪个更快?
哪个以比另一个更稳定而闻名?

我也在考虑使用 CherryPy 的 WSGI 服务器,但我听说它不太适合负载非常高的应用程序,您对此了解多少?

注意:我没有使用任何 Python Web 框架,我只是从头开始编写整个东西。
注意':也欢迎其他建议。

4

4 回答 4

77

对于 nginx/mod_wsgi,请确保您阅读:

http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html

由于 nginx 在底层是一个事件驱动系统,它具有不利于阻塞应用程序的行为特征,例如基于 WSGI 的应用程序。更糟糕的情况是使用多进程 nginx 配置,即使某些 nginx 工作进程可能处于空闲状态,您也可以看到用户请求被阻止。Apache/mod_wsgi 没有这个问题,因为 Apache 进程只有在它拥有实际处理请求的资源时才会接受请求。Apache/mod_wsgi 将因此提供更可预测和更可靠的行为。

于 2009-06-24T12:26:01.277 回答
16

nginx mod_wsgi 的作者在此邮件列表消息中解释了与 Apache mod_wsgi 的一些差异。

于 2009-01-03T13:04:18.580 回答
14

主要区别在于 nginx 是为在更小的内存空间中处理大量连接而构建的。这使得它非常适合执行类似彗星的连接的应用程序,这些连接可以有许多空闲的打开连接。这也使它的内存占用空间更小。

从原始性能的角度来看,nginx 更快,但并没有那么快,我将其作为决定因素。

Apache 在可用模块方面具有优势,而且它几乎是标准的。您使用的任何网络主机都会安装它,并且大多数技术人员都会非常熟悉它。

此外,如果您使用 mod_wsgi,它就是您的 wsgi 服务器,因此您甚至不需要cherrypy。

除此之外,我能给出的最好建议是尝试在两者下设置您的应用程序并进行一些基准测试,因为无论任何人告诉您什么,您的里程都可能会有所不同。

于 2008-10-13T02:44:24.547 回答
7

CherryPy 的网络服务器要做的一件事是它是一个纯 Python 网络服务器 (AFAIK),它可能会或可能不会使您的部署更容易。另外,如果您只是将服务器用于 WSGI 和静态内容,我可以看到使用它的好处。

(无耻插件警告:我写了我要提到的WSGI代码)

Kamaelia将在下一个版本中支持 WSGI。很酷的一点是,您可能既可以使用预制的,也可以使用现有的 HTTP 和 WSGI 代码构建自己的。

(结束无耻插件)

话虽如此,鉴于当前的选项,我个人可能会选择 CherryPy,因为它似乎是最简单的配置,而且我对 Python 代码的理解比对 C 代码的理解要多。

不过,您最好尝试一下它们中的每一种,看看每种方法的优缺点对于您的特定应用程序有什么好处。

于 2008-10-12T20:45:41.120 回答