信息和先决条件:
我有一个项目,其核心是一个基本的 CRUD 应用程序。它没有长时间运行的后台进程(在开始时会分叉,稍后再与之通信),也没有长时间运行的查询或保持活动连接的要求。它接收请求,对数据库进行一些查询,然后做出响应。
为了快速提供静态文件和可缓存文件,我将在所有情况下使用 Varnish。
这是我的问题:
在阅读了有关各种 Python Web 应用服务器的文章后,我发现它们都有各自的“粉丝”,通常是出于“个人”原因,这让我感到困惑,因为每个用例都不同。
我如何才能了解 Python Web 服务器的核心差异因素(按顺序)来决定它们是否适合我的项目以及其中一个是否比另一个更好?
您对此事有何想法(技术上可证明的)?
我应该如何选择 Python 网络服务器?
谢谢。
答案1
部分业务正在成为适合您的任何服务器配置的“粉丝”。
对于一个简单的应用程序来说,这真的不应该有影响,但你会发现部署和维护对于这个或那个服务器来说更好。也许你的 Linux 发行版有更好的 Apache 软件包。也许它更适合 nginx。也许你无法让配置适用于 Apache。也许你无法让它适用于 nginx。
如果您想要一个简单的“这个服务器很棒”的答案,那根本不可能。它们都可以配置为运行良好或运行不佳,任何在该行业工作过的人都见过这两种情况,并形成了强烈的看法。
话虽如此,我还是倾向于坚持使用 Apache。Nginx 是一个热门的后起之秀,因此选择它并不是一个坏决定,但 Apache 仍然是黄金标准。
答案2
您能做的最好的事情就是确保您的 Python Web 应用程序符合 WSGI 规范 (PEP 333/3333)。不要将您的应用程序构建为依赖于特定 Python Web 服务器的特定功能,这些功能超出了 WSGI 规范。通过这样做,您将确保 Web 服务器不是关键组件,并且您不会永远被绑定到某个特定的 Web 服务器。如果您对 Web 服务器的要求发生变化,这将使您能够灵活地将整个 Web 应用程序或其中的一部分迁移到不同的 WSGI 服务器。
还要确保您的 Web 应用程序可以在多线程和多进程部署环境中工作,并确保您不会以某种方式让您的代码依赖于使用协程来实现处理并行请求的并发性。这再次确保您可以根据需要在 WSGI 服务器之间灵活地移动。
最后,不要认为你必须对整个 Web 应用程序使用同一种技术。不要仅仅因为应用程序的一个 URL 需要处理长轮询样式的请求就认为你需要将整个 Web 应用程序重新实现为异步应用程序。考虑垂直划分 Web 应用程序,只将具有特殊要求(例如异步)的特定 URL 子集移动到单独的服务器,并使用更易于使用的 WSGI 来处理 Web 应用程序的大部分内容。要将 Web 应用程序的所有不同组件放在一个主机下,请使用 nginx 前端代理到不同的后端、异步和 WSGI 等。
换句话说,始终保持开放的选择,不要通过购买特定的非标准技术来限制自己。尽量坚持使用 WSGI,因为它会在 WSGI 服务器选择和 PaaS 托管方面为您提供最大的灵活性。