我是网络服务器管理的新手。我已多次阅读烧瓶内置Web服务器不是为“生产”而设计的,并且必须仅用于测试和调试......
但是如果我的应用只触及偶尔向服务器发送数据的一千个用户呢?
如果有效,何时需要打扰更复杂的Web服务器的配置? (我正在寻找近似指标)。
简而言之,我很想找到内置Web服务器可以做什么(具有大约阈值)以及它不能做什么。
非常感谢!
答案 0 :(得分:47)
这个问题没有一个正确的答案,但这里有一些要记住的事情:
通过适量的水平扩展,您可以永远扩展调试服务器的使用范围。何时需要开始扩展(或切换到使用“真正的”Web服务器)还取决于您托管的环境,用户的期望等。
您可能遇到的主要问题是服务器是单线程的。这意味着它将按顺序一次处理一个请求。这意味着如果您尝试提供多个请求(包括favicon,静态项目,如图像,CSS和Javascript文件等),请求将需要更长时间。如果任何给定的请求发生需要很长时间(例如,20秒),那么整个应用程序在该时间(20秒)内没有响应。当然,这只是默认设置:您可以减少线程数(或者在其他进程中处理请求),这可能会缓解一些问题。但再一次,它在“高”负荷下仍然可能很慢。什么被认为是“高”负载将取决于您的应用程序和最大可接受响应时间的期望。
另一个问题是安全问题:如果你关心安全性(不仅仅是应用程序本身数据的安全性,还有运行它的盒子的安全性),那么你不应该使用开发服务器。它还没有准备好抵御任何形式的攻击。</ p>
最后,开发服务器可能完全失败。它不是设计用于长时间运行的过程(几天,几周,几个月),因此它没有经过良好的测试才能以此身份运行。
所以,是的,它有局限性。是的,你仍然可以想象它在生产中使用它。是的,我仍然建议使用“真正的”Web服务器。如果您不喜欢需要安装像Apache或Nginx这样的东西的想法,你仍然可以使用一些解决方案仍然像使用WSGI Standalone servers中的一些{{3}}一样简单“运行python脚本”运行一个设计用于生产的服务器,其功能与在命令行中运行python run_app.py
一样简单。您通常只需要创建一个4-5行python脚本来导入和创建服务器对象,将其指向Flask app
并运行它。
gunicorn只能在命令行中运行,不需要额外的脚本:
gunicorn myproject:app
...其中“myproject”是包含app
Flask对象的Python包。
答案 1 :(得分:0)