【问题标题】:How is Deploying Flask on AWS Elastic Beanstalk different from running script?在 AWS Elastic Beanstalk 上部署 Flask 与运行脚本有何不同?
【发布时间】:2017-07-26 22:33:00
【问题描述】:

在 ec2 实例上部署 Flask 应用程序(换句话说,在任何计算机上运行您的脚本)和通过 AWS Elastic Beanstalk 部署 Flask 应用程序有什么区别?烧瓶deployment documentation 说:

虽然轻量级且易于使用,但 Flask 的内置服务器不是 适合生产,因为它不能很好地扩展并且默认服务 一次只有一个请求。一些可用于正确的选项 此处记录了在生产中运行 Flask。

他们推荐的部署选项之一是 AWS Elastic Beanstalk。然而,当我阅读 Amazon 的 explanation 如何部署 Flask 应用程序时,似乎他们正在使用与 Flask 内置的完全相同的服务器应用程序,例如单线程因此无法处理同时请求。我了解 Elastic Beanstalk 允许您部署多个副本,但它似乎仍然使用内置的 Flask 服务器应用程序。我错过了什么?

【问题讨论】:

    标签: python amazon-ec2 deployment flask amazon-elastic-beanstalk


    【解决方案1】:

    TL;DR 完全不同 - Elastic Beanstalk确实使用比 Flask 开发服务器更好的合理 WSGI 运行器!

    然而,当我阅读亚马逊关于如何部署 Flask 应用程序的说明时,似乎他们使用的是与 Flask 内置的完全相同的服务器应用程序

    差不多,但不完全。

    您可以通过自己删除 run-with-built-in-server 部分来确认这种情况不是 - 即示例中的以下内容:

    if __name__ == "__main__":
        # Setting debug to True enables debug output. This line should be
        # removed before deploying a production app.
        application.debug = True
        application.run()
    

    您将无法使用 python application.py 在本地自己运行它,但它仍然可以在 EB 上愉快地运行!

    EB Python 平台使用它自己的 WSGI 服务器(Apache 和 mod_wsgi,我上次查看)和一些假设/配置来找到你的 WSGI 可调用:

    来自Configuring a Python project for Elastic Beanstalk

    默认情况下,Elastic Beanstalk 会查找名为 application.py 的文件来启动您的应用程序。如果您创建的 Python 项目中不存在这种情况,则需要对应用程序的环境进行一些调整。

    如果您查看the docs for the aws:elasticbeanstalk:container:python namespace,您会看到您可以将其配置为在其他地方查找您的 WSGI 应用程序:

    WSGIPath:包含 WSGI 应用程序的文件。该文件必须具有可调用的“应用程序”。默认值:application.py

    【讨论】:

    • 一旦我开始使用它,我看到界面面板说它有一个线程化的 WSGI,虽然我看不到它在哪里说它使用的是哪个。您是否有任何文档指向“使用 mod_wsgi 的 Apache,我上次查看”?
    • 来自docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - “带有 WSGI 的 Apache 代理服务器”。我现在无法启动一个实例来实际戳它来检查 mod_wsgi!
    【解决方案2】:

    弹性计算资源(AWS 和其他)通常允许动态负载平衡,并在需要时启动更多计算资源。

    如果您在单个 ec2 实例上部署,并且此实例达到容量上限,您的用户将体验到较差的性能。如果您进行弹性部署,则会动态添加新资源以确保流畅的性能。

    【讨论】:

    • 所有这些都是有道理的。但是,这似乎仍然表明您应该将 Flask 部署在 Flask 部署页面上建议的服务器应用程序之一中,以便 Elastic Beanstalk 部署的每个单独实例更有效。我的问题基本上不是亚马逊告诉你做 Flask 告诉你不要做的事情吗?
    猜你喜欢
    • 2014-11-09
    • 2020-08-02
    • 2015-06-30
    • 2015-07-28
    • 2017-04-07
    • 2014-04-16
    • 2022-06-23
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多