Apache + mod_wsgi / Lighttpd + wsgi - 我会看到性能上的差异吗?

3
我是一个Python开发新手,正在收集信息以在两个其他问题中做出明智的选择(这不是重复问题)。
我没有使用框架,而是使用gevent库从头构建Web应用程序。就前端Web服务器而言,似乎我有三个选择:nginx、apache和lighttpd。
据我所读的所有报道,nginx的mod_wsgi不适合。
那就只剩下两个选择了——lighttpd和Apache。在高负载下,性能和内存消耗特性会有很大的差异吗?我认为即使不使用prefork,Apache tend to be memory hungry,但我不知道lighttpd对Python应用程序是否合适。
使用lighttpd是否存在任何注意事项或好处优势?我真的想听听您可能无聊的所有信息!
2个回答

5

Apache...

Apache是目前使用最广泛的Web服务器。这是一件好事。有很多关于如何使用它的信息,当出现问题时,有很多人知道如何解决。但是,它也是开箱即用最慢的;需要大量调整和比Lighttpd更强大的服务器。在您的情况下,使用Apache和Python将更容易入门。有无数的AMP软件包,以及许多指南介绍如何设置Python并使您的应用程序工作。只需快速搜索谷歌即可上手。在重负载下,Lighttpd将胜过Apache,但Apache就像一辆火车。它只会不停地运行。

优点

  • 广泛的用户群
  • 通用支持
  • 许多插件

缺点

  • 开箱即用慢
  • 需要性能调整
  • 内存占用高(无法在64MB VPS上运行)

Lighttpd...

Lighttpd是新生代的Web服务器。它快速、强大,而且性能方面非常棒(更不用说几乎不占用内存了)。开箱即用,Lighttpd比Apache更优秀。但是,了解Lighttpd的人不如了解Apache的多,因此使其工作更难。是的,它是第二大使用的Web服务器,但它没有像Apache那样强大的社区支持。如果您在这里查看stackoverflow,会发现有个人一直在问如何让他的Python应用程序工作,但没有人帮他。在重负载下,如果正确配置,则Lighttpd将优于Apache(我曾经做过一些测试,在每秒请求数方面可能会增加200-300%)。

优点

  • 开箱即用快速
  • 占用内存很少

缺点

  • 没有Apache那么多的支持
  • 有时无法正常工作

Nginx 如果您运行静态网站,则应使用nginx。您说nginx的mod_wsgi不合适是正确的。

结论 好处?两者都是Web服务器;旨在能够相互替代。如果两个Web服务器都调整正确,并且您拥有充足的硬件,则使用其中一个没有真正的好处。您应该尝试并查看哪个Web服务器满足您的需求,但是问我;我会说选择Lighttpd。在我看来,它更容易配置并且可以正常工作。

此外,您应该查看Cherokee Web服务器。非常容易设置,性能也不错。您还应该在Server Fault上询问此问题。


谢谢。看起来我需要在硬件上再花费一些钱。Apache看起来是明显的赢家,特别是在进一步研究后发现lighttpd不支持WSGI。 - Matty
我刚看到一篇关于这个的文章,但没有看到WSGI部分。如果你正在使用WSGI,那么Apache是一个明显的赢家。这篇文章介绍了如何同时使用两个服务器来提高性能,值得一读:http://www.inerciasensorial.com.br/2009/08/23/perils-of-software-development/apache-mod_wsgi-django-lighttpd/ - Colum

1

你提到gevent是很重要的。这是否意味着你正在尝试实现一个长轮询应用程序?如果是这样,并且该功能是应用程序的主要部分,那么你需要将gevent服务器放在使用异步技术而不是进程/线程模型实现的前端Web服务器后面。Lighttd是一个异步服务器,符合这个标准,而Apache则不是。因此,使用Apache作为长轮询应用程序的前端代理不是一个好选择。如果这是标准,我建议你使用nginx而不是Lighttpd。

现在,如果你没有进行长轮询或任何其他需要长时间运行请求的高并发操作,那么使用gevent可能不会带来太多好处,特别是如果你打算在顶部使用WSGI层。对于WSGI应用程序,不同服务器之间的性能差异最终是微不足道的,因为你的应用程序不太可能是所有基准测试都使用的hello world程序。真正的瓶颈不是服务器,而是你的应用程序代码、数据库、外部调用、缺乏缓存等等。考虑到这一点,你应该只使用你最初发现更容易使用的WSGI托管机制,当你正确地确定了你的应用程序的托管要求时,基于拥有一个实际的真实应用程序进行测试,然后如果必要,你可以切换到更合适的东西。

总之,试图通过寻找理论上最佳的服务器来过早地进行优化是浪费时间,实际上你应该最初集中精力于你的应用程序。此后,你还应该关注应用程序监控工具,因为如果没有监控工具,你又怎么能确定一个托管解决方案比另一个更好呢?

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