Как Развертывание колбы на AWS Elastic Beanstalk отличается от запуска script?

В чем разница между развертыванием приложения Flask на экземпляре ec2 (другими словами, с помощью script на любом компьютере) и развертыванием приложения Flask с помощью AWS Elastic Beanstalk? В документации Flax говорится:

В то время как легкий и простой в использовании, встроенный сервер Flocks подходит для производства, так как он плохо масштабируется и по умолчанию служит только один запрос за раз. Некоторые из доступных вариантов работающий флакон в производстве, документируется здесь.

Одним из рекомендуемых вариантов развертывания является AWS Elastic Beanstalk. Когда я читал Amazon объяснение о том, как развернуть приложение Flask, однако похоже, что они используют то же самое серверное приложение, в Flask, который, например, является однопоточным и поэтому не может обрабатывать одновременные запросы. Я понимаю, что Elastic Beanstalk позволяет вам развернуть несколько копий, но по-прежнему использует встроенное приложение для флэш-серверов. Что мне не хватает?

Ответ 1

TL; DR. Полностью разные. Устойчивый Beanstalk использует разумный бегун WSGI, который лучше, чем сервер Flask dev.

Когда я прочитал через Amazon объяснение того, как развернуть приложение 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, последний раз я смотрел) и некоторые предположения /config, чтобы найти ваш WSGI:

От Настройка проекта Python для эластичного бобового стека:

По умолчанию Elastic Beanstalk ищет файл с именем application.py, чтобы запустить приложение. Если это не существует в проекте Python, который вы создали, необходима некоторая настройка вашей прикладной среды.

Если вы проверите документы для пространства имен aws:elasticbeanstalk:container:python, вы увидите, что вы можете настроить его для поиска в другом месте для вашего приложения WSGI:

WSGIPath: файл, содержащий приложение WSGI. В этом файле должно быть указано "приложение". По умолчанию: application.py

Ответ 2

Эластичные вычислительные ресурсы (AWS и другие) обычно позволяют динамически распределять нагрузку и запускать больше вычислительных ресурсов по мере необходимости.

Если вы развертываете один экземпляр ec2 и этот экземпляр достигает емкости, ваши пользователи будут испытывать плохую производительность. Если вы развертываете эластично, новые ресурсы динамически добавляются для обеспечения плавной производительности.