什么用于中型到大型的Python WSGI应用程序,Apache + mod_wsgi或Nginx + mod_wsgi?
哪种组合需要更多内存和CPU时间?
哪一个更快?
众所周知哪个比另一个更稳定?
我也在考虑使用CherryPy的WSGI服务器,但我听说它不适合非常高负载的应用程序,你对此有何了解?
注意 :我没有使用任何Python Web Framework,我只是从头开始编写所有内容。
注意' :欢迎提出其他建议。
答案 0 :(得分:74)
对于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将提供更可预测和可靠的行为。
答案 1 :(得分:16)
nginx mod_wsgi的作者向Apache mod_wsgi in this mailing list message解释了一些差异。
答案 2 :(得分:13)
主要区别在于构建nginx是为了在更小的内存空间中处理大量连接。这使得它非常适合那些做彗星的应用程序,例如可以有许多空闲打开连接的连接。这也使它具有相当小的内存占用量。
从原始性能的角度来看,nginx更快,但速度并不快,我将其作为一个决定因素。
Apache在可用模块领域具有优势,而且它非常标准。你使用的任何网络主机都会安装它,大多数技术人员都会对它非常熟悉。
另外,如果你使用mod_wsgi,它就是你的wsgi服务器,所以你甚至不需要樱桃。
除此之外,我可以给出的最佳建议是尝试在两者下设置您的应用并进行一些基准测试,因为无论任何人告诉您,您的里程可能会有所不同。
答案 3 :(得分:7)
CherryPy的网络服务器有一件事就是它是一个纯粹的python webserver(AFAIK),可能会也可能不会让你更容易部署。另外,如果你只是使用服务器来获取WSGI和静态内容,我可以看到使用它的好处。
(无耻的插件警告:我编写了我要提及的WSGI代码)
Kamaelia将在下一版本中提供WSGI支持。很酷的是,您可能可以使用预先制作的或使用现有的HTTP和WSGI代码构建自己的代码。
(结束无耻的插件)
话虽如此,鉴于目前的选项,我个人可能会选择CherryPy,因为它似乎是最简单的配置,我可以理解python代码,而不是我能理解C代码。
你可以尽力尝试每一个,看看每个人的优缺点是针对你的具体应用。