烧瓶内置Web服务器有哪些限制

ede*_*ans 39 sysadmin webserver embeddedwebserver flask

我是网络服务器管理的新手.我已多次阅读烧瓶内置Web服务器不是为"生产"而设计的,并且必须仅用于测试和调试......

但是如果我的应用程序只触及偶尔向服务器发送数据的一千个用户呢?

如果它有效,我何时需要打扰更复杂的Web服务器的配置?(我正在寻找近似指标).

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

非常感谢 !

Mar*_*eth 53

这个问题没有一个正确的答案,但这里有一些要记住的事情:

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

您可能遇到的主要问题是服务器是单线程的.这意味着它将按顺序一次处理一个请求.这意味着如果您尝试提供多个请求(包括favicon,静态项目,如图像,CSS和Javascript文件等),请求将需要更长时间.如果任何给定的请求发生需要很长时间(例如,20秒),那么整个应用程序在该时间(20秒)内没有响应.当然,这只是默认设置:您可以减少线程数(或者在其他进程中处理请求),这可能会缓解一些问题.但再一次,它在"高"负荷下仍然可能很慢.什么被认为是"高"负载将取决于您的应用程序和最大可接受响应时间的期望.

另一个问题是安全性:如果你全神贯注于安全性(而不仅仅是应用程序本身数据的安全性,还有运行它的盒子的安全性),那么你就不应该使用开发服务器.它还没有准备好承受任何形式的攻击.

最后,开发服务器可能完全失败.它不是设计用于长时间运行的过程(几天,几周,几个月),因此它没有经过充分测试才能以此容量工作.

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

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

gunicorn myproject:app
Run Code Online (Sandbox Code Playgroud)

...其中"myproject"是包含appFlask对象的Python包.

  • 使用 Apache/Nginx/gunicorn 的优点/缺点是什么,即我该如何选择?Gunicorn 够好吗? (2认同)