WSGI 容器与 AWS Lambda 相关吗?
Is a WSGI container relevant on AWS Lambda?
我有一个基于 Flask 的 Web 应用程序,它通过 Zappa 部署到 AWS Lambda。一切都很好。
While lightweight and easy to use, Flask’s built-in server is not suitable for production as it doesn’t scale well. Some of the options available for properly running Flask in production are documented here.
在独立服务器上,Python 是单线程的(全局解释器锁 (GIL) 等),因此如果不小心和注意就不能很好地处理多个请求。
在 AWS Lambda(可能还有其他 FaaS 基础设施)上,每个 HTTP 请求都有一个单独的 Python 实例,因此 GIL 不是问题,Lambda 通过使用多个函数调用来负责扩展。
因此,在 AWS Lambda 上 运行 时是否强烈推荐使用 WGSI 容器(Gunicorn、uWGSI 等)?为什么或为什么不?
我猜可能相关的一些因素包括:
- 费用
- 资源(例如数据库连接)
- 错误
- 启动性能
- 每个请求开销
当文档谈到“Flask 的内置服务器”时,它是在谈论当您 运行 命令 flask run
(或在 older applications running 命令中获得的服务器像 python my_application.py
在主函数中有一行像 app.run()
).
当您在 Lambda 上 运行 flask(使用 Zappa 或 aws-wsgi or serverless-wsgi 等其他解决方案)时,您根本没有使用 Flask 的内置服务器或任何服务器;包装器代码(在 Zappa 或其他任何程序中)正在将 lambda 事件转换为对您的 WSGI 应用程序的调用。
由于没有实际的 WSGI 服务器,因此无法使用 Gunicorn、uWGSI 等(好吧,也许可以,但会很复杂)。
我有一个基于 Flask 的 Web 应用程序,它通过 Zappa 部署到 AWS Lambda。一切都很好。
While lightweight and easy to use, Flask’s built-in server is not suitable for production as it doesn’t scale well. Some of the options available for properly running Flask in production are documented here.
在独立服务器上,Python 是单线程的(全局解释器锁 (GIL) 等),因此如果不小心和注意就不能很好地处理多个请求。
在 AWS Lambda(可能还有其他 FaaS 基础设施)上,每个 HTTP 请求都有一个单独的 Python 实例,因此 GIL 不是问题,Lambda 通过使用多个函数调用来负责扩展。
因此,在 AWS Lambda 上 运行 时是否强烈推荐使用 WGSI 容器(Gunicorn、uWGSI 等)?为什么或为什么不?
我猜可能相关的一些因素包括:
- 费用
- 资源(例如数据库连接)
- 错误
- 启动性能
- 每个请求开销
当文档谈到“Flask 的内置服务器”时,它是在谈论当您 运行 命令 flask run
(或在 older applications running 命令中获得的服务器像 python my_application.py
在主函数中有一行像 app.run()
).
当您在 Lambda 上 运行 flask(使用 Zappa 或 aws-wsgi or serverless-wsgi 等其他解决方案)时,您根本没有使用 Flask 的内置服务器或任何服务器;包装器代码(在 Zappa 或其他任何程序中)正在将 lambda 事件转换为对您的 WSGI 应用程序的调用。
由于没有实际的 WSGI 服务器,因此无法使用 Gunicorn、uWGSI 等(好吧,也许可以,但会很复杂)。