在生产中,Apache + mod_wsgi或Nginx + mod_wsgi?

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

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

我也想使用CherryPy的WSGI服务器,但是我听说它不太适合一个非常高负载的应用程序,你对此有什么了解?

注意 :我没有使用任何Python Web框架,我只是从头开始编写整个事情。
注意 :其他build议也是受欢迎的。

对于nginx / mod_wsgi,确保你阅读:

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

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

nginx mod_wsgi的作者在这个邮件列表消息中解释了Apache mod_wsgi的一些不同之处。

主要区别在于nginx的构build是为了在更小的内存空间中处理大量的连接。 这使得它非常适合于像彗星一样的应用程序,这些应用程序可能有许多空闲的开放连接。 这也给了它相当小的记忆足迹。

从原始性能angular度来看,nginx速度更快,但速度并不那么快,所以我将其作为决定性因素。

Apache在模块可用领域具有优势,而且事实上它是非常标准的。 任何你使用的networking主机将安装它,大多数技术人员将非常熟悉它。

另外,如果你使用mod_wsgi,它是你的wsgi服务器,所以你甚至不需要cherrypy。

除此之外,我可以给出的最好的build议是尝试在两者之间设置你的应用程序,并做一些基准testing,因为不pipe有人告诉你,你的里程可能会有所不同。

CherryPy的networking服务器有一件事是它是一个纯粹的Pythonnetworking服务器(AFAIK),它可能会或可能不会使部署更容易。 另外,如果您仅使用WSGI和静态内容的服务器,则可以看到使用它的好处。

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

Kamaelia将在下一个版本中提供WSGI支持。 很酷的事情是,你可能会使用预制的或者使用现有的HTTP和WSGI代码来构build自己的。

(无耻的插件)

有了这个说法,鉴于目前的select,我个人可能会去CherryPy,因为它似乎是最简单的configuration,我可以理解的Python代码比我能理解的C代码。

你可能会尽最大努力尝试每一个,看看每个人的利弊是什么为你的具体应用程序虽然。