使用FastCGI或mod_python运行Django

20

你推荐哪个? 哪一个更快,更可靠? apache mod_python 还是 nginx/lighttpd FastCGI?

7个回答

21

我既使用过Apache/mod_python,也使用过Apache/mod_wsgi,而且发现Apache/mod_python更容易处理和更加稳定。但是现在我转向使用Apache/mod_wsgi,因为它拥有我想要的一切,甚至更多:

  • 轻松管理守护进程。
  • 因此,进程隔离得到了大幅度的提高(使用mod_python在同一Apache配置中运行多个站点几乎总是会出问题--当你这样做时,环境变量和C扩展会泄漏到其他站点)。
  • 轻松重载代码(正确设置后,只需触及 .wsgi 文件就能重新加载,而无需重新启动Apache)。
  • 更可预测的资源使用率。对于mod_python,给定的Apache子进程的内存使用可能会跳来跳去。但是对于mod_wsgi,它相当稳定:一旦所有内容都加载完成,你就知道它将使用多少内存。

你对于 Apache/mod_wsgi 的偏好仍然存在吗?这已经过去将近2.5年了。 - Dolph
如果还有人关心的话,使用uwsgi或gunicorn将您的wsgi服务器分离,并由您选择的Web服务器进行前端处理,这是我见过的每个项目中最好的方向。坚持使用Apache对于您的网站来说有点像死刑判决。 - Jordan

6
使用 FastCGI 的 lighttpd 理论上会更快,但实际上运行 Python 代码以及任何数据库查询所需的时间将绝对使您获得 Web 服务器之间性能差异微不足道。
如果您想编写 Django 之外的代码来执行诸如摘要身份验证或任何高级 HTTP 标头获取/设置等操作,则 mod_python 和 Apache 将在功能方面为您提供更多灵活性。也许您想使用 Apache 的其他内置功能,例如 mod_rewrite。
如果内存是一个问题,避免使用 Apache/mod_python 会很有帮助。Apache 倾向于使用大量 RAM,并且 glue 到所有 Apache 功能的 mod_python 代码也占用了大量内存空间。更不用说 Apache 的多进程特性会消耗更多的 RAM,因为每个进程都会增长到其最密集的请求大小。

5

Nginx与mod_wsgi


2
我建议使用WSGI配置;我一直想放弃apache,但服务器上总有一些需要它的遗留应用程序。此外,WSGI应用程序生态系统非常多样化,它允许在服务器和应用程序之间使用WSGI“中间件”等巧妙技巧。

然而,目前存在已知问题,涉及某些应用程序和apache mod_wsgi,特别是一些ctypes应用程序,因此如果您尝试运行使用ctypes广泛的geodjango,请谨慎。我目前正在通过回到fastcgi来解决这些问题。


2

个人而言,我已经使用FastCGI工作了大约6个月左右,并且在以这种方式加载页面时响应时间似乎比mod___python更快。但对我来说,关键原因是我无法看到通过同一个apache/mod_python安装做多个站点的明显方法,而FastCGI则相对简单。

我没有进行特别彻底的实验:-)

[编辑] 从我的经验来看,首次设置FastCGI可能有些麻烦。 我一直想写一份指南..!


2

我正在使用它与nginx一起。不确定它是否真的更快,但肯定会减少RAM / CPU负载。此外,它更容易运行多个Django进程,并且让nginx将每个URL前缀映射到不同的套接字。仍未充分利用nginx的memcached模块,但首次测试显示具有巨大速度优势。


2

还有一个叫做mod_wsgi的东西,它似乎比mod_python更快,而且守护程序模式类似于FastCGI。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接