一尘不染

Flask内置Web服务器的局限性是什么

flask

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

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

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

简而言之,我很想找到内置的Web服务器可以做什么(具有大约阈值)和它不能做什么。

非常感谢 !


阅读 1021

收藏
2020-04-05

共1个答案

一尘不染

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

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

你可能会遇到的主要问题是服务器是单线程的。这意味着它将一次连续地处理每个请求。这意味着,如果你尝试服务多个请求(包括网站图标,图像,CSS和Javascript文件等静态项),则请求将花费更长的时间。如果任何给定的请求恰好花费很长时间(例如20秒),则整个应用程序将在该时间(20秒)内无响应。当然,这只是默认设置:你可以增加线程数(或在其他进程中处理请求),这可以缓解某些问题。但是再一次,它在“高”负载下仍然会变慢。所谓的“高”负载将取决于你的应用程序以及对最大可接受响应时间的期望。

另一个问题是安全性:如果你完全关心安全性(不仅是应用程序本身中数据的安全性,还包括将要运行它的盒子的安全性),那么你不应该使用开发服务器。它尚未准备好承受任何形式的攻击。

最后,开发服务器可能会完全失败。它并非设计用于长时间运行(几天,几周,几个月),因此尚未经过充分测试以达到此目的。

因此,是的,它有局限性。是的,你仍然可以想象在生产中使用它。是的,我仍然建议使用“真实” Web服务器。如果你不喜欢需要安装Apache或Nginx之类的想法,则仍然可以使用一些WSGI Standalone服务器,该解决方案仍然像“运行python脚本”一样简单。设计用于生产中的服务器,就像python run_app.py在命令行中运行一样简单。通常,你只需要创建4-5行的python脚本即可导入和创建服务器对象,将其指向Flask app并运行它。

gunicorn可以仅在命令行上运行以下命令,而无需额外的脚本:

gunicorn myproject:app

…其中“ myproject”是包含appFlask对象的Python包。请记住,其中一个“ gunicorn”开发商可能会建议你反对这种方法。

2020-04-05