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