2011-06-12 57 views
2

我是一个用Python开发的新手,我正在将我需要的信息拼凑在一起,以便在另外两个开放问题中做出明智的选择。 (这不是重复的)。Apache + mod_wsgi/Lighttpd + wsgi - 我会看到性能差异吗?

我没有开发使用框架,而是使用gevent库从头开始构建web应用程序。就前端Web服务器而言,似乎我有三种选择:nginx,apache和lighttpd。

从我读过的所有帐户中,nginx的mod_wsgi并不合适。

这留下了两个选择 - lighttpd和Apache。在重负载下,我会看到性能和内存消耗特性方面的主要差异吗?我受到印象的困扰即使不使用prefork,Apache往往仍然渴望内存,但我不知道lighttp适合Python应用程序。

对apache使用lighttpd是否有任何警告或好处?我真的很想听到你可能带给我的所有信息!

回答

4

阿帕奇...

Apache是​​目前使用最广泛的Web服务器在那里。这是一件好事。有很多关于如何使用它的信息,当出现问题时,有很多人知道如何解决它。但是,它也是最慢的。与Lighttpd相比,需要大量的调整和更强大的服务器。在你的情况下,使用Apache和Python来实现它将会容易得多。那里有无数的AMP软件包,以及许多关于如何设置python并使您的应用程序正常工作的指南。快速的谷歌搜索会让你走上正路。 Lighttpd在重负载下将胜过Apache,但Apache就像一列火车。它只是一直在徘徊。

优点

  • 广泛的用户群
  • 通用支架
  • 很多插件

缺点

  • 慢开箱
  • 的需要性能调整
  • 内存妓女(没办法,你可以得到它的工作在64MB VPS)

Lighttpd的...

Lighttpd的是新的孩子在块。它速度快,功能强大,并且踢出屁股性能明智(更不用说像没有记忆的使用)。开箱即用,Lighttpd用Apache擦拭地板。但是,并不是很多人知道Lighttpd,所以让它工作更难。是的,它是第二常用的网络服务器,但它没有太多的社区支持。如果你在这里看看,在stackoverflow上,这个家伙一直在问如何让他的Python应用程序工作,但没有人帮助他。在负载很重的情况下,如果配置正确,Lighttpd将会预制Apache(我之前做过一些测试,并且您可能会看到每秒请求的性能提高200-300%)。

优点

  • 快速开箱
  • 的使用很少的内存

缺点

  • 没有尽可能多的支持,例如Apache
  • 有时是行不通的

Nginx的 如果你正在运行一个静态的网站,那么你可以使用nginx的。你说nginx的mod_wsgi不合适。

结论 好处?有两个Web服务器;旨在能够相互替换。如果两个网络服务器都正确调整,并且硬件足够多,那么使用这两个服务器并没有真正的好处。你应该尝试看看哪个Web服务器满足你的需求,但问我;我会说跟Lighttpd一起去。在我看来,它更容易配置和正常工作。

另外,你应该看看切诺基Web服务器。疯狂易于设置,性能不坏。你也应该在服务器故障上提出这个问题。

+0

谢谢。看起来我会花更多的钱在硬件上。 Apache看起来是明显的赢家,尤其是在进一步研究之后,lighttpd不支持WSGI。 – Matty 2011-06-12 02:07:49

+0

我刚刚看到一篇文章,并没有看到有关WSGI的部分。是的,如果你使用WSGI,Apache是​​一个明显的赢家。本文详细介绍了如何使用两台服务器来提高性能:http://www.inerciasensorial.com.br/2009/08/23/perils-of-software-development/apache-mod_wsgi-django-lighttpd/ – Colum 2011-06-12 02:11:45

1

你提到gevent很重要。这是否意味着您正在专门尝试实施长轮询应用程序?如果你是,那功能就是应用程序的大部分,那么你需要把你的gevent服务器放在一个前端Web服务器后面,这个前端Web服务器使用异步技术而不是流程/线程模型来实现。 Lighttd是一个异步服务器,适合那个账单,而Apache不是。因此,使用Apache不适合作为长轮询应用程序的前端代理。如果这是标准,但实际上建议你使用nginx而不是Lighttpd。

现在,如果您没有进行长轮询或其他任何需要长时间运行的并发请求,那么使用gevent并不一定会获得太多,特别是如果打算在顶部使用WSGI层。对于WSGI应用程序,最终不同服务器之间的性能差异很小,因为您的应用程序不太可能成为基准测试人员都在使用的hello world程序。真正的瓶颈不是服务器,而是你的应用程序代码,数据库,外部标注,缺少缓存等等。鉴于此,你应该只使用你最初使用的任何WSGI托管机制,并且当你正确地制定出什么托管要求适用于您的应用程序,基于实际的实际应用程序进行测试,然后您可以根据需要切换到更合适的位置。

总之,你只是在浪费你的时间,试图通过尝试找到什么可能是理论上最好的服务器过早优化,当在实践中你的应用程序是你最初应该集中的。之后,您还应该查看应用程序监视工具,因为如果没有监视工具,您甚至将如何确定一个托管解决方案是否比另一个更好。