【问题标题】:Bottle WSGI server vs ApacheBottle WSGI 服务器与 Apache
【发布时间】:2023-11-18 02:46:02
【问题描述】:

我其实没有任何问题,只是有点好奇。 我制作了一个基于 Bottle (http://bottlepy.org/) 的 python web 框架。今天我尝试做一些比较来比较bottle WSGI服务器和apache服务器的性能。我在 lubuntu 12.04 上工作,使用 apache 2、python 2.7、bottle 开发版本(0.12)并得到了这个令人惊讶的结果:

正如瓶子文档中所述,包含的 WSGI 服务器仅用于开发目的。问题是,为什么开发服务器比部署服务器(apache)快?

据我所知,开发服务器通常较慢,因为它提供了一些“调试”功能。

另外,在开发 PHP 应用程序时,我从来没有在 100 毫秒内收到任何响应。但是看,瓶子里只有 13 毫秒。

谁能解释一下?这对我来说毫无意义。部署服务器应该比开发服务器更快。

【问题讨论】:

    标签: apache wsgi bottle


    【解决方案1】:

    部署服务器应该比开发服务器快。

    没错。而且它通常更快......在“典型”网络服务器环境中。要对此进行测试,请尝试启动 20 个并发客户端,并让它们向您的每个版本的服务器发出连续请求。您看,您一次只测试了 1 个请求——当然不是一个典型的 Web 环境。我怀疑你会看到不同的结果(我们在此处考虑latency AND throughput)每秒有数十或数百个并发请求。

    换句话说:每秒 10、20、100 个请求时,您可能仍会看到 Apache 的约 200 毫秒延迟,但您会看到 Bottle 的服务器的延迟更差。

    顺便提一下,Bottle 文档do refer to concurrency

    内置的默认服务器基于 wsgiref WSGIServer。这 非线程 HTTP 服务器非常适合开发和早期 生产,但在服务器负载时可能成为性能瓶颈 增加。

    同样值得注意的是,Apache 比 Bottle 参考服务器做的更多(检查 .htaccess 文件、分派到子进程/线程、强大的日志记录等),所有这些功能必然会增加请求延迟。

    最后,我想问一下您是否调整了 Apache 安装。您可以configure it to be faster than it is now,例如通过调整 MPM、简化日志记录、禁用 .htaccess 检查。

    希望这会有所帮助。如果您确实运行了并发基准测试,请务必与我们分享结果。

    【讨论】:

    • 太棒了。现在说得通了。 WSGIServer 是非线程的,并且没有附加任何附加进程。
    【解决方案2】:

    开发服务器不一定比生产级服务器快,所以这样的回答有点误导。

    在这种情况下,真正的原因很可能是由于在第一个遇到进程的请求时延迟加载您的 Web 应用程序。特别是如果您没有正确配置 Apache,如果您的网站没有获得太多流量,您可能会遇到这种延迟加载。

    我建议您观看我的 PyCon 演讲,其中涉及其中一些问题。

    尤其要确保您没有使用 prefork MPM。优先使用 mod_wsgi 守护模式。

    【讨论】:

    • 很棒的介绍。有很多事情我以前不知道。但我得到了一些要点,包括:不要使用相同的 apache 来服务 PHP 和 Python,因为 Python 与 PHP 不同,因此需要正确配置 apache 才能为 Python 服务。另外我想我已经安装了mpm prefork,甚至不知道它的用途。谢谢