48

我是 Web 服务器管理的新手。我多次读过flask内置Web服务器不是为“生产”而设计的,只能用于测试和调试......

但是,如果我的应用程序只接触一千个偶尔向服务器发送数据的用户怎么办?

如果可行,我什么时候才需要配置更复杂的 Web 服务器?(我正在寻找近似指标)。

简而言之,我很想知道内置 Web 服务器可以做什么(使用大约阈值)以及它不能做什么。

非常感谢 !

4

2 回答 2

60

这个问题没有一个正确的答案,但请记住以下几点:

通过适当的水平扩展量,您很有可能可以永远扩展调试服务器的使用。您何时需要开始扩展(或切换到使用“真正的”Web 服务器)还取决于您托管的环境、用户的期望等。

您可能会遇到的主要问题是服务器是单线程的。这意味着它将按顺序依次处理每个请求。这意味着,如果您尝试处理多个请求(包括网站图标、图像、CSS 和 Javascript 文件等静态项目等),请求将花费更长的时间。如果任何给定的请求碰巧需要很长时间(例如,20 秒),那么您的整个应用程序在这段时间内(20 秒)都没有响应。当然,这只是默认设置:您可以增加线程数(或在其他进程中处理请求),这可能会缓解一些问题。但再一次,在“高”负载下它仍然可能很慢。什么被认为是“高”负载将取决于您的应用程序以及对最大可接受响应时间的期望。

另一个问题是安全性:如果您完全关心安全性(不仅仅是应用程序本身数据的安全性,还有运行它的机器的安全性),那么您不应该使用开发服务器。它还没有准备好承受任何形式的攻击。

最后,开发服务器可能会彻底失败。它不是为长期运行的过程(几天、几周、几个月)而设计的,因此它还没有经过很好的测试来以这种能力工作。

所以,是的,它有局限性。是的,您仍然可以在生产中使用它。是的,我仍然建议使用“真正的”网络服务器。如果您不喜欢需要安装 Apache 或 Nginx 之类的东西,您仍然可以通过使用一些WSGI 独立服务器来使用仍然像“运行 python 脚本”一样简单的解决方案,它可以运行设计用于生产的服务器,就像python run_app.py在命令行中运行一样简单。您通常只需要创建一个 4-5 行的 python 脚本来导入和创建服务器对象,将其指向您的 Flaskapp并运行它。

gunicorn 可以只在命令行上运行以下命令,不需要额外的脚本:

gunicorn myproject:app

...其中“myproject”是包含appFlask 对象的 Python 包。请记住,gunicorn 的一位开发人员可能会建议反对这种方法。请参阅https://serverfault.com/questions/331256/why-do-i-need-nginx-and-something-like-gunicorn

于 2013-12-31T19:03:22.553 回答
1

OP 早就开始了,但是对于那些将来遇到这个问题的人,我只想补充一点,即使在笔记本电脑上设置 Apache 服务器也是免费且非常容易的。只需在配置文件中取消注释或注释掉行,就可以轻松地为您想要的尽可能少或尽可能多的功能配置它。现在可能有一种更简单的 GUI 方法可以做到这一点,但只是编辑配置很简单。

于 2017-10-16T22:30:08.757 回答