Apache + mod_wsgi / Lighttpd + wsgi - 性能差异会很明显吗?

3 投票
2 回答
2541 浏览
提问于 2025-04-16 19:24

我刚开始学习用Python开发,正在整理一些信息,以便在其他两个开放性问题中做出明智的选择。(这不是重复的问题。)

我不是在使用框架,而是从零开始用gevent库构建一个网页应用。关于前端网页服务器,我似乎有三个选择:nginx、apache和lighttpd。

根据我读到的所有资料,nginx的mod_wsgi似乎不太适合。

那我就剩下两个选择了——lighttpd和Apache。在高负载的情况下,它们的性能和内存消耗会有很大差别吗?我觉得Apache即使不使用prefork模式也比较占内存,但我不太清楚lighttpd对Python应用的适用性。

使用lighttpd相比于apache有什么注意事项或好处吗?我真的很想听听你们能给我提供的所有信息!

2 个回答

1

你提到的gevent很重要。这是不是意味着你特别想实现一个长轮询的应用?如果是这样,而且这个功能占据了应用的大部分,那么你需要把gevent服务器放在一个前端的网络服务器后面,这个前端服务器要用异步技术来实现,而不是用进程或线程模型。Lighttpd就是一个异步服务器,适合这个需求,而Apache就不行。所以,Apache作为长轮询应用的前端代理并不好。如果这是你的标准,我其实建议你用nginx,而不是Lighttpd。

现在,如果你不是在做长轮询或者其他需要高并发的长时间请求的事情,那么使用gevent可能不会给你带来太多好处,特别是如果你打算在上面使用WSGI层的话。对于WSGI应用来说,不同服务器之间的性能差异其实很小,因为你的应用不太可能是那些基准测试中使用的“你好,世界”程序。真正的瓶颈往往不是服务器,而是你的应用代码、数据库、外部调用、缺乏缓存等等。因此,你应该先使用你觉得最简单的WSGI托管方式,当你真正搞清楚你的应用需要什么样的托管时,再根据实际的应用测试来切换到更合适的方案。

总的来说,你只是浪费时间在寻找理论上最好的服务器上进行过早的优化,而实际上你应该先专注于你的应用。之后,你还应该关注应用监控工具,因为没有监控工具,你怎么能判断一个托管方案是否比另一个更好呢?

5

Apache...

Apache是目前使用最广泛的网页服务器,这其实是件好事。因为有很多关于如何使用它的信息,而且当出现问题时,有很多人知道怎么解决。不过,Apache的默认设置比较慢,需要进行很多调整,并且需要比Lighttpd更强大的服务器。在你的情况下,使用Apache和Python会更容易上手。市面上有很多AMP(Apache、MySQL、PHP)包,还有许多关于如何设置Python和让你的应用正常工作的指南。只要在网上搜索一下,就能找到很多有用的信息。在高负载情况下,Lighttpd的表现会超过Apache,但Apache就像一列火车,稳稳地运行着。

优点

  • 用户基础广泛
  • 支持几乎所有功能
  • 有很多插件可用

缺点

  • 默认设置比较慢
  • 需要进行性能调整
  • 占用内存较多(在64MB的虚拟专用服务器上几乎无法运行)

Lighttpd...

Lighttpd是新兴的选择。它速度快、性能强大,使用的内存也非常少。默认情况下,Lighttpd的表现远超Apache。不过,了解Lighttpd的人相对较少,所以让它正常工作会比较困难。虽然它是第二大使用的网页服务器,但社区支持没有Apache那么强。如果你在StackOverflow上搜索,会发现有些人一直在问如何让他们的Python应用正常工作,但没有人能帮他们。在高负载情况下,如果配置得当,Lighttpd的性能会超过Apache(我之前做过一些测试,可能会看到每秒请求量提高200-300%)。

优点

  • 默认设置就很快
  • 占用内存非常少

缺点

  • 支持没有Apache多
  • 有时候就是不工作

Nginx

如果你在运行一个静态网站,那么你应该使用Nginx。你说Nginx的mod_wsgi不适合是对的。

总结

这两种网页服务器各有优缺点,设计上可以互相替代。如果这两种服务器都经过合理配置,并且硬件足够强大,那么使用哪一个其实没有太大区别。你可以尝试一下,看看哪个网页服务器更符合你的需求。就我个人而言,我会推荐Lighttpd。我觉得它更容易配置,而且运行得很好。

另外,你也可以看看Cherokee Web Server。设置起来非常简单,性能也不错。你也可以在Server Fault上问问这个问题。

撰写回答