2007年11月27日

Django的服务器选择

作者 非鱼

在Django官方的配置文档上,建议的生产环境服务器是Apache+Mod_Python,同时也说明了Lighttpd+FastCGI是个不错的选择,有时还可以提供更好的性能。

对于性能问题,许多用户有着完全不同的意见,在一份比较可信的报告上,使用最精简的Apache编译,配合Mod_Python模块运行Django,跟Lighttpd+FastCGI的方案相比,在单用户并发的情况下,性能稍弱,但是在10并发和100并发的情况下,性能要高出40%左右。

当然,通常情况下你的Apache不可能是最精简状态,Apache的性能会随着加载模块的数量逐步降低。(当然,你可以为每一种不同的应用编译一个Apache实例,虽然比较麻烦,但是的确是个好的选择)而Lighttpd本身是轻量的,功能的多少对性能影响不大。而且随着并发量的上升,Apache的进程模式对系统资源占用很厉害,所以对于硬件资源有限的平台,Lighttpd应该是个更好的选择。

另外还有一个重要的要考虑的问题,你的服务器是否只运行Python?以我个人的经验,Apache在同时加载了Mod_Python和php模块的话,Python的某些函数会出现奇怪的结果。但是如果没有php模块,就不会出现这个问题。这个问题被人称为“Linux上的dll黑洞”,不同的模块如果使用到了不同版本的外部项目,那么它们就会产生影响。在CGI模式则不会,所有的模块都是完全独立的。所以如果需要同时运行Django和PHP程序,那么两者不能同时使用Apache的模块方式,至少有一个要使用CGI模式(或者分别编译到两个Apache实例上)。

PS:据说另一个新的小型WEB服务器Ngnix也不错,其性能和资源消耗都跟Lighttpd差不多,美国的许多空间提供商使用了这个服务器,在同样的硬件平台上,甚至可以提供Apache 10倍的负载能力,而且,它可以在不间断服务的情况下进行软件升级,Apache的Rewrite规则也可以在很少修改的情况下直接拿来使用,都是不错的选择。